Machine learning 为什么规范化特征值不会';培训输出变化不大?

Machine learning 为什么规范化特征值不会';培训输出变化不大?,machine-learning,vowpalwabbit,Machine Learning,Vowpalwabbit,我有3113个训练示例,在一个大小为78的密集特征向量上。特征的大小是不同的:大约20,大约200K。例如,以下是一个培训示例,采用vowpal-wabbit输入格式 0.050000 1 '2006-07-10_00:00:00_0.050000| F0:9.670000 F1:0.130000 F2:0.320000 F3:0.570000 F4:9.837000 F5:9.593000 F6:9.238150 F7:9.646667 F8:9.631333 F9:8.338904 F10:

我有3113个训练示例,在一个大小为78的密集特征向量上。特征的大小是不同的:大约20,大约200K。例如,以下是一个培训示例,采用
vowpal-wabbit
输入格式

0.050000 1 '2006-07-10_00:00:00_0.050000| F0:9.670000 F1:0.130000 F2:0.320000 F3:0.570000 F4:9.837000 F5:9.593000 F6:9.238150 F7:9.646667 F8:9.631333 F9:8.338904 F10:9.748000 F11:10.227667 F12:10.253667 F13:9.800000 F14:0.010000 F15:0.030000 F16:-0.270000 F17:10.015000 F18:9.726000 F19:9.367100 F20:9.800000 F21:9.792667 F22:8.457452 F23:9.972000 F24:10.394833 F25:10.412667 F26:9.600000 F27:0.090000 F28:0.230000 F29:0.370000 F30:9.733000 F31:9.413000 F32:9.095150 F33:9.586667 F34:9.466000 F35:8.216658 F36:9.682000 F37:10.048333 F38:10.072000 F39:9.780000 F40:0.020000 F41:-0.060000 F42:-0.560000 F43:9.898000 F44:9.537500 F45:9.213700 F46:9.740000 F47:9.628000 F48:8.327233 F49:9.924000 F50:10.216333 F51:10.226667 F52:127925000.000000 F53:-15198000.000000 F54:-72286000.000000 F55:-196161000.000000 F56:143342800.000000 F57:148948500.000000 F58:118894335.000000 F59:119027666.666667 F60:181170133.333333 F61:89209167.123288 F62:141400600.000000 F63:241658716.666667 F64:199031688.888889 F65:132549.000000 F66:-16597.000000 F67:-77416.000000 F68:-205999.000000 F69:144690.000000 F70:155022.850000 F71:122618.450000 F72:123340.666667 F73:187013.300000 F74:99751.769863 F75:144013.200000 F76:237918.433333 F77:195173.377778
训练结果不好,所以我想我应该规范化这些特征,使它们具有相同的大小。我计算了所有示例中每个特征的平均值和标准偏差,然后进行
newValue=(oldValue-mean)/stddev
,这样它们的新
平均值和
stddev
都是1。对于同一示例,以下是归一化后的特征值:

0.050000 1 '2006-07-10_00:00:00_0.050000| F0:-0.660690 F1:0.226462 F2:0.383638 F3:0.398393 F4:-0.644898 F5:-0.670712 F6:-0.758233 F7:-0.663447 F8:-0.667865 F9:-0.960165 F10:-0.653406 F11:-0.610559 F12:-0.612965 F13:-0.659234 F14:0.027834 F15:0.038049 F16:-0.201668 F17:-0.638971 F18:-0.668556 F19:-0.754856 F20:-0.659535 F21:-0.663001 F22:-0.953793 F23:-0.642736 F24:-0.606725 F25:-0.609946 F26:-0.657141 F27:0.173106 F28:0.310076 F29:0.295814 F30:-0.644357 F31:-0.678860 F32:-0.764422 F33:-0.658869 F34:-0.674367 F35:-0.968679 F36:-0.649145 F37:-0.616868 F38:-0.619564 F39:-0.649498 F40:0.041261 F41:-0.066987 F42:-0.355693 F43:-0.638604 F44:-0.676379 F45:-0.761250 F46:-0.653962 F47:-0.668194 F48:-0.962591 F49:-0.635441 F50:-0.611600 F51:-0.615670 F52:-0.593324 F53:-0.030322 F54:-0.095290 F55:-0.139602 F56:-0.652741 F57:-0.675629 F58:-0.851058 F59:-0.642028 F60:-0.648002 F61:-0.952896 F62:-0.629172 F63:-0.592340 F64:-0.682273 F65:-0.470121 F66:-0.045396 F67:-0.128265 F68:-0.185295 F69:-0.510251 F70:-0.515335 F71:-0.687727 F72:-0.512749 F73:-0.471032 F74:-0.789335 F75:-0.491188 F76:-0.400105 F77:-0.505242
然而,这会产生基本相同的测试结果(如果不完全相同,因为我在每次训练之前都会洗牌示例)

想知道为什么结果没有变化吗

以下是我的培训和测试命令:

rm -f cache
cat input.feat | vw -f model --passes 20 --cache_file cache
cat input.feat | vw -i model -t -p predictions --invert_hash readable_model
(是的,我现在正在测试训练数据,因为我只有很少的数据示例可以训练。)


更多上下文:

一些特征是“第2层”——它们是通过操纵或对“第1层”特征(例如移动平均线、1-3阶导数等)进行叉积而得到的。如果我在计算tier 2特性之前规范化tier 1特性,它实际上会显著改进模型

所以我很困惑,为什么规范化第1层功能(在生成第2层功能之前)会有很大帮助,而规范化所有功能(在生成第2层功能之后)却毫无帮助


顺便说一句,因为我在训练回归器,所以我使用SSE作为衡量模型质量的指标。

可能的原因是,无论您使用何种训练算法来获得结果,都已经为您完成了标准化过程!。事实上,许多算法在使用之前都会进行规范化处理。希望它能帮助您:)

vw
在默认情况下,按比例规范化特征值

这是在线算法的一部分。这是在运行时逐步完成的

事实上,它的作用远不止于此,
vw
增强型SGD算法也保持了单独的学习速率(每个功能),因此较少见的功能学习速率不会像普通的(
--adaptive
)那样快速衰减。最后还有一个重要的更新,由第三个选项(
--invariant
)控制

3个单独的SGD增强选项(默认情况下全部打开)为:

  • --自适应
  • --不变量
  • ——标准化的
最后一个选项是调整比例值的选项(大值与小值的折扣)。您可以使用选项
--SGD
禁用所有这些SGD增强功能。还可以通过显式指定部分启用任何子集


总而言之,您可以使用
2^3=8
SGD选项组合。

正如问题的标签所示,我使用的是大众汽车。不确定大众是否在培训前将功能正常化。但即使是这样,它也没有解释为什么规范化tier 1功能将有助于培训(假设我的tier 2功能都是应用于tier 1功能的线性函数)。只是想说明一下:
vw
是一个在线学习者。在学习之前,它从不查看整个数据。它一个接一个地从示例中学习,并一次稍微调整模型。因此,它在开始学习之前不知道功能的值,因此无法在学习/培训之前进行规范化。请确认
vw
将功能规范化为默认值,并提供有关其他选项的额外信息。您可能需要分离第二个问题“为什么在生成tier-2之前对tier-1功能进行规范化会有很大帮助…”这是一个问题。原因似乎与vowpal wabbit无关。我不确定答案,但这可能是因为这种规范化实际上是“作弊”(提前知道stdev/意味着窥视未来)这是一个很好的洞察力,@arielf。