程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 FeatureUnion 从不同列向计数向量化器添加功能大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 FeatureUnion 从不同列向计数向量化器添加功能?

开发过程中遇到使用 FeatureUnion 从不同列向计数向量化器添加功能的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 FeatureUnion 从不同列向计数向量化器添加功能的解决方法建议,希望对你解决使用 FeatureUnion 从不同列向计数向量化器添加功能有所启发或帮助;

我目前正在尝试向使用 scikit-learn 创建的 countvectorizer 矩阵添加附加功能。

工作流程如下: 我有一个数据框,其中包含一个包含文本的列和一个包含附加功能的列。

我首先将数据拆分为训练和测试数据帧。 然后我在训练数据的文本列上应用计数向量化器。 然后我用 countvectorizer 矩阵作为输入拟合一个 RandomForest 分类器。

我现在想要归档的是,我想使用矩阵和数据帧另一列中的附加特征来运行 RandomForest 分类器。

我该如何做到最好?我已经阅读了有关 scikit 功能联合的信息,但无法在我的数据框中使用不同的列进行处理。

这是一个代码示例:

# Split the data
x_train,x_test,y_train,y_test = train_test_split(df.drop(['gender'],axis=1),df['gender'],test_size=0.2)
df_x_train = pandas.DataFrame(x_train)
df_x_test = pandas.DataFrame(x_test)
df_y_train = pandas.DataFrame(y_train)
df_y_test  = pandas.DataFrame(y_test)

vectorizer = CountVectorizer()
X__train = vectorizer.fit_transform(df_x_train['text']).toarray()
X__test = vectorizer.transform(df_x_test['text']).toarray()

# Now here I would like to add df['feature_new'] to my X_train and X_test

model = RandomForest()
model.fit(X_train,df_y_train['gender'])
...

解决方法

您正在寻找ColumnTransformer,而不是FeatureUnion。后者将多个转换器应用于每一列,而前者允许您将转换器应用于特定列。

preproc = ColumnTransformer(
    [('text_vect',CountVectorizer(),'text')],remainder='passthrough',)
x_train_preproc = preproc.fit_transform(x_train)
x_test_preproc = preproc.transform(x_test)

model.fit(x_train_preproc,y_train)

您可以为其他列添加另一个转换器,而不仅仅是使用 remainder 传递它们。我会考虑使用 Pipeline 将模型添加到与预处理相同的对象中;它为您节省了一些“预处理”数据集的争论。请注意,ColumnTransformer 中的列规范在维数方面有点挑剔;文本预处理器通常需要一维输入。

ColumnTransformer,至少正如我所给出的,需要数据框作为输入(因此 text 指的是列名)。如果输入是,train_test_split 的输出将是帧,并且 sklearn 方法都将帧作为输入就好了,所以只需删除帧转换和数组转换 .toarray()

大佬总结

以上是大佬教程为你收集整理的使用 FeatureUnion 从不同列向计数向量化器添加功能全部内容,希望文章能够帮你解决使用 FeatureUnion 从不同列向计数向量化器添加功能所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: