vowpal-wabbit:使用多次传递、保持和保持期来避免过度拟合?
vowpal-wabbit: use of multiple passes, holdout, & holdout-period to avoid overfitting?
我想使用 awesome vowpal wabbit tool
:
使用以下命令训练用于类别分类的二元 S 形前馈网络
vw --binary --nn 4 train.vw -f category.model
并测试它:
vw --binary -t -i category.model -p test.vw
但我的结果非常糟糕(与我的线性 svm 估计器相比)。
我发现一条评论说我应该使用 Number of Training Passes
参数 (--passes arg
)。
所以我的问题是如何知道训练次数以避免重新训练模型?
P.S。我应该使用 holdout_period
参数吗?如何?
问题中的测试命令不正确。它没有输入(-p ...
表示输出预测)。也不清楚你是想 test 还是 predict 因为它说 test
但使用的命令有 -p ...
Test 表示您已标记数据并且正在评估模型的质量。严格来说:predict 意味着你没有标签,所以你实际上无法知道你的预测有多好。实际上,您还可以预测保留的、标记的数据(通过忽略它们来假装它没有标签),然后评估这些预测有多好,因为您实际上有标签。
一般:
如果你想做二分类,你应该在{-1, 1}
中使用标签并使用--loss_function logistic
。 --binary
这是一个独立的选项,意味着您希望预测是二进制的(给您的信息更少)。
如果您已经有一个带有标签的单独测试集,则无需坚持。
vw
中的 holdout 机制旨在替换测试集并避免过度拟合,它仅在使用多遍时才相关,因为在单遍中 all 示例被有效地保留了;每个下一个(尚未见过的)示例被视为 1)未标记用于预测,以及 2)标记用于测试和模型更新。 IOW:你的训练集实际上也是你的测试集。
因此,您可以在训练集上进行 多次传递而无需保留 :
vw --loss_function logistic --nn 4 -c --passes 2 --holdout_off train.vw -f model
然后使用单独的标记测试集测试模型:
vw -t -i model test.vw
或在同一个训练集上进行多次传递,并将一些保留作为测试集。
vw --loss_function logistic --nn 4 -c --passes 20 --holdout_period 7 train.vw -f model
如果您没有测试集,并且想通过使用多次遍历来加强适应性,您可以要求 vw
保留每个 N
个示例(默认的 N
是 10,但您可以使用 --holdout_period <N>
显式覆盖它,如上所示)。在这种情况下,您可以指定更多的遍数,因为 vw
会在保留集的损失开始增长时自动提前终止。
你会注意到你提前终止了,因为 vw
会打印如下内容:
passes used = 5
...
average loss = 0.06074 h
表明在提前停止之前实际使用了 N
遍中的 5 次,示例的留出子集的误差为 0.06074(尾随 h
表明这是保留-出损失)。
如您所见,通过次数和保持期是完全独立的选项。
要改进您的模型并获得更多信心,您可以使用其他优化,改变 holdout_period,尝试其他 --nn
参数。您可能还想检查 vw-hypersearch
实用程序(在 utl
子目录中)以帮助找到更好的超参数。
这是一个在源代码中包含的测试集之一上使用 vw-hypersearch
的示例:
$ vw-hypersearch 1 20 vw --loss_function logistic --nn % -c --passes 20 --holdout_period 11 test/train-sets/rcv1_small.dat --binary
trying 13 ............. 0.133333 (best)
trying 8 ............. 0.122222 (best)
trying 5 ............. 0.088889 (best)
trying 3 ............. 0.111111
trying 6 ............. 0.1
trying 4 ............. 0.088889 (best)
loss(4) == loss(5): 0.088889
5 0.08888
表明 4
或 5
应该是 --nn
的良好参数,在 11 个示例中的 1 个保留子集上产生 0.08888 的损失。
我想使用 awesome vowpal wabbit tool
:
vw --binary --nn 4 train.vw -f category.model
并测试它:
vw --binary -t -i category.model -p test.vw
但我的结果非常糟糕(与我的线性 svm 估计器相比)。
我发现一条评论说我应该使用 Number of Training Passes
参数 (--passes arg
)。
所以我的问题是如何知道训练次数以避免重新训练模型?
P.S。我应该使用 holdout_period
参数吗?如何?
问题中的测试命令不正确。它没有输入(-p ...
表示输出预测)。也不清楚你是想 test 还是 predict 因为它说 test
但使用的命令有 -p ...
Test 表示您已标记数据并且正在评估模型的质量。严格来说:predict 意味着你没有标签,所以你实际上无法知道你的预测有多好。实际上,您还可以预测保留的、标记的数据(通过忽略它们来假装它没有标签),然后评估这些预测有多好,因为您实际上有标签。
一般:
如果你想做二分类,你应该在
{-1, 1}
中使用标签并使用--loss_function logistic
。--binary
这是一个独立的选项,意味着您希望预测是二进制的(给您的信息更少)。如果您已经有一个带有标签的单独测试集,则无需坚持。
vw
中的 holdout 机制旨在替换测试集并避免过度拟合,它仅在使用多遍时才相关,因为在单遍中 all 示例被有效地保留了;每个下一个(尚未见过的)示例被视为 1)未标记用于预测,以及 2)标记用于测试和模型更新。 IOW:你的训练集实际上也是你的测试集。
因此,您可以在训练集上进行 多次传递而无需保留 :
vw --loss_function logistic --nn 4 -c --passes 2 --holdout_off train.vw -f model
然后使用单独的标记测试集测试模型:
vw -t -i model test.vw
或在同一个训练集上进行多次传递,并将一些保留作为测试集。
vw --loss_function logistic --nn 4 -c --passes 20 --holdout_period 7 train.vw -f model
如果您没有测试集,并且想通过使用多次遍历来加强适应性,您可以要求 vw
保留每个 N
个示例(默认的 N
是 10,但您可以使用 --holdout_period <N>
显式覆盖它,如上所示)。在这种情况下,您可以指定更多的遍数,因为 vw
会在保留集的损失开始增长时自动提前终止。
你会注意到你提前终止了,因为 vw
会打印如下内容:
passes used = 5
...
average loss = 0.06074 h
表明在提前停止之前实际使用了 N
遍中的 5 次,示例的留出子集的误差为 0.06074(尾随 h
表明这是保留-出损失)。
如您所见,通过次数和保持期是完全独立的选项。
要改进您的模型并获得更多信心,您可以使用其他优化,改变 holdout_period,尝试其他 --nn
参数。您可能还想检查 vw-hypersearch
实用程序(在 utl
子目录中)以帮助找到更好的超参数。
这是一个在源代码中包含的测试集之一上使用 vw-hypersearch
的示例:
$ vw-hypersearch 1 20 vw --loss_function logistic --nn % -c --passes 20 --holdout_period 11 test/train-sets/rcv1_small.dat --binary
trying 13 ............. 0.133333 (best)
trying 8 ............. 0.122222 (best)
trying 5 ............. 0.088889 (best)
trying 3 ............. 0.111111
trying 6 ............. 0.1
trying 4 ............. 0.088889 (best)
loss(4) == loss(5): 0.088889
5 0.08888
表明 4
或 5
应该是 --nn
的良好参数,在 11 个示例中的 1 个保留子集上产生 0.08888 的损失。