Sklearn中的数值范畴变量

2024-09-24 00:21:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有点好奇sklearn是如何处理由数字表示的范畴变量的,比如New York=1 Boston=2 Chicago=3。python会知道它是分类的还是只是把它当作有序的数字?我看到一篇关于这个问题的帖子。我不知道它是否正确。在

我也不知道是否应该将它们全部转换为稀疏矩阵格式,例如

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

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

如果sklearn不能很好地处理范畴变量,R会因此而击败它吗?在

谢谢!在

更新:

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


Tags: 数据方法new格式分类矩阵数字sklearn
1条回答
网友
1楼 · 发布于 2024-09-24 00:21:36

看起来这就是你需要的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

输出:

^{pr2}$

相关问题 更多 >