我有一个名义和数字特征的数据集。如果可能的话,我希望能够完全用数字表示这个数据集。
理想情况下,我可以为n-ary标称功能执行此操作。我意识到在二进制的情况下,可以用整数表示两个名义值。但是,当名义特征可以有许多排列时,如果有的话,这怎么可能呢?
答案 0 :(得分:2)
有许多技术可以将分类属性“嵌入”为数字。
例如,给定一个可以取值red
,green
和blue
的分类变量,我们可以将其简单地编码为 three 属性{{ 1}},isRed={0,1}
和isGreen={0,1}
。
虽然这很受欢迎,并且显然会“起作用”,但很多人都认为随后的数字处理技术会产生合理的结果,这是谬论。
如果您运行,例如k-means在以这种方式编码的数据集上,之后结果可能不会太有意义。特别是,如果你得到isBlue={0,1}
之类的平均值 - 你无法合理地将其映射回原始数据。更糟糕的是,使用某些算法,您甚至可能会获得isRed=.3 isGreen=.2 isBlue=.5
。
我建议您尝试处理实际数据,并尽可能避免编码。如果您有一个好的工具,它将允许您使用混合数据类型。 不要尝试将所有内容都设为数字向量。这种数据的数学视图非常有限,并且数据不会为您提供从此视图中受益所需的所有数学假设(例如度量空间)。
答案 1 :(得分:1)
不要这样做:我正在尝试将某些名义属性编码为整数。
除非名义特征只有两个排列。可以为每个使用任何不同的整数(例如1和3)。
但是如果有两个以上的排列,则不能使用整数。假设我们分配了1,2和3到3个排列。我们可以看到,由于差异,1-2和2-3之间的关系比1-3更高。
相反,对每个名义属性的每个值使用单独的二进制特征。因此,你的问题的答案:这是不可能的/明智的。
答案 2 :(得分:0)
如果使用pandas,则可以在名义值列上使用名为.get_dummies()
的函数。这会将N
个唯一值的列转换为N
(或者,如果您需要N-1
,则称为drop_first
)新列,指示1
或如果存在值,则0
。
示例:
s = pd.Series(list('abca'))
get_dummies(s)
a b c
0 1 0 0
1 0 1 0
2 0 0 1
3 1 0 0