gpt4 book ai didi

python - Scikit LogisticRegression 中的情绪预测错误

转载 作者:行者123 更新时间:2023-11-30 09:33:06 24 4
gpt4 key购买 nike

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'])

训练逻辑回归器

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 has 85 features per sample; expecting 121676

ValueErrorTraceback (most recent call last)

in ()

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

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

            Predicted class label per sample.

----------> scores = 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 has 85 features per sample; expecting 121676

最佳答案

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

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

然后,您将 LogisticRegression 对象拟合到训练数据中,但是当您尝试对测试数据使用 predict() 时,它会提示输入大小与你在训练它时传入的内容,因为它有不同数量的特征。

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

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

如果您打算将数据拆分为训练集和测试集,则应避免为 CountVectorizer 创建不同的拟合,因为稀疏矩阵的结果维度将导致与您遇到的问题类似的问题.

TL;博士:

尝试替换这些

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'])

关于python - Scikit LogisticRegression 中的情绪预测错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50671283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com