使用训练有素的情绪分析模型,TF-IDF和逻辑回归

时间:2020-07-07 01:28:32

标签: python machine-learning scikit-learn sentiment-analysis tf-idf

我正在对Twitter数据集进行情感分析项目。我使用TF-IDF特征提取和逻辑回归模型进行分类。到目前为止,我已经使用以下方法训练了模型:

def get_tfidf_features(train_fit, ngrams=(1,1)):
    vector = TfidfVectorizer(ngrams, sublinear_tf=True)
    vector.fit(train_fit)
    return vector

X = tf_vector.transform(df['text'])

y = df['sentiment']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.01, random_state = 42)

LR_model = LogisticRegression(solver='lbfgs')
LR_model.fit(X_train, y_train)
y_predict_lr = LR_model.predict(X_test)

此逻辑回归模型在约150万条推文的数据集上进行了训练。我有大约18,000条推文,我想用这个模型来预测这个新数据集中推文的情感分数。我对如何将经过训练的模型实际应用于新数据一无所知。新数据框df_chi的标题如下:

enter image description here

具有形状(18393,7)。我想采用已经拥有的训练好的模型,将其应用于text列,并使用sentiment数据框中的那些预测分数创建一个新的df_chi列。 (注意:该图像不会显示纯文本,但我会这样做。)

我是ML新手,我从未采用经过训练的模型并将其应用于新数据。我的困惑始于使用TF-IDF从df_chi文本中提取特征。我试图这样做(总猜测):

tf_vector = get_tfidf_features(df_chi['text'])
X = tf_vector.transform(df_chi['text'])
df_chi['sentiment'] = LR_model.predict(X)

给出以下ValueError:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-188-0cf1a4f34c8b> in <module>
      1 tf_vector = get_tfidf_features(df_chi['text'])
      2 X = tf_vector.transform(df_chi['text'])
----> 3 df_chi['sentiment'] = LR_model.predict(X)

~/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/_base.py in predict(self, X)
    291             Predicted class label per sample.
    292         """
--> 293         scores = self.decision_function(X)
    294         if len(scores.shape) == 1:
    295             indices = (scores > 0).astype(np.int)

~/opt/anaconda3/lib/python3.7/site-packages/sklearn/linear_model/_base.py in decision_function(self, X)
    271         if X.shape[1] != n_features:
    272             raise ValueError("X has %d features per sample; expecting %d"
--> 273                              % (X.shape[1], n_features))
    274 
    275         scores = safe_sparse_dot(X, self.coef_.T,

ValueError: X has 22806 features per sample; expecting 265054

可以肯定,我将训练后的模型应用于新数据的整个方法是不正确的。什么是正确的方法?

1 个答案:

答案 0 :(得分:0)

仔细研究并提出以下解决方案:

export PATH="$PATH:$HOME/Documents/development/flutter/bin"

Logistic regression: X has 667 features per sample; expecting 74869启发的解决方案

但是看起来有点笨拙。如果有效,我想。尽管我怀疑可能会有更好的方法来做到这一点,但是吗?