首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用科学知识预测电影评论

用科学知识预测电影评论
EN

Stack Overflow用户
提问于 2014-12-21 11:18:47
回答 1查看 1.8K关注 0票数 1

我正在使用scikit-学习MultinomialNB和向量器来建立一个预测模型,判断评论是好的还是坏的。

在对标签数据进行培训之后,我如何使用它来预测新的评论(或现有的评论)?我收到下面的错误信息。

代码语言:javascript
复制
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.cross_validation import train_test_split
from sklearn.naive_bayes import MultinomialNB

X = vectorizer.fit_transform(df.quote)
X = X.tocsc()
Y = (df.fresh == 'fresh').values.astype(np.int)

xtrain, xtest, ytrain, ytest = train_test_split(X, Y)

clf = MultinomialNB().fit(xtrain, ytrain)

new_review = ['this is a new review, movie was awesome']
new_review = vectorizer.fit_transform(new_review)

print df.quote[15]
print(clf.predict(df.quote[10])) #predict existing review in dataframe
print(clf.predict(new_review)) #predict new review


Technically, Toy Story is nearly flawless.
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-91-27a0698bbd1f> in <module>()
     15 
     16 print df.quote[15]
---> 17 print(clf.predict(df.quote[10])) #predict existing quote in dataframe
     18 print(clf.predict(new_review)) #predict new review

//anaconda/lib/python2.7/site-packages/sklearn/naive_bayes.pyc in predict(self, X)
     60             Predicted target values for X
     61         """
---> 62         jll = self._joint_log_likelihood(X)
     63         return self.classes_[np.argmax(jll, axis=1)]
     64 

//anaconda/lib/python2.7/site-packages/sklearn/naive_bayes.pyc in _joint_log_likelihood(self, X)
    439         """Calculate the posterior log probability of the samples X"""
    440         X = atleast2d_or_csr(X)
--> 441         return (safe_sparse_dot(X, self.feature_log_prob_.T)
    442                 + self.class_log_prior_)
    443 

//anaconda/lib/python2.7/site-packages/sklearn/utils/extmath.pyc in safe_sparse_dot(a, b, dense_output)
    178         return ret
    179     else:
--> 180         return fast_dot(a, b)
    181 
    182 

TypeError: Cannot cast array data from dtype('float64') to dtype('S32') according to the rule 'safe'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-22 03:06:25

您需要将一袋单词表示传递给predict,而不是直接传递给文本。您对new_review的操作几乎是正确的,只需更改new_review = vectorizer.transform(new_review) (请参阅@Stergios注释)。试试这个:

代码语言:javascript
复制
print(clf.predict(X[10, :]))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27588845

复制
相关文章

相似问题

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