【问题标题】:How to one-hot encode column with two values?如何对具有两个值的列进行一次热编码?
【发布时间】:2017-06-08 12:28:57
【问题描述】:

如果我用 3 个可能的值对一列进行一次性编码,如下所示:

from sklearn import preprocessing
lb = preprocessing.LabelBinarizer()
lb.fit([0, 1, 2])
lb.classes_
lb.transform([1, 0])

然后我得到:

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

这正是我想要的。 3 列 = 每个可能值 1 列。

但是,如果我有 2 个这样的可能值:

lb.fit([0, 1])
lb.classes_
lb.transform([1, 0])

我明白了:

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

这只有 1 列,即使我有 2 个可能的值。在这种情况下,我想结束的是:

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

在这种情况下如何获得 2 列结果?

【问题讨论】:

    标签: python scikit-learn one-hot-encoding


    【解决方案1】:

    您可以使用OneHotEncoder。例如:

    In [37]: oh = preprocessing.OneHotEncoder(sparse=False)
    
    In [38]: oh.fit([[0], [1]])
    Out[38]:
    OneHotEncoder(categorical_features='all', dtype=<type 'float'>,
           handle_unknown='error', n_values=2, sparse=False)
    
    In [39]: oh.transform([[1], [0]])
    Out[39]:
    array([[ 0.,  1.],
           [ 1.,  0.]])
    

    【讨论】:

    • 好的,这看起来像是一个解决方案。但是,如何将 Pandas 数据框的单列输入 fit 函数?使用 LabelBinarizer 确实很简单,但 OneHotEncoder 似乎没有直接取 Pandas 列。
    • 在 Pandas 中,您可以使用 get_dummies。例如; df = pd.DataFrame(data={'a': [0,1,0]})pd.get_dummies(df['a'])
    【解决方案2】:

    看起来 pandas.get_dummies 在我的情况下是最简单的解决方案:

    pd.get_dummies([1, 0])
    

    【讨论】:

      猜你喜欢
      • 2017-05-02
      • 1970-01-01
      • 2020-10-06
      • 2021-11-16
      • 2021-02-10
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      相关资源
      最近更新 更多