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))
的工作原理与您描述的相同。