Оставьте One Out Scores 100%, что мне здесь не хватает?

Я пытаюсь выполнить одно резюме для своих статей, но когда я запускаю процедуру, я получаю 100% точность и не могу понять, что мне не хватает. Это мой код:

import sklearn
from sklearn.datasets import load_files
import numpy as np
from sklearn.cross_validation import cross_val_score, LeaveOneOut
from scipy.stats import sem
from sklearn.naive_bayes import MultinomialNB

bunch = load_files('corpus', shuffle = False)

X = bunch.data
y = bunch.target

from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer(stop_words = 'english')
X_counts = count_vect.fit_transform(X)

from sklearn.feature_extraction.text import TfidfTransformer
tfidf_transformer = TfidfTransformer()
X_tfidf = tfidf_transformer.fit_transform(X_counts)

estimator = MultinomialNB().fit(X_tfidf, y)
cv = LeaveOneOut(26)
scores = cross_val_score(estimator, X_tfidf, y, cv = cv)
print scores
print ("Mean score: {0:.3f} (+/-{1:.3f})").format(np.mean(scores), sem(scores))

И я получаю идентичную классификацию в качестве входных данных, что немного странно. Мои результаты:

[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.  1.]
Mean score: 0.577 (+/-0.099)

И моя классификация входных данных:

([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])

Я не понимаю, где мое LOO CV терпит неудачу. :С

Помощь приветствуется.


person user3118533    schedule 12.06.2016    source источник


Ответы (1)


Разве ваша оценка точности из LOOCV не 0,577, как вы распечатали с последней строки?

Функция cross_val_score возвращает массив баллов (по умолчанию точность) с каждой страницы резюме. Массив scores, который вы напечатали, представляет собой показатель точности, а не прогноз.

person Zichen Wang    schedule 12.06.2016
comment
Эй, вот что меня озадачивает, сгенерированная точность составляет 0,577, но вывод прогноза такой же, как у Золотого стандарта, поэтому все статьи классифицируются правильно в соответствии с выводом массива. Может я чего-то не понимаю. - person user3118533; 13.06.2016
comment
Массив, который вы напечатали, означает не метки, а точность. Каждый элемент в массиве является оценкой точности для каждой итерации LOOCV. Вы должны взять среднее значение этих значений, чтобы вычислить общую точность прогноза, которая составляет 0,577. - person anilbey; 01.08.2017