Ric*_* Ji 18 python encoding machine-learning pandas scikit-learn
所有四个功能看起来都和我很相似.在某些情况下,其中一些可能会给出相同的结果,有些则不会.任何帮助将不胜感激!
现在我知道并且我在内部假设,factorize并LabelEncoder以相同的方式工作,并且在结果方面没有太大的差异.我不确定他们是否会在大量数据上占用相似的时间.
get_dummies并OneHotEncoder会产生相同的结果,但OneHotEncoder只能处理数字,但get_dummies会采取各种输入.get_dummies将为每个列输入自动生成新的列名,但OneHotEncoder不会(它将分配新的列名1,2,3 ....).因此get_dummies在各个方面都更好.
如果我错了请纠正我!谢谢!
Rom*_*ain 28
这四种编码器可分为两类:
factorize和scikit-learn LabelEncoder.结果将有1个维度.get_dummies和scikit-learn OneHotEncoder.结果将具有n个维度,一个是编码的分类变量的不同值.熊猫和scikit学习编码器之间的主要区别在于scikit学习编码器制造中使用scikit学习管道与fit和transform方法.
熊猫factorize和scikit-learn LabelEncoder属于第一类.它们可用于创建分类变量,例如将字符转换为数字.
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
Run Code Online (Sandbox Code Playgroud)
熊猫get_dummies和scikit-learn OneHotEncoder属于第二类.它们可用于创建二进制变量.OneHotEncoder只能与分类整数一起使用,同时get_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
Run Code Online (Sandbox Code Playgroud)
我还根据这个答案写了一篇更详细的帖子.
| 归档时间: |
|
| 查看次数: |
5471 次 |
| 最近记录: |