想知道pd.factorize,pd.get_dummies,sklearn.preprocessing.LableEncoder和OneHotEncoder之间的区别。

发布于 2021-01-29 15:06:33

已关闭 。这个问题需要细节或说明。它当前不接受答案。


想改善这个问题吗? 添加详细信息并通过编辑此帖子来澄清问题。

4年前关闭。

改善这个问题

这四个功能似乎与我真的很相似。在某些情况下,其中一些可能会给出相同的结果,而有些则不会。任何帮助将不胜感激!

现在,我知道了,并且我在内部假设了这一点,factorize并且LabelEncoder以相同的方式工作,并且在结果方面没有太大差异。我不确定它们是否会占用大量数据的相似时间。

get_dummies并且OneHotEncoder会产生相同的结果,但OneHotEncoder只能处理数字,但get_dummies会接受各种输入。get_dummies将为每个列输入自动生成新的列名称,但OneHotEncoder不会(而是分配新的列名称1,2,3
....)。因此get_dummies在各个方面都更好。

如果我错了,请纠正我!谢谢!

关注者
0
被浏览
187
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这四种编码器可以分为两类:

    • 标签 编码 为分类变量 :Pandasfactorize和scikit-learn LabelEncoder。结果将具有1维。
    • 分类变量 编码 为伪/指标(二进制)变量 :Pandasget_dummies和scikit-learn OneHotEncoder。结果将具有n个维,一个维是编码的分类变量的不同值。

    熊猫和scikit-learn编码器之间的主要区别在于,使用和方法将scikit-learn编码器用于 scikit-learn管道
    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属于第二类。它们可用于创建二进制变量。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
    

    我也 根据此答案写了更详细的文章



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看