如何针对我的 NLP 朴素贝叶斯分类器测试新词集

Posted

技术标签:

【中文标题】如何针对我的 NLP 朴素贝叶斯分类器测试新词集【英文标题】:How to test new word set against my NLP Naive bayes classifier 【发布时间】:2019-09-09 07:58:22 【问题描述】:

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

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

在另一个“类似回归”的模型中,我可以提取 Theta 的值,以便我可以预测任何新值。

但是我知道,naive based 是通过计算每个单词对每个类的概率来工作的。

例如

我的数据集包括(一些文本的 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 = [[“好电影和好声音”],[“演技太差了”]] ynew = classifier.predict(Xnew)

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 包中获得每个单词的所有概率。

先谢谢了

【问题讨论】:

【参考方案1】:

在将 cmets 传递给模型之前,您必须对其进行矢量化处理。

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 的管道将这两个步骤结合起来

【讨论】:

以上是关于如何针对我的 NLP 朴素贝叶斯分类器测试新词集的主要内容,如果未能解决你的问题,请参考以下文章

AI Live 分享第二弹中文NLP-文本分类方法之朴素贝叶斯分类器

如何在 python 的朴素贝叶斯分类器中对用户输入测试集进行分类?

提高准确性朴素贝叶斯分类器

Python小案例:朴素贝叶斯分类器

朴素贝叶斯分类器

如何让朴素贝叶斯分类器工作?