如何在 scikit-learn 的基本情感分析中使用多个功能?

数据挖掘 scikit-学习
2022-02-15 04:01:07

我试图将问题简化为绝对基础。假设我有这样的数据(csv):

label,text-column,gender-column,day-column
1,"Sample positive text", female, 1
0,"Sample negative text", female, 3
1,"Another positive comment", male, 2
0,"Angry text sample", male, 7

我有这段代码,label通过在text-column. 我做了一个 70/30train_test_split并且一切正常。

vec = TfidfVectorizer()
clf = MultinomialNB()
training_data = pd.read_csv('trainset.csv', delimiter=',')
text_tfidf = vec.fit_transform(training_data['text-column'])
# gen_tfidf = vec.fit_transform(training_data['gender-column'])
X_train, X_test, y_train, y_test = train_test_split(text_tfidf, training_data['label'], test_size = 0.3)
clf.fit(X_train, y_train)

然而,就我的一生而言,我根本无法弄清楚如何使用多个功能。例如,我想同时使用text-columngender-column训练模型,看看它如何影响准确性,但我不明白该怎么做!

我在这里错过了一些概念上重要的东西吗?谢谢你。

2个回答

您可以对性别列进行一次性编码并将其附加到您的 tfidf 表中。

gender = pd.get_dummies(training_data['gender-column'])
X = text_tfidf.join(gender)

Scikit-learn 有ColumnTransformer 用于异构数据

这是一个粗略的代码片段,可帮助您入门:

from sklearn.compose                 import ColumnTransformer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes             import MultinomialNB
from sklearn.pipeline                import Pipeline
from sklearn.preprocessing           import OneHotEncoder

pipeline = Pipeline([('union', ColumnTransformer([('tfidf',  TfidfVectorizer(), 'text-column'),
                                                  ('onehot', OneHotEncoder(),   ['gender-column'])])),   
                     ('clf', MultinomialNB())])
pipeline.fit(X_train, y_train)