Как протестировать новый набор слов с моим классификатором NLP Naive Bayes - PullRequest
0 голосов
/ 19 апреля 2019

Я строю классификатор НЛП на основе базы Naive, используя python scikit-learn

Дело в том, что я хочу, чтобы мой классификатор классифицировал новый текст ", который непринадлежит к любому из моих наборов данных обучения или тестирования "

в другой модели" как регрессия ", я могу извлечь значения тэты, чтобы я мог предсказать любое новое значение.

однако я знаю, что наивный метод работает путем расчета вероятности каждого слова против каждого класса.

например

мой набор данных включает (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')

также мне интересно, смогу ли я получить все вероятности для каждого слова в моей НЛП сумке моего корпуса.

заранее благодарю

1 Ответ

0 голосов
/ 23 апреля 2019

Вы должны векторизовать ваши комментарии, прежде чем передавать их в модель.

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, чтобы объединить эти два шага

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...