ColumnTransformer与管道中的CountVector一起失败

2024-05-08 21:39:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在与ColumnTransformer结合的管道中使用sklearnCountVectorizer来转换文本。但是,管道返回的数组不正确。为什么带有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]])。你知道吗?你知道吗


Tags: text文本data管道pipeline错误数组this
1条回答
网友
1楼 · 发布于 2024-05-08 21:39:50

您可以使用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')])

相关问题 更多 >

    热门问题