-1

我有点好奇 sklearn 如何处理由数字表示的分类变量,例如纽约 = 1 波士顿 = 2 芝加哥 = 3。python会知道这是分类的还是只是将其视为有序数字?我在这里看到一个帖子讨论这个问题。我不知道它是否正确。

另外我不知道是否应该将它们全部更改为稀疏矩阵格式,例如

[1,0,0]
[0,1,0]
[0,0,1]

当应用于 sklearn 库时,这两种格式有什么区别?

如果 sklearn 不能很好地处理分类变量,R 会为此击败它吗?

谢谢!

更新:

我看到了@larsmans 推荐的重复问题,但它实际上并没有就这篇文章中的答案回答我的问题,它说 sklearn 不能很好地处理分类变量以及它与 R 中的包相比如何。之前也看过一些帖子,大数据集没问题,但会影响小数据集。从@larsmans看来,除了树算法外,其他方法应该将数字分类变量转移到假人。实际上,每个变量都有 3000 多个类别。我不认为使用 DictVectorizer 或 oneHotEncoder 将它们全部更改为稀疏矩阵是一种有效的方法。

4

1 回答 1

2

看起来这就是你需要的 DictVectorizer

用普通数字表示多类分类变量可能不是一个好主意。最佳实践应该是将 n 类分类变量转换为 n 个布尔变量。在您的示例中,应创建 3 个新的布尔变量来标记“==New York”、“==Boston”和“==Chicago”。

from sklearn.feature_extraction import DictVectorizer
v = DictVectorizer(sparse = True)


D = [{"Value" : 100, "City": "New York"},
     {"Value" : 70, "City": "Boston"},
     {"Value" : 99, "City": "Chicago"},
     ]

X = v.fit_transform(D)
print v.get_feature_names()
print X

输出:

['City=Boston', 'City=Chicago', 'City=New York', 'Value']
[[   0.    0.    1.  100.]
 [   1.    0.    0.   70.]
 [   0.    1.    0.   99.]]
于 2014-07-15T17:42:38.477 回答