我有两个关于格式化数据的问题,用于上下文强盗模型训练。
如果我有以下数据......
1:1:0.2 | us female 12
问题1)我从VW Wiki上读到,每个功能都可以选择后跟浮动。如果我将分类特征(例如我们,女性)作为值,那么重新格式化它们的最佳方法是什么?我想我不会用浮点数后缀它们让它们的默认值为1.我希望这会实现单热编码。
问题2)我错误地通过记录数据来训练模型,如下所示
private static int findString(String line, char ch, int start) {
int idx = line.indexOf(ch, start);
while (idx != -1 && ((idx > 0 && line.charAt(idx - 1) == ch) ||
(idx < line.length() - 1 && line.charAt(idx + 1) == ch)))
idx = line.indexOf(ch, idx + 1);
return idx;
}
我现在意识到“我们”,“女性”和“12”被视为默认值为1的功能。我是否正确?
答案 0 :(得分:3)
是的,你是对的。
输入要素格式为:空格分隔,每个要素为<name>:<value>
,其中:<value>
(如果存在)必须为数字。
要表示分类值,您可以使用:
以外的其他内容作为<name>
和<value>
之间的分隔符。在这种情况下,整个字符串将被视为功能名称。这通常被称为&#34; one-hot encoding&#34; (每个可能的特征+值组合被视为一个单独的特征)。
另请注意,功能名称12
将由vw
直接散列到哈希表中的第12个插槽(模2 ^位),假设这是用户想要的,因为数字功能是common(和libSVM约定)。可以通过命令行上的选项--hash all
禁用此功能。默认值为--hash strings
,意思是:(murmur3)哈希特征名称,看起来像一个字符串(不是整数),但不要单独使用(不要哈希)特征名称看起来像数字。
另请参阅:https://itunes.apple.com/us/podcast/1-single-straight-guy-focus/id775053292?i=1000375469754&mt=2,其中包含用于表示vw
中输入要素的备忘单。