我有以下所有分类变量的数据:
class education income social_standing
1 basic low good
0 low high V_good
1 high low not_good
0 v_high high good
这里的教育有四个级别(基本,低,高和v_high)。收入有两个层次的低点和高点;而social_standing有三个级别(好,v_good和not_good)。
就我对将上述数据转换为大众格式的理解而言,它将是这样的:
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
这里,'person'是名称空间,所有其他都是功能值,以相应的功能名称为前缀。我对么?不知何故,这种特征值的表示对我来说非常困惑。有没有其他方式来表示功能?应该感谢你的帮助。
答案 0 :(得分:22)
是的,你是对的。
这种表示肯定适用于vowpal wabbit,但在某些情况下, 可能 不是最佳的(取决于)。
为了表示 无序 ,分类变量(具有离散值),标准的vowpal wabbit技巧是为每个可能的使用逻辑/布尔值(名称,值)组合(例如person_is_good, color_blue, color_red
)。这样做的原因是vw
隐含地假定值1
,而不是值。除了内存中的哈希位置之外,color_red, color=red
,color_is_red
甚至(color,red)
和color_red:1
之间没有实际区别。您不能在变量名中使用的唯一字符是特殊分隔符(:
和|
)和空格。
术语说明:将每个(特征+值)对转换为单独的特征的这种技巧有时被称为"一个热编码"。
但在这种情况下,变量值可能不是严格分类的"。他们可能是:
low < basic < high < v_high
)所以通过制作他们&#34;严格分类&#34; (我的术语是一个离散范围不具有上述两个属性的变量),你可能会丢失一些可能有助于学习的信息。
在您的特定情况下,您可以通过将值转换为数字来获得更好的结果,例如(1, 2, 3, 4
) education 。即你可以使用类似的东西:
1 |person education:2 income:1 social_standing:2
0 |person education:1 income:2 social_standing:3
1 |person education:3 income:1 social_standing:1
0 |person education:4 income:2 social_standing:2
问题中的训练集应该可以正常工作,因为即使将所有离散变量转换为布尔变量,vw
也应该自我发现数据中的标签的排序和单调性本身,只要上面的两个属性都是真的,并且有足够的数据来推导它们。
这是在vowpal wabbit编码变量的简短备忘单:
Variable type How to encode readable example
------------- ------------- ----------------
boolean only encode the true case is_alive
categorical append value to name color=green
ordinal+monotonic :approx_value education:2
numeric :actual_value height:1.85
最后的说明:
vw
中,所有变量都是数字。编码技巧只是将 显示 作为categorical
或boolean
的实用方法。布尔变量只是数字0或1;分类变量可以编码为boolean:name + value:1。--initial_weight <value>
选项时),因此可以从训练集中删除:
被视为特殊分隔符(在变量名及其数值之间),其他任何内容都被视为名称的一部分,整个名称字符串被散列到内存中的某个位置。缺少:<value>
部分意味着:1
编辑:名称空间怎么样?
名称空间前置于具有特殊字符分隔符的要素名称,因此它们将相同的要素映射到不同的散列位置。例如:
|E low |I low
基本上等同于(没有名称空格平面示例):
| E^low:1 I^low:1
名称空间的主要用途是轻松地将名称空间的所有成员重新定义为其他内容,忽略要素的全名空间,将名称空间的特征与其他要素交叉等等(请参阅-q
,--cubic
,--redefine
,--ignore
,--keep
选项)。