如何测试新单词集对我的NLP朴素贝叶斯classifi

2024-03-29 07:55:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python scikit learn基于Naive base构建了一个NLP分类器

关键是,我希望我的分类器对一个“不属于我的任何训练或测试数据集”的新文本进行分类

在另一个“类似回归”的模型中,我可以提取θ的值,这样我就可以预测任何新的值。你知道吗

不过我知道,基于朴素的工作原理是通过计算每个单词对每个类的概率。你知道吗

例如

我的数据集包括(1000条文本记录)如下 “太好了” “我喜欢” “我不喜欢这部电影” 等。。你知道吗

每一个文本被分类为+ev或-ev

我将数据集分为训练集和测试集。一切都好。你知道吗

现在我想给一个全新的文本分类,比如“哦,我喜欢这部电影,而且音轨很完美”

如何让我的模型预测这篇文章!你知道吗

这是代码

from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(max_features=850)

X = cv.fit_transform(corpus).toarray()
y = dataset.iloc[:, 1].values

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 10)

from sklearn.naive_bayes import GaussianNB
classifier = GaussianNB()
classifier.fit(X_train, y_train)

y_pred = classifier.predict()

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

现在我期待着做一些新的文本,比如“好电影,好音轨”和“演技太差了”。让我的朋友来预测是好是坏!

Xnew=[[“好电影和好音轨”],[“演技太差了”]] Y新=分类器.预测(新)

but i get a super error 

 jointi = np.log(self.class_prior_[i])
    436             n_ij = - 0.5 * np.sum(np.log(2. * np.pi * self.sigma_[i, :]))
--> 437             n_ij -= 0.5 * np.sum(((X - self.theta_[i, :]) ** 2) /
    438                                  (self.sigma_[i, :]), 1)
    439             joint_log_likelihood.append(jointi + n_ij)

TypeError: ufunc 'subtract' did not contain a loop with signature matching types dtype('<U32') dtype('<U32') dtype('<U32')

另外,我想知道我的语料库的NLP包中每个单词的概率。

提前谢谢你


Tags: fromtest文本importselflog电影分类器
1条回答
网友
1楼 · 发布于 2024-03-29 07:55:45

在将注释传递给模型之前,必须将其矢量化。你知道吗

docs_new = ["good movie and nice sound track", "acting was so bad"]
X_new_counts = cv.transform(docs_new)
classifier.predict(X_new_counts)

得到概率分数

classifier.predict_proba(X_new_counts)

或者,您可以使用sklearn的管道来组合这两个步骤

相关问题 更多 >