Python 想知道pd.factorize、pd.get_假人、sklearn.preprocessing.LableEncoder和OneHotEncoder之间的区别吗
这四种功能似乎都与我非常相似。在某些情况下,其中一些可能会给出相同的结果,而另一些则不会。感谢您的帮助 现在我知道了,并且我假设在内部,Python 想知道pd.factorize、pd.get_假人、sklearn.preprocessing.LableEncoder和OneHotEncoder之间的区别吗,python,pandas,encoding,machine-learning,scikit-learn,Python,Pandas,Encoding,Machine Learning,Scikit Learn,这四种功能似乎都与我非常相似。在某些情况下,其中一些可能会给出相同的结果,而另一些则不会。感谢您的帮助 现在我知道了,并且我假设在内部,factorize和LabelEncoder以相同的方式工作,并且在结果方面没有很大的差异。我不确定它们是否会占用大量数据的类似时间 get\u dummies和onehotcoder将产生相同的结果,但是onehotcoder只能处理数字,但是get\u dummies将接受各种输入get_dummies将为每个列输入自动生成新列名,但onehotcoder不
factorize
和LabelEncoder
以相同的方式工作,并且在结果方面没有很大的差异。我不确定它们是否会占用大量数据的类似时间
get\u dummies
和onehotcoder
将产生相同的结果,但是onehotcoder
只能处理数字,但是get\u dummies
将接受各种输入get_dummies
将为每个列输入自动生成新列名,但onehotcoder
不会(它将指定新列名1,2,3…)。因此,get_dummies
在各个方面都更好
如果我错了,请纠正我!谢谢大家! 这四个编码器可分为两类:
- 将标签编码到分类变量中:熊猫
和scikit学习因子分解
。结果将有一个维度标签编码
- 将分类变量编码为虚拟/指示器(二进制)变量:Pandas
和scikit learnget_dummies
。结果将有n个维度,一个维度由编码的分类变量的不同值决定onehotcoder
fit
和transform
方法
将标签编码为分类变量
熊猫factorize
和scikit learnLabelEncoder
属于第一类。它们可用于创建分类变量,例如将字符转换为数字
from sklearn import preprocessing
# Test data
df = DataFrame(['A', 'B', 'B', 'C'], columns=['Col'])
df['Fact'] = pd.factorize(df['Col'])[0]
le = preprocessing.LabelEncoder()
df['Lab'] = le.fit_transform(df['Col'])
print(df)
# Col Fact Lab
# 0 A 0 0
# 1 B 1 1
# 2 B 1 1
# 3 C 2 2
将分类变量编码为伪/指示符(二进制)变量
熊猫get_dummies
和scikit learnOneHotEncoder
属于第二类。它们可以用来创建二进制变量onehotcoder
只能用于分类整数,而get\u dummies
可以用于其他类型的变量
df = DataFrame(['A', 'B', 'B', 'C'], columns=['Col'])
df = pd.get_dummies(df)
print(df)
# Col_A Col_B Col_C
# 0 1.0 0.0 0.0
# 1 0.0 1.0 0.0
# 2 0.0 1.0 0.0
# 3 0.0 0.0 1.0
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
df = DataFrame(['A', 'B', 'B', 'C'], columns=['Col'])
# We need to transform first character into integer in order to use the OneHotEncoder
le = preprocessing.LabelEncoder()
df['Col'] = le.fit_transform(df['Col'])
enc = OneHotEncoder()
df = DataFrame(enc.fit_transform(df).toarray())
print(df)
# 0 1 2
# 0 1.0 0.0 0.0
# 1 0.0 1.0 0.0
# 2 0.0 1.0 0.0
# 3 0.0 0.0 1.0
我还根据这个答案写了一篇更详细的文章。非常感谢!这是非常清楚的,所以在内部,factorize和LabelEncoder的工作方式是相同的;get_dummies和OneHotEncoder将产生相同的结果,但OneHotEncoder只能处理数字,但get_dummies将正确处理各种输入?在内部,它们的工作方式不同,因为scikit learn编码器分两步工作
拟合和变换,但它们产生相同的结果。是的,get_dummies
将接受各种输入。回答很好-您认为您可以在性能方面给我们展示一个快速比较吗?我觉得Sklearn的LabelEncoder比Pandas Factoryzer慢很多,但这只是一种感觉。。。