Vowpal Wabbit:分割训练和测试文件时如何使用命令行参数
Vowpal Wabbit: How to use command line arguments when splitting to train and test files
我是 VW 的新手,想以我使用命令行参数的方式验证我的行为..
我把我的数据集分成train set和test set(按75%-25%),现在想运行 VW。
我使用的命令行参数:
火车组
vw train.tsv -f model.vw --sgd --loss_function logistic --hash all
--learning_rate 0.01 --power_t 0.0 --noconstant -b 22 --ignore 'A'
测试集
vw test.tsv -t -i model.vw -p preds.txt --sgd --link logistic --hash
all --learning_rate 0.01 --power_t 0.0 --noconstant -b 22
我不确定测试部分是否需要这部分:
--hash all --learning_rate 0.01 --power_t 0.0 --noconstant -b 22
由于它存在于火车部分构建的模型中。
感谢帮助!
上述问题中尝试的示例存在一些问题。
让我们分步解释一下。
从简单的开始,用一个最小的工作示例:
培训:
# Read training data from train.dat, learn
# and store the resulting model in train.model
vw -d train.dat -f train.model
测试:
# use the train.model to predict on new test.dat data
# output the predictions into predict.dat
vw -t -i train.model -d test.dat -p predict.dat
备注:
train.dat
和 test.dat
必须是 vw
输入格式(不能是 *.tsv
)。有一个实用程序可以将 csv/tsv 格式转换为 vw
格式。在源代码树中查找 utl/csv2vw
。
- 注意使用
-d ...
将输入文件参数传递给 vw
。 vw
的一些旧版本对于必须指定 -d
更为宽松,但最近的版本更为严格。为了安全起见,在输入文件前加上-d
即可。
vw
输入格式为documented here
- 正如您所注意到的:训练期间使用的一些选项在测试期间不需要通过,因为它们已经嵌入到模型中(并且无法更改)。例如,位数
-b 22
就是其中之一。但是您不需要记住哪些选项。 vw
如果它已经知道的(来自模型的)选项不一致或重复,将打印错误。只需删除您收到错误消息的那些。
-t
表示仅测试。默认情况下 vw
将继续学习并更新内存中的模型。
-i
(加载初始模型)和-f
(存储最终模型)用于读取模型文件(开始时)和写入模型文件(结束时)运行.
- 通常,由于
vw
是在线学习者,因此无需将数据拆分为训练和测试。每个示例都将用于 a) 预测和 b) 学习。由于预测发生在模型更新之前,所有在线预测损失都是类似测试的(样本外)
--power_t 0
是一个极端的设置,可能不是你想要的,它会一直忘记学到的东西(假设数据的极端非平稳性)
- 如果标签在
{-1, 1}
中并且您对逻辑回归感兴趣,您可以添加 --loss_function logistic
等选项。
--hash-all
仅当您的特征名称是数字而其他特征名称不是数字时才有意义,并且您希望尽量减少冲突。
--sgd
禁用 SGD 算法增强功能:--adaptive
、--normalized
和 --invariant
。在大多数情况下,这会使收敛变得不那么稳健和缓慢。考虑放弃此选项。
- 在大多数情况下,
vw
默认选项运行良好。仅当您了解该选项并知道您在做什么时才更改它们。
新的 Vowpal Wabbit 站点 vowpalwabbit.org 上有一些新的和改进的教程。初学者的部分和示例在我的经验中非常好。
我是 VW 的新手,想以我使用命令行参数的方式验证我的行为..
我把我的数据集分成train set和test set(按75%-25%),现在想运行 VW。
我使用的命令行参数:
火车组
vw train.tsv -f model.vw --sgd --loss_function logistic --hash all --learning_rate 0.01 --power_t 0.0 --noconstant -b 22 --ignore 'A'
测试集
vw test.tsv -t -i model.vw -p preds.txt --sgd --link logistic --hash all --learning_rate 0.01 --power_t 0.0 --noconstant -b 22
我不确定测试部分是否需要这部分:
--hash all --learning_rate 0.01 --power_t 0.0 --noconstant -b 22
由于它存在于火车部分构建的模型中。
感谢帮助!
上述问题中尝试的示例存在一些问题。
让我们分步解释一下。 从简单的开始,用一个最小的工作示例:
培训:
# Read training data from train.dat, learn
# and store the resulting model in train.model
vw -d train.dat -f train.model
测试:
# use the train.model to predict on new test.dat data
# output the predictions into predict.dat
vw -t -i train.model -d test.dat -p predict.dat
备注:
train.dat
和test.dat
必须是vw
输入格式(不能是*.tsv
)。有一个实用程序可以将 csv/tsv 格式转换为vw
格式。在源代码树中查找utl/csv2vw
。- 注意使用
-d ...
将输入文件参数传递给vw
。vw
的一些旧版本对于必须指定-d
更为宽松,但最近的版本更为严格。为了安全起见,在输入文件前加上-d
即可。 vw
输入格式为documented here- 正如您所注意到的:训练期间使用的一些选项在测试期间不需要通过,因为它们已经嵌入到模型中(并且无法更改)。例如,位数
-b 22
就是其中之一。但是您不需要记住哪些选项。vw
如果它已经知道的(来自模型的)选项不一致或重复,将打印错误。只需删除您收到错误消息的那些。 -t
表示仅测试。默认情况下vw
将继续学习并更新内存中的模型。-i
(加载初始模型)和-f
(存储最终模型)用于读取模型文件(开始时)和写入模型文件(结束时)运行.- 通常,由于
vw
是在线学习者,因此无需将数据拆分为训练和测试。每个示例都将用于 a) 预测和 b) 学习。由于预测发生在模型更新之前,所有在线预测损失都是类似测试的(样本外) --power_t 0
是一个极端的设置,可能不是你想要的,它会一直忘记学到的东西(假设数据的极端非平稳性)- 如果标签在
{-1, 1}
中并且您对逻辑回归感兴趣,您可以添加--loss_function logistic
等选项。 --hash-all
仅当您的特征名称是数字而其他特征名称不是数字时才有意义,并且您希望尽量减少冲突。--sgd
禁用 SGD 算法增强功能:--adaptive
、--normalized
和--invariant
。在大多数情况下,这会使收敛变得不那么稳健和缓慢。考虑放弃此选项。- 在大多数情况下,
vw
默认选项运行良好。仅当您了解该选项并知道您在做什么时才更改它们。
新的 Vowpal Wabbit 站点 vowpalwabbit.org 上有一些新的和改进的教程。初学者的部分和示例在我的经验中非常好。