我想知道sklearn LabelEncoder与pandas get_dummies之间的区别。为什么选择LabelEncoder而不是get_dummies。使用一个在另一个上的优势是什么?缺点是什么?
据我所知,如果我有A级
ClassA = ["Apple", "Ball", "Cat"]
encoder = [1, 2, 3]
和
dummy = [001, 010, 100]
我是否理解错误?
答案 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获取两个解决方案。