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

问题描述 投票:-1回答:1

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

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

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

但我知道,天真的是通过计算每个单词对每个类的概率。

例如

我的数据集包括(一些文字的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)

现在我希望做一些像“好电影和漂亮的音轨”和“表演非常糟糕”的新文章。让我的分类器预测是好还是坏!

新= [[“好电影和漂亮的音轨”],[“表演太糟糕了”]] ynew = classifier.predict(X新)

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

提前致谢

python nlp data-science text-classification naivebayes
1个回答
0
投票

在将注释传递给模型之前,您必须对注释进行矢量化。

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

© www.soinside.com 2019 - 2024. All rights reserved.