sklearn LabelEncoder和pd.get_dummies有什么区别?

时间:2016-07-16 17:08:07

标签: python pandas scikit-learn

我想知道sklearn LabelEncoder与pandas get_dummies之间的区别。为什么选择LabelEncoder而不是get_dummies。使用一个在另一个上的优势是什么?缺点是什么?

据我所知,如果我有A级

ClassA = ["Apple", "Ball", "Cat"]
encoder = [1, 2, 3]

dummy = [001, 010, 100]

我是否理解错误?

2 个答案:

答案 0 :(得分:7)

这些只是便利功能,分别属于这两个库倾向于做事的方式。第一个"浓缩"通过将事物改变为整数来实现信息,第二个事物扩展到#34;尺寸允许(可能)更方便的访问。

sklearn.preprocessing.LabelEncoder只是转换来自任何域的数据,以便其域 0,...,k - 1 ,其中 k 是数字课程。

所以,例如

["paris", "paris", "tokyo", "amsterdam"]

可能会成为

[0, 0, 1, 2]

pandas.get_dummies也会使用来自某个域的元素的系列,但会将其展开为DataFrame,其列对应于系列中的条目,值取决于它们原来的值为0或1。所以,例如,相同的

["paris", "paris", "tokyo", "amsterdam"]

将成为带标签

的DataFrame
["paris", "tokyo", "amsterdam"]

并且其"paris"条目将是系列

[1, 1, 0, 0]

第一种方法的主要优点是节省空间。相反,将事物编码为整数可能会给您(对您或某些机器学习算法)的印象,即订单意味着什么。是"阿姆斯特丹"更接近" tokyo"而不是"巴黎"只是因为整数编码?可能不是。第二种表示方式更加清晰。

答案 1 :(得分:3)

pandas.get_dummies是单热编码,但sklearn.preprocessing.LabelEncoder是增量编码,例如0,1,2,3,4,......

单热编码更适合机器学习。因为标签彼此独立,例如2并不意味着该值的两倍。

如果训练集和测试集具有相同功能的不同类别数,请参阅Keep same dummy variable in training and testing data获取两个解决方案。