gpt4 book ai didi

python - 如何在 scikit-learn 管道中的 CountVectorizer 之前包含 SimpleImputer?

转载 作者:行者123 更新时间:2023-12-04 11:10:49 28 4
gpt4 key购买 nike

我有一只 Pandas DataFrame包括一列文本,我想矢量化文本 使用 scikit-learn 的 CountVectorizer .但是,文本包含缺失值,因此我想 在矢量化之前输入一个常数值。
我最初的想法是创建一个 PipelineSimpleImputerCountVectorizer :

import pandas as pd
import numpy as np
df = pd.DataFrame({'text':['abc def', 'abc ghi', np.nan]})

from sklearn.impute import SimpleImputer
imp = SimpleImputer(strategy='constant')

from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer()

from sklearn.pipeline import make_pipeline
pipe = make_pipeline(imp, vect)

pipe.fit_transform(df[['text']]).toarray()
然而, fit_transform错误是因为 SimpleImputer输出 二维数组 CountVectorizer需要 一维输入 .这是错误消息:
AttributeError: 'numpy.ndarray' object has no attribute 'lower'
问题:我该如何修改这个 Pipeline这样它会起作用吗?
注意:我知道我可以估算 Pandas 中的缺失值。但是,我想在 scikit-learn 中完成所有预处理,以便可以使用 Pipeline 将相同的预处理应用于新数据。 .

最佳答案

我找到的最佳解决方案是 插入自定义变压器 Pipeline重塑 SimpleImputer 的输出在传递给 CountVectorizer 之前从 2D 到 1D .
这是完整的代码:

import pandas as pd
import numpy as np
df = pd.DataFrame({'text':['abc def', 'abc ghi', np.nan]})

from sklearn.impute import SimpleImputer
imp = SimpleImputer(strategy='constant')

from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer()

# CREATE TRANSFORMER
from sklearn.preprocessing import FunctionTransformer
one_dim = FunctionTransformer(np.reshape, kw_args={'newshape':-1})

# INCLUDE TRANSFORMER IN PIPELINE
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(imp, one_dim, vect)

pipe.fit_transform(df[['text']]).toarray()
已经 proposed on GitHub那个 CountVectorizer只要第二维为 1(意思是:单列数据),就应该允许 2D 输入。对 CountVectorizer 的修改将是这个问题的一个很好的解决方案!

关于python - 如何在 scikit-learn 管道中的 CountVectorizer 之前包含 SimpleImputer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63000388/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com