我正在尝试使用vowpal wabbit进行逻辑回归.我不确定这是否是正确的语法
For training, I do
./vw -d ~/Desktop/new_data.txt --passes 20 --binary --cache_file cache.txt -f lr.vw --loss_function logistic --l1 0.05
For testing I do
./vw -d ~/libsvm-3.18_test/matlab/new_data_test.txt --binary -t -i lr.vw -p predictions.txt -r raw_score.txt
Run Code Online (Sandbox Code Playgroud)
这是我的火车数据的片段
-1:1.00038 | 110:0.30103 262:0.90309 689:1.20412 1103:0.477121 1286:1.5563 2663:0.30103 2667:0.30103 2715:4.63112 3012:0.30103 3113:8.38411 3119:4.62325 3382:1.07918 3666:1.20412 3728:5.14959 4029:0.30103 4596:0.30103
1:2601.25 | 32:2.03342 135:3.77379 146:3.19535 284:2.5563 408:0.30103 542:3.80618 669:1.07918 689:2.25527 880:0.30103 915:1.98227 1169:5.35371 1270:0.90309 1425:0.30103 1621:0.30103 1682:0.30103 1736:3.98227 1770:0.60206 1861:4.34341 1900:3.43136 1905:7.54141 1991:5.33791 2437:0.954243 2532:2.68664 3370:2.90309 …Run Code Online (Sandbox Code Playgroud) 我已经开始使用Vowpal Wabbit进行逻辑回归,但是我无法重现它给出的结果.也许它有一些无证的"魔法",但有没有人能够复制/验证/检查逻辑回归的计算?
例如,通过下面的简单数据,我们的目标是模拟age预测的方式label.很明显,当年龄增加观察到1增加的可能性时,存在强烈的关系.
作为一个简单的单元测试,我使用了下面的12行数据:
age label
20 0
25 0
30 0
35 0
40 0
50 0
60 1
65 0
70 1
75 1
77 1
80 1
Run Code Online (Sandbox Code Playgroud)
现在,使用R,SPSS或甚至手动对此数据集执行逻辑回归,生成一个看起来像的模型 L = 0.2294*age - 14.08.因此,如果我使用年龄,并使用logit变换prob = 1 /(1 + EXP(-L)),我可以获得预测的概率,其范围从0.0001第一行到0.9864最后一行,如合理预期的那样.
如果我在Vowpal Wabbit插入相同的数据,
-1 'P1 |f age:20
-1 'P2 |f age:25
-1 'P3 |f age:30
-1 'P4 |f age:35
-1 'P5 |f age:40 …Run Code Online (Sandbox Code Playgroud) 我有以下所有分类变量的数据:
class education income social_standing
1 basic low good
0 low high V_good
1 high low not_good
0 v_high high good
Run Code Online (Sandbox Code Playgroud)
这里的教育有四个级别(基本,低,高和高).收入有两个层次的低点和高点; 而social_standing有三个级别(好,v_good和not_good).
就我将上述数据转换为VW格式的理解而言,它将是这样的:
1 |person education_basic income_low social_standing_good
0 |person education_low income_high social_standing_v_good
1 |person education_high income_low social_standing_not_good
0 |person education_v_high income_high social_standing_good
Run Code Online (Sandbox Code Playgroud)
这里,'person'是命名空间,所有其他都是特征值,以相应的特征名称为前缀.我对么?不知何故,这种特征值的表示对我来说非常困惑.有没有其他方式来表示功能?应该感谢你的帮助.
我正在尝试将数据帧写入gzip文件但有问题.
这是我的代码示例:
df1 <- data.frame(id = seq(1,10,1), var1 = runif(10), var2 = runif(10))
gz1 <- gzfile("df1.gz","w" )
writeLines(df1)
Run Code Online (Sandbox Code Playgroud)
错误
writeLines(df1):无效的'text'参数
有什么建议?
编辑:我想写的字符向量的示例行是:
0 | var1:1.5 var2:.55 var7:1250
Run Code Online (Sandbox Code Playgroud)
类标签/ y变量通过"|"与x-vars分隔,变量名通过":"与变量之间的空格分隔.
EDIT2:我为问题的措辞/格式道歉,但结果如下:旧方法:
system.time(write(out1, file="out1.txt"))
# user system elapsed
# 9.772 17.205 86.860
Run Code Online (Sandbox Code Playgroud)
新方法:
writeGzFile <- function(){
gz1 = gzfile("df1.gz","w");
write(out1, gz1);
close(gz1)
}
system.time( writeGzFile())
# user system elapsed
# 2.312 0.000 2.478
Run Code Online (Sandbox Code Playgroud)
非常感谢大家帮助我解决这个问题.
无论如何在Vowpal Wabbit中计算AUC?
我使用Vowpal Wabbit的原因之一是数据文件的大小.我可以使用Vowpal Wabbit的输出计算Vowpal Wabbit环境之外的AUC,但如果数据文件很大,这可能会有问题.
我使用以下命令在守护进程模式下启动Vowpal Wabbit:
vw --loss_function hinge --ect 250 --quiet --passes 5 -b 25 --daemon --port 10001 --pid_file pidfile
这很好用,我可以通过连接到套接字并发送数据和阅读答案来获得预测.
我的问题是,是否有可能在守护进程模式下获得通过套接字传递的原始预测?
1.000000我不想仅仅
作为答案,1:-2.31425 2:-3.98557 3:-3.97967而是想得到一些东西.
嗨伙计们:我试图确定VowpalWabbit的"状态"如何随着输入集的大小增长而保持.在典型的机器学习环境中,如果我有1000个输入向量,我希望一次发送所有这些,等待模型构建阶段完成,然后使用该模型创建新的预测.
在大众,似乎算法的"在线"性质使这种范式转变为更高性能并且能够实时调整.
1)如何实施这种实时模型修改?
2)随着时间的推移,大众在总输入数据大小方面是否会增加资源?也就是说,当我向我的VW模型添加更多数据时(当它很小时),一旦累积的特征向量输入增加到1000s,10000s或数百万,实时调整计算是否会开始花费更长时间?
performance scalability machine-learning vowpalwabbit online-algorithm
我正在努力安装vowpal wobbit并且当我运行make文件时失败,抛出:
cd library; make; cd ..
g++ -g -o ezexample temp2.cc -L ../vowpalwabbit -l vw -l allreduce -l boost_program_options -l z -l pthread
ld: library not found for -lboost_program_options collect2: ld returned 1 exit status make[1]: *** [ezexample] Error 1'
Run Code Online (Sandbox Code Playgroud)
然后我通过指定-L/usr/local/lib将链接添加到boost库中
现在我收到以下错误:
g++ -g -o ezexample temp2.cc -L/usr/local/lib ../vowpalwabbit -l vw -l allreduce -l boost_program_options -l z -l pthread
ld: library not found for -lvw
collect2: ld returned 1 exit status
make: *** [ezexample] Error 1
Run Code Online (Sandbox Code Playgroud) 我正在尝试用倒置的哈希保存一个用于保存的vowpal wabbit模型.我有一个有效的模型,具有以下内容:
vw --oaa 2 -b 24 -d mydata.vw --readable_model mymodel.readable
它产生一个这样的模型文件:
Version 7.7.0
Min label:-1.000000
Max label:1.000000
bits:24
0 pairs:
0 triples:
rank:0
lda:0
0 ngram:
0 skip:
options: --oaa 2
:0
66:0.016244
67:-0.016241
80:0.026017
81:-0.026020
84:0.015005
85:-0.015007
104:-0.053924
105:0.053905
112:-0.015402
113:0.015412
122:-0.025704
123:0.025704
...
Run Code Online (Sandbox Code Playgroud)
(以及更多数千个功能).但是,为了更有用,我需要查看功能名称.看起来像一个相当明显的事情,但我做到了
vw --oaa 2 -b 24 -d mydata.vw --invert_hash mymodel.inverted
它产生了这样的模型文件(没有产生权重):
Version 7.7.0
Min label:-1.000000
Max label:1.000000
bits:24
0 pairs:
0 triples:
rank:0
lda:0
0 ngram:
0 skip:
options: --oaa 2
:0
Run Code Online (Sandbox Code Playgroud)
感觉我显然做错了什么,但我认为我正在以记录的方式 …
根据可用的文档和资源,如何完成一个简单的入门流程并不是很清楚,你可以将Vowpal Wabbit作为守护进程启动(甚至可能没有任何预先学习的模型)并让它在线学习和探索 - 我我正在寻找一个我在一个环境中提供食物的流程,获得推荐,并反馈成本/奖励.
因此,让我跳过对所尝试内容的技术描述,并简单地要求明确说明我认为在这方面必不可少的内容 -
我通常会获得一个分发(允许的操作数量的大小)作为每个发送的输入的回复.通常是相同的分布,无论我发送什么.也许它需要一个完整的学习时代与默认--cb_explore算法,我不知道,并不确定纪元持续时间可以从外部设置.
我知道,通过过去的交互和来自cbfied数据的学习,已经做了很多工作.但是我认为应该有一些可用的解释清除上面那些或多或少的实用主义要点.
非常感谢!
vowpalwabbit ×10
compression ×1
gzip ×1
large-data ×1
performance ×1
r ×1
scalability ×1
zip ×1