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

Sam*_*Sam 12 python pandas scikit-learn

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

据我所知,如果我有A级

ClassA = ["Apple", "Ball", "Cat"]
encoder = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

dummy = [001, 010, 100]
Run Code Online (Sandbox Code Playgroud)

我不正确地理解这个吗?

Ami*_*ory 10

这些只是便利功能,分别属于这两个库倾向于做事的方式.第一个通过将事物更改为整数来"压缩"信息,第二个"扩展"维度,允许(可能)更方便的访问.


sklearn.preprocessing.LabelEncoder简单地从任何域转换数据,使其域为0,...,k - 1,其中k是类的数量.

所以,例如

["paris", "paris", "tokyo", "amsterdam"]
Run Code Online (Sandbox Code Playgroud)

可能成为

[0, 0, 1, 2]
Run Code Online (Sandbox Code Playgroud)

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

["paris", "paris", "tokyo", "amsterdam"]
Run Code Online (Sandbox Code Playgroud)

将成为带标签的DataFrame

["paris", "tokyo", "amsterdam"]
Run Code Online (Sandbox Code Playgroud)

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

[1, 1, 0, 0]
Run Code Online (Sandbox Code Playgroud)

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

  • 根据经验,如果类没有自然顺序,则为虚拟变量,但主要考虑因素是您的算法实现所期望的内容。您可能想打开一个不同的问题来描述问题,以及您计划使用哪个特定分类(最好甚至指定库中的特定函数)。 (2认同)

Yuc*_*ang 5

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

one-hot encoding 更适合机器学习。因为标签彼此独立,例如 2 并不意味着值 1 的两倍。

如果训练集和测试集对于同一特征的类数不同,请参阅在训练和测试数据中保持相同的虚拟变量两种解决方案。