我对sklearn如何处理由数字表示的分类变量感到好奇,例如New York = 1 Boston = 2 Chicago = 3。请问python是分类还是仅仅将其视为有序数字?我看到一篇帖子here讨论了这个问题。我不知道它是否正确。
此外,我不知道是否应将它们全部更改为稀疏矩阵格式,例如
[1,0,0]
[0,1,0]
[0,0,1]
这两种格式在应用于sklearn库时会有什么区别?
如果sklearn无法很好地处理分类变量,R会为此打败它吗?
谢谢!
更新
我看到了@larsmans推荐的重复问题,但它实际上没有回答我的问题in this post,它说sklearn不能很好地处理分类变量,它是如何比较的使用R中的包。我之前也看过一些帖子,大型数据集可以使用,但会影响小数据集。从@larsmans看来,除了树算法之外,其他方法似乎应该将数字分类变量转移到虚拟变量。实际上每个变量我有超过3000个类别。我不认为使用DictVectorizer或oneHotEncoder将它们全部更改为稀疏矩阵是有效的。
答案 0 :(得分: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.]]