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)
第一种方法的主要优点是节省空间.相反,将事物编码为整数可能会给您(对您或某些机器学习算法)的印象,即订单意味着什么.仅仅因为整数编码,"阿姆斯特丹"更接近"东京"而不是"巴黎"吗?可能不是.第二种表示方式更加清晰.
pandas.get_dummies是one-hot编码但是sklearn.preprocessing.LabelEncoder是增量编码,例如0,1,2,3,4,...
one-hot encoding 更适合机器学习。因为标签彼此独立,例如 2 并不意味着值 1 的两倍。
如果训练集和测试集对于同一特征的类数不同,请参阅在训练和测试数据中保持相同的虚拟变量两种解决方案。
| 归档时间: |
|
| 查看次数: |
8481 次 |
| 最近记录: |