Mam następujący fragment kodu, który używa klasyfikatora NB dla problemu klasyfikacji wielu klas. Funkcja wykonuje wstępną weryfikację krzyżową, zapisując dokładności i drukowując średnią później. Tym, czego chcę, jest raport klasyfikacyjny określający dokładność klasyczną i przypomnienie, zamiast średniej oceny dokładności na końcu.Uzyskaj raport klasyfikacji precyzujący precyzję klasy i odwołanie do wielomianowej Naive Bayes za pomocą 10-krotnego sprawdzania poprawności
import random
from sklearn import cross_validation
from sklearn.naive_bayes import MultinomialNB
def multinomial_nb_with_cv(x_train, y_train):
random.shuffle(X)
kf = cross_validation.KFold(len(X), n_folds=10)
acc = []
for train_index, test_index in kf:
y_true = y_train[test_index]
clf = MultinomialNB().fit(x_train[train_index],
y_train[train_index])
y_pred = clf.predict(x_train[test_index])
acc.append(accuracy_score(y_true, y_pred))
Gdybym nie wykonują krzyżowej walidacji wszystko, co mam zrobić, to:
from sklearn.metrics import classification_report
from sklearn.naive_bayes import MultinomialNB
def multinomial_nb(x_train, y_train, x_test, y_test):
clf = MultinomialNB().fit(x_train, y_train)
y_pred = clf.predict(x_test)
y_true = y_test
print classification_report(y_true, y_pred)
I to daje mi raport takiego:
precision recall f1-score support
0 0.50 0.24 0.33 221
1 0.00 0.00 0.00 18
2 0.00 0.00 0.00 27
3 0.00 0.00 0.00 28
4 0.00 0.00 0.00 32
5 0.04 0.02 0.02 57
6 0.00 0.00 0.00 26
7 0.00 0.00 0.00 25
8 0.00 0.00 0.00 43
9 0.00 0.00 0.00 99
10 0.63 0.98 0.76 716
avg/total 0.44 0.59 0.48 1292
Jak mogę uzyskać podobny zgłosić się nawet w przypadku sprawdzania krzyżowego?
To jest świetne. Tak więc cross_val_predict wewnętrznie po prostu łączy y_true i y_pred dla każdego fałdu i wyniku, który na końcu. Po prostu uderzyło mnie to później, wszystko, co mogłem zrobić, jest takie samo w moim poprzednim kodzie. – CuriousCat
@CuriousCat Tak, więc najpierw dzielimy całą próbkę na 10 zagięć. Następnie przeprowadzamy walidację krzyżową, wykorzystując każdy fałd jako próbkę testową, a odpowiednie predykcje są przechowywane. Wreszcie, 'cross_val_pred' łączy te niepokrywające się prognozy i zwraca wynik o takiej samej długości jak nasza pełna próbka treningowa. –