2

我有一个标称和数字特征的数据集。如果可能的话,我希望能够完全用数字表示这个数据集。

理想情况下,我将能够为 n 元名义特征执行此操作。我意识到在二进制情况下,可以用整数表示两个标称值。然而,当一个名义特征可以有许多排列时,如果有的话,这怎么可能呢?

4

3 回答 3

2

有许多技术可以将分类属性“嵌入”为数字。

例如,给定一个可以取值和的分类变量red,我们可以简单地将其编码为三个属性和。greenblueisRed={0,1}isGreen={0,1}isBlue={0,1}

虽然这很流行,并且显然会“起作用”,但许多人误以为事后数值处理技术会产生合理的结果。

如果您在以这种方式编码的数据集上运行例如 k-means,那么之后的结果可能不会太有意义。特别是,如果您得到一个平均值,例如isRed=.3 isGreen=.2 isBlue=.5- 您无法合理地将其映射回原始数据。更糟糕的是,使用一些算法你甚至可能得到isRed=0 isGreen=0 isBlue=0.

我建议您尝试处理您的实际数据,并尽可能避免编码。如果您有一个好的工具,它将允许您使用混合数据类型。不要试图把所有东西都变成一个数字向量。这种数据的数学视图非常有限,并且数据不会为您提供从该视图中受益所需的所有数学假设(例如度量空间)。

于 2013-11-29T10:14:04.473 回答
1

不要这样做:我正在尝试将某些名义属性编码为整数。

除非名义特征只有两个排列。可以为每个整数使用任何不同的整数(例如 1 和 3)。

但如果有两个以上的排列,则不能使用整数。假设我们将 1、2 和 3 分配给三个排列。正如我们所见,由于差异,1-2 和 2-3 之间的相关性高于 1-3。

相反,对每个标称属性的每个值使用单独的二元特征。因此,您的问题的答案是:这是不可能的/明智的。

于 2013-11-29T00:44:25.670 回答
0

.get_dummies()如果您使用 pandas,您可以使用在名义价值列上调用的函数。这会将N唯一值列转换为N(或者如果需要N-1,称为)新列,用 a或 adrop_first指示是否存在值。10

例子:

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
于 2017-05-12T21:05:41.743 回答