【发布时间】:2019-11-08 18:43:35
【问题描述】:
我正在尝试使用sklearn 的CountVectorizer 在管道中结合ColumnTransformer 转换文本。但是,管道返回不正确的数组。为什么我的带有 ColumnTransformer 的管道给了我一个错误的 CountVectorize-d 文本的 1×1 数组?
我意识到我可以简单地使用带有 CountVectorizer 的单个管道,并省略 ColumnTransformer。但是,稍后我将需要添加数字列,这使得ColumnTransformer 成为必要。我最初尝试过,发现了错误,并将问题与上述问题隔离开来。
我尝试将X 输入为系列而不是数据框,但出现另一个错误:IndexError: tuple index out of range
data = pd.DataFrame(data={'text_feat':['This is my first sentence.','This is my second.'],
'numeric_feat':[1,2],
'target':[3,4]})
X = data.loc[:,['text_feat', 'numeric_feat']]
y = data.loc[:,'target']
# first pipeline
text_features = ['text_feat']
text_transformer = Pipeline(
steps = [('vec', CountVectorizer())])
# wrap in ColumnTransformer
preprocessor = ColumnTransformer(
transformers=[('text', text_transformer, text_features)])
# second pipeline
pipeline = Pipeline(steps=[('preprocessor', preprocessor)])
# single pipeline works as expected
X_expected = text_transformer.fit_transform(X['text_feat'])
# but this fails
X_test = pipeline.fit_transform(X)
print('Expected:')
print(X_expected.toarray())
print('Got:')
print(X_test)
我期望 2×6 数组 array([[1, 1, 1, 0, 1, 1], [0, 1, 1, 1, 0, 1]])(来自 CountVectorizer 的文档项矩阵)。相反,我得到了这个:array([[1]])。有什么想法吗?
【问题讨论】:
标签: python pandas scikit-learn