我尝试在与ColumnTransformer
结合的管道中使用sklearn
的CountVectorizer
来转换文本。但是,管道返回的数组不正确。为什么带有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]])
。你知道吗?你知道吗
您可以使用make\u column\u transformer并执行以下操作。其余的是您可以应用其他转换的其余特征。默认情况下,remains设置为“drop”,这意味着没有任何转换的剩余功能将被删除:
preprocess = make_column_transformer((CountVectorizer(), 'text_feat'), remainder='passthrough') make_pipeline(preprocess).fit_transform(X)
更多信息请点击此处: https://scikit-learn.org/stable/modules/generated/sklearn.compose.make_column_transformer.html
以下博客提供了更多细节: https://jorisvandenbossche.github.io/blog/2018/05/28/scikit-learn-columntransformer/
关于代码的一些提示: 转换特征时,不需要(读:不应该)传递y(即目标)。 代码中的问题是因为传递的是文本特性列表,而不是列的名称。如果您稍微更改代码,应该会得到相同的结果。你知道吗
preprocessor = ColumnTransformer( transformers=[('text', text_transformer, 'text_feat')])
相关问题 更多 >
编程相关推荐