在 sklearn 管道中转换文本数据
Transforming text data in sklearn pipeline
给定一个文本数据数组,
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))
根据 this issue, 加注 TypeError: fit_transform() takes exactly 2 arguments (3 given)
。我试过在 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]]
pandas 有一个方法 get_dummies
为此:
pd.get_dummies(X)
将生成 DataFrame:
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]]
给定一个文本数据数组,
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))
根据 this issue, 加注 TypeError: fit_transform() takes exactly 2 arguments (3 given)
。我试过在 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]]
pandas 有一个方法 get_dummies
为此:
pd.get_dummies(X)
将生成 DataFrame:
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]]