我使用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包中每个单词的所有概率。
提前致谢
在将注释传递给模型之前,您必须对注释进行矢量化。
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的管道来组合这两个步骤