【问题标题】:Error in prediction of sentiment in Scikit LogisticRegressionScikit LogisticRegression 中的情绪预测错误
【发布时间】:2023-03-03 03:15:02
【问题描述】:
from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()

train_matrix = vectorizer.fit_transform(train_data['review'])

test_matrix = vectorizer.fit_transform(test_data['review'])

训练 LogisticRegressor

from sklearn.linear_model import LogisticRegression

sentiment_model = LogisticRegression()

sentiment_model = sentiment_model.fit(train_matrix,train_data['sentiment'])

检查样本数据

sample_test_data = test_data[10:13]

sample_test_matrix = vectorizer.fit_transform(sample_test_data['review'])

predict = sentiment_model.predict(sample_test_matrix)

错误:

X 每个样本有 85 个特征;期待 121676

ValueErrorTraceback(最后一次调用)

在 ()

----> 1 预测 = model.predict(sample_test_matrix)

~\Anaconda3\lib\site-packages\sklearn\linear_model\base.py in predict(self, X)

            Predicted class label per sample.

---------> 分数 = self.decision_function(X)

       if len(scores.shape) == 1:

         indices = (scores > 0).astype(np.int)

decision_function(self, X)

      if X.shape[1] != n_features:

          raise ValueError("X has %d features per sample; expecting %d"
        ------------>   % (X.shape[1], n_features))

    scores = safe_sparse_dot(X, self.coef_.T,

ValueError: X 每个样本有 85 个特征;期待 121676

【问题讨论】:

  • 请包含 full 堆栈跟踪,以便我们查看是哪一行引发了错误。
  • 亚马逊产品评论,Coursera 分类作业。我什至做了与帮助台相同的编码,但仍然出现此错误

标签: python machine-learning scikit-learn logistic-regression sentiment-analysis


【解决方案1】:

我相信您遇到的问题是由于在您的测试集上使用了fit_transform() 方法而不仅仅是transform() 方法。 CountVectorizer() fit method 学习“原始文档中所有标记的词汇词典”。

这意味着当您在训练集上调用 fit_transform() 时,它将生成一个稀疏矩阵,其特征数等于它在您提供的文本中找到的不同单词标记作为输入。当您再次在测试集上调用fit_transform() 时,它会生成一个不同的稀疏矩阵,其维度基于测试集中的唯一词,而不是使用在训练数据上生成的原始矩阵。

然后您将 LogisticRegression 对象拟合到您的训练数据中,但是当您尝试在测试数据上使用 predict() 时,它会抱怨输入大小与您在训练时传入的大小不同,因为它有一个不同数量的功能。

编辑:当您调用以下命令时也会发生这种情况:

test_matrix = vectorizer.fit_transform(test_data['review'])

如果您计划将数据拆分为训练集和测试集,则应避免为 CountVectorizer 创建不同的拟合,因为生成的稀疏矩阵维度会导致您遇到的问题。

TL;DR:

尝试替换这些

test_matrix = vectorizer.fit_transform(test_data['review'])
sample_test_matrix = vectorizer.fit_transform(sample_test_data['review'])

这些

test_matrix = vectorizer.transform(test_data['review'])
sample_test_matrix = vectorizer.transform(sample_test_data['review'])

【讨论】:

  • 抱歉,它现在不起作用了:ValueError: X has 49745 features per sample;期待 121676
  • 对不起,我之前也忘了提到你,还需要将test_matrix = vectorizer.fit_transform(test_data['review']) 也更改为仅使用transform()。我知道这是一个问题,但是当我写下我的回复时我忽略了它,因为您似乎实际上并没有在任何地方使用 test_matrix。尽管如此,通过拟合CountVectorizer 来创建test_matrix,您正在做同样的事情。修复那个,它现在应该可以工作了。
  • NotFittedError: CountVectorizer - 未安装词汇。对不起,但它仍然没有工作
  • 你删除了所有这些吗?不要删除初始训练拟合,只删除测试集的拟合。
猜你喜欢
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 2015-03-01
  • 2016-02-14
  • 2021-01-11
  • 1970-01-01
相关资源
最近更新 更多