Python 在sklearn管道中转换文本数据
给定一个文本数据数组Python 在sklearn管道中转换文本数据,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,给定一个文本数据数组 X = np.array(['cat', 'dog', 'cow', 'cat', 'cow', 'dog']) 我想使用sklearn管道来生成如下输出 np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0], [0, 0, 1], [0, 1, 0]]) 我最初的尝试 pipe = Pipeline([ ('encoder', LabelEncoder()), ('hot', OneHotEncode
X = np.array(['cat', 'dog', 'cow', 'cat', 'cow', 'dog'])
我想使用sklearn管道来生成如下输出
np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1], [1, 0, 0], [0, 0, 1], [0, 1, 0]])
我最初的尝试
pipe = Pipeline([
('encoder', LabelEncoder()),
('hot', OneHotEncoder(sparse=False))])
print(pipe.fit_transform(X))
引发TypeError:fit_transform()正好接受2个参数(给定3个)
,根据。我尝试在LabelEncoder上编辑签名,以便SaneLabelEncoder().fit_transform(X)
给出[0 2 1 0 1 2]
,但是
pipe = Pipeline([
('encoder', SaneLabelEncoder()),
('hot', OneHotEncoder(sparse=False))])
print(pipe.fit_transform(X))
给出
[[1.1.1.1.1.1.]
。关于获得所需输出的任何建议?使用LabelBinarizer
:
import numpy as np
from sklearn import preprocessing
X = np.array(['cat', 'dog', 'cow', 'cat', 'cow', 'dog'])
binar = preprocessing.LabelBinarizer()
X_bin = binar.fit_transform(X)
print X_bin
输出为:
[[1 0 0]
[0 0 1]
[0 1 0]
[1 0 0]
[0 1 0]
[0 0 1]]
使用
LabelBinarizer
:
import numpy as np
from sklearn import preprocessing
X = np.array(['cat', 'dog', 'cow', 'cat', 'cow', 'dog'])
binar = preprocessing.LabelBinarizer()
X_bin = binar.fit_transform(X)
print X_bin
输出为:
[[1 0 0]
[0 0 1]
[0 1 0]
[1 0 0]
[0 1 0]
[0 0 1]]
熊猫有一种方法:
pd.get_dummies(X)
将生成数据帧:
cat cow dog
0 1 0 0
1 0 0 1
2 0 1 0
3 1 0 0
4 0 1 0
5 0 0 1
或者,如果必须具有整数数组:
pd.get_dummies(X).values.astype(int)
将产生:
[[1 0 0]
[0 0 1]
[0 1 0]
[1 0 0]
[0 1 0]
[0 0 1]]
熊猫有一种方法:
pd.get_dummies(X)
将生成数据帧:
cat cow dog
0 1 0 0
1 0 0 1
2 0 1 0
3 1 0 0
4 0 1 0
5 0 0 1
或者,如果必须具有整数数组:
pd.get_dummies(X).values.astype(int)
将产生:
[[1 0 0]
[0 0 1]
[0 1 0]
[1 0 0]
[0 1 0]
[0 0 1]]
这太完美了--您可以补充一点,它作为一个步骤在管道中工作。具体地说,如果pipe=Pipeline(('encoder',LabelBinarizer(),])
,那么print(pipe.fit\u transform(X))
可以按照您的描述工作。这很完美——您可以添加它在管道中工作,作为一个单独的步骤。具体来说,如果pipe=Pipeline(('encoder',LabelBinarizer(),])
,则print(pipe.fit\u transform(X))
的工作原理与您描述的相同。