Naivebayes MultinomialNB scikit-learn / sklearn - PullRequest
0 голосов
/ 24 мая 2018

Я использую наивный байесовский классификатор и следую учебному пособию на веб-сайте scikit-learn.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import time
import csv
import string
from sklearn.cross_validation import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB

# Importing dataset
data = pd.read_csv("test.csv", quotechar='"', delimiter=',',quoting=csv.QUOTE_ALL, skipinitialspace=True,error_bad_lines=False)
df2 = data.set_index("name", drop = False)



df2['sentiment'] = df2['rating'].apply(lambda rating : +1 if rating > 3 else -1)


train, test = train_test_split(df2, test_size=0.2)


count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(traintrain['review'])
test_matrix = count_vect.transform(testrain['review'])

clf = MultinomialNB().fit(X_train_tfidf, train['sentiment'])

Первый аргумент - словарный словарь, который возвращает матрицу Document-Term.Каким должен быть второй аргумент, nine_train.target?

Редактировать Пример данных

Name, review,rating
film1,......,1
film2, the film is....,5 
film3, film about..., 4

с помощью этой инструкции я создал новый столбец, если рейтинг> 3так что обзор положительный, иначе отрицательный

df2['sentiment'] = df2['rating'].apply(lambda rating : +1 if rating > 3 else -1)

1 Ответ

0 голосов
/ 25 мая 2018

Ваш вопрос не ясен на 100%, но позвольте мне объяснить.

Метод fit для MultinomialNB предполагает ввод x и y.Теперь x должны быть векторами обучения (данные тренировки), а y должны быть целевыми значениями.

clf = MultinomialNB().fit(X_train_tfidf, twenty_train.target)

Более подробно:

X : {array-like, sparse matrix}, shape = [n_samples, n_features]
Training vectors, where n_samples is the number of samples and n_features is 
the number of features.

y : array-like, shape = [n_samples]
Target values.

Примечание. Убедитесь, что shape = [n_samples, n_features] и shape = [n_samples] из x и y определены правильно.В противном случае fit выдаст ошибку.


Пример игрушки:

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics

newsgroups_train = fetch_20newsgroups(subset='train')
categories = ['alt.atheism', 'talk.religion.misc',
              'comp.graphics', 'sci.space']

newsgroups_train = fetch_20newsgroups(subset='train',
                                      categories=categories)
vectorizer = TfidfVectorizer()
# the following will be the training data
vectors = vectorizer.fit_transform(newsgroups_train.data)
vectors.shape

newsgroups_test = fetch_20newsgroups(subset='test',
                                     categories=categories)
# this is the test data
vectors_test = vectorizer.transform(newsgroups_test.data)

clf = MultinomialNB(alpha=.01)

# the fitting is done using the TRAINING data
# Check the shapes before fitting
vectors.shape
#(2034, 34118)
newsgroups_train.target.shape
#(2034,)

# fit the model using the TRAINING data
clf.fit(vectors, newsgroups_train.target)

# the PREDICTION is done using the TEST data
pred = clf.predict(vectors_test)

РЕДАКТИРОВАТЬ:

newsgroups_train.target - это просто массив numpy, который содержит labels (or targets or classes).

import numpy as np

newsgroups_train.target
array([1, 3, 2, ..., 1, 0, 1])

np.unique(newsgroups_train.target)
array([0, 1, 2, 3])

Так что в этом примере у нас есть 4 различных класса / цели.

Эта переменнаянеобходим для того, чтобы соответствовать классификатору.

...