如何对具有两个值的列进行一次性编码?
How to one-hot encode column with two values?
如果我一次性编码具有 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 列结果?
您可以使用 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.get_dummies 是对我而言最简单的解决方案:
pd.get_dummies([1, 0])
如果我一次性编码具有 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 列结果?
您可以使用 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.get_dummies 是对我而言最简单的解决方案:
pd.get_dummies([1, 0])