2013-10-28 5 views
7

użyłem następujący zestaw kodu: I muszę sprawdzić dokładność X_train i X_testPython: Jak znaleźć Dokładność spowodować SVM Tekst Klasyfikatorze Algorytm Multilabel klasy

Poniższy kod działa dla mnie w klasyfikacji problem w ciągu wielu znakowanych klasa

import numpy as np 
from sklearn.pipeline import Pipeline 
from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.svm import LinearSVC 
from sklearn.feature_extraction.text import TfidfTransformer 
from sklearn.multiclass import OneVsRestClassifier 

X_train = np.array(["new york is a hell of a town", 
        "new york was originally dutch", 
        "the big apple is great", 
        "new york is also called the big apple", 
        "nyc is nice", 
        "people abbreviate new york city as nyc", 
        "the capital of great britain is london", 
        "london is in the uk", 
        "london is in england", 
        "london is in great britain", 
        "it rains a lot in london", 
        "london hosts the british museum", 
        "new york is great and so is london", 
        "i like london better than new york"]) 
y_train = [[0],[0],[0],[0] 
      ,[0],[0],[1],[1] 
      ,[1],[1],[1],[1] 
      ,[2],[2]] 
X_test = np.array(['nice day in nyc', 
        'the capital of great britain is london', 
        'i like london better than new york', 
        ]) 
target_names = ['Class 1', 'Class 2','Class 3'] 

classifier = Pipeline([ 
    ('vectorizer', CountVectorizer(min_df=1,max_df=2)), 
    ('tfidf', TfidfTransformer()), 
    ('clf', OneVsRestClassifier(LinearSVC()))]) 
classifier.fit(X_train, y_train) 
predicted = classifier.predict(X_test) 
for item, labels in zip(X_test, predicted): 
    print '%s => %s' % (item, ', '.join(target_names[x] for x in labels)) 

WYJŚCIE

nice day in nyc => Class 1 
the capital of great britain is london => Class 2 
i like london better than new york => Class 3 

Chciałbym sprawdzić dokładność pomiędzy Szkoleniem i zestawem danych testowych. Wynik Funkcja nie działa dla mnie, to pokazuje błąd stwierdzając, że wartość multilabel nie przyjął

>>> classifier.score(X_train, X_test) 

NotImplementedError: wynik nie jest obsługiwany przez wielokategorialnym klasyfikatorów

uprzejmie mi pomóc uzyskać wyniki dokładności dla szkoleń i danych testowych i wybierz algorytm dla naszego przypadku klasyfikacji.

Odpowiedz

9

Jeśli chcesz uzyskać wynik dokładności dla zestawu testowego, musisz utworzyć klucz odpowiedzi, który możesz nazwać y_test. Nie możesz wiedzieć, czy twoje prognozy są poprawne, chyba że znasz prawidłowe odpowiedzi.

Po uzyskaniu klucza odpowiedzi można uzyskać dokładność. Metoda, którą chcesz, to sklearn.metrics.accuracy_score.

Pisałem go poniżej:

from sklearn.metrics import accuracy_score 

# ... everything else the same ... 

# create an answer key 
# I hope this is correct! 
y_test = [[1], [2], [3]] 

# same as yours... 
classifier.fit(X_train, y_train) 
predicted = classifier.predict(X_test) 

# get the accuracy 
print accuracy_score(y_test, predicted) 

Również sklearn ma kilka innych danych oprócz dokładności. Zobacz je tutaj: sklearn.metrics

+0

Dzięki, działa dla mojego problemu –

+2

Uważam, że "classification_report" (od sklearn) jest bardzo użyteczny, ponieważ zawiera tabelę z najczęstszymi danymi. –