首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用经过训练的情感分析模型、TF-IDF和logistic回归

使用经过训练的情感分析模型、TF-IDF和logistic回归
EN

Stack Overflow用户
提问于 2020-07-07 09:28:33
回答 1查看 717关注 0票数 0

我正在做一个Twitter数据集上的情感分析项目。我使用TF-IDF特征提取和logistic回归模型进行分类。到目前为止,我已经用以下内容训练了模型:

代码语言:javascript
复制
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的头部如下所示:

其形状为(18393,7)。我想使用已有的经过训练的模型,将其应用于text列,并使用df_chi数据帧中的预测分数创建一个新的sentiment列。(注意:图像不会显示干净的文本,但我会这样做。)

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

代码语言:javascript
复制
tf_vector = get_tfidf_features(df_chi['text'])
X = tf_vector.transform(df_chi['text'])
df_chi['sentiment'] = LR_model.predict(X)

它提供了以下ValueError:

代码语言:javascript
复制
---------------------------------------------------------------------------
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

我非常确定我在新数据上应用训练模型的整个方法是不正确的。这样做的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-07-07 10:50:18

对此进行了讨论,并提出了以下解决方案:

代码语言:javascript
复制
tfidf = TfidfVectorizer()
X_chi = tfidf.fit_transform(df_chi['text'])

X1 = pd.DataFrame.sparse.from_spmatrix(X)
X_chi1 = pd.DataFrame.sparse.from_spmatrix(X_chi)

not_existing_cols = [c for c in X1.columns.tolist() if c not in X_chi1]
X_chi1 = X_chi1.reindex(X_chi1.columns.tolist() + not_existing_cols, axis=1)
#X_chi.fillna(0, inplace=True)
X_chi1 = X_chi1[X1.columns.tolist()]
a = LR_model.predict(X_chi1)
df_chi['sentiment'] = a

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

不过,看起来有点笨拙。如果它起作用了,我想它就起作用了。尽管我怀疑可能有更好的方法,不是吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62766772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档