【问题标题】:Is there an easy way to label encode then one hot encode with column transformer?有没有一种简单的方法来标记编码,然后使用列转换器进行热编码?
【发布时间】:2019-09-04 17:18:18
【问题描述】:

我正在使用来自 sklearn 的列转换器 https://scikit-learn.org/stable/modules/generated/sklearn.compose.ColumnTransformer.html

我认为这是管理不同缩放器的好工具。让生活轻松很多。但是,我不确定是否有办法进行分类值,因为我需要首先使用标签编码器,然后对整数进行热编码。有什么可以为我做这两件事的吗?我宁愿在一个柱式变压器中完成所有缩放。它更容易管理。

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    sklearn.preprocessing.OneHotEncoder 可以处理分类值,而无需将它们预处理为 ints:

    from sklearn.preprocessing import OneHotEncoder
    
    df = pd.DataFrame({'col1': ['a', 'b', 'c']})
    ohe = OneHotEncoder(sparse=False)
    ohe.fit_transform(df['col1'].values.reshape(-1, 1))
    

    输出:

    array([[1., 0., 0.],
           [0., 1., 0.],
           [0., 0., 1.]])
    

    【讨论】:

      【解决方案2】:

      一种选择是使用来自pandaspd.get_dummies(...)

      In [10]: df = pd.DataFrame({'a': ['A', 'B', 'C']*3})
      
      In [11]: df
      Out[11]:
         a
      0  A
      1  B
      2  C
      3  A
      4  B
      5  C
      6  A
      7  B
      8  C
      
      In [12]: pd.concat([df, pd.get_dummies(df['a'], prefix='a')], axis=1)
      Out[12]:
         a  a_A  a_B  a_C
      0  A    1    0    0
      1  B    0    1    0
      2  C    0    0    1
      3  A    1    0    0
      4  B    0    1    0
      5  C    0    0    1
      6  A    1    0    0
      7  B    0    1    0
      8  C    0    0    1
      

      【讨论】:

        猜你喜欢
        • 2013-02-02
        • 1970-01-01
        • 2020-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        • 1970-01-01
        • 2018-11-04
        相关资源
        最近更新 更多