2016-05-22 18 views
0

Ich baue eine Confusion Matrix für sechs Klassen und ich verwende scikit_learn confusion matrix als Basiscode zum Zeichnen der Matrix. Ich stehe vor dem Problem, dass, wenn ich den Linear SVM Classifier neu trainiere, die Confusion Matrix mit jeder Trainingseinheit geändert wird. Anzahl der vorhergesagten Etiketten bleibt gleich und nein. von echten Labels bleibt auch für jede Interaktion gleich. Ich kann nicht verstehen, warum Confusion Matrix sich so verändert. Die Diagonalelemente machen auch keinen Sinn.Confusion Matrix ändert sich mit jeder Interaktion

Bitte führen Sie mich, was ich tun soll.

def plot_confusion_matrix(cm, title='Confusion matrix', cmap=plt.cm.Blues): 
    plt.imshow(cm, interpolation='nearest', cmap=cmap) 
    plt.title(title) 
    plt.colorbar() 
    tick_marks = np.arange(6) 
    plt.xticks(tick_marks, names, rotation=45) 
    plt.yticks(tick_marks, names) 
    plt.tight_layout() 
    plt.ylabel('True label') 
    plt.xlabel('Predicted label') 
    # this is the main function i am using 
    # here names is a list of six titles e.g. names = ['a', 'b', 'c', 'd', 'e', 'f'] 


#Following is the code that I am using to call the function 
cm = confusion_matrix(labels_test, predicted) 
np.set_printoptions(precision=2) 
print('Confusion matrix, without normalization') 
print(cm) 
plt.figure() 
plot_confusion_matrix(cm) 
cm_normalized = cm.astype('float')/cm.sum(axis=1)[:, np.newaxis] 
print('Normalized confusion matrix') 
print(cm_normalized) 
plt.figure() 
plot_confusion_matrix(cm_normalized, title='Normalized confusion matrix') 
plt.show() 

Antwort

0

Eine Verwirrung Matrix ermöglicht es Ihnen, zu verstehen, wo ist Ihr Klassifikator gut tun (true positive) und wo es nicht (False Positive).

Die Diagonalen einer Konfusionsmatrix geben an, wie oft eine bestimmte Klasse korrekt klassifiziert wurde (True positive).

Scheint so, als ob Ihr Klassifikator von der Iteration abweicht, wenn Sie Ihren Datensatz neu trainieren. Daher kann die Anzahl der echten positiven/falschen positiven/echten negativen/falschen negativen Werte unterschiedlich sein.

+0

Ich war der Auffassung, dass wenn der gesamte Merkmalsvektor gesetzt und die SVM-Parameter konstant bleiben, der Klassifikator selbst derselbe bleiben wird. Der Klassifizierungsbericht stellt sich jedes Mal als gleich heraus, aber conf. Matrix ist unterschiedlich. – nainometer

+0

Nicht unbedingt. Hängt von vielen Dingen ab. Sie müssen weitere Details angeben. Ein Blick auf die Online-Dokumentation: "Beachten Sie, dass der LinearSVC auch eine alternative Mehrklassenstrategie implementiert, die sogenannte Mehrklassen-SVM, die von Crammer und Singer mit der Option multi_class = 'crammer_singer' formuliert wurde. Diese Methode ist konsistent, was Dies gilt nicht für die Ein-gegen-Rest-Klassifizierung. In der Praxis wird die Ein-gegen-Rest-Klassifizierung in der Regel bevorzugt, da die Ergebnisse meist ähnlich sind, die Laufzeit jedoch deutlich geringer ist. " – mattsap

+0

Ich habe versucht, die SVM mit "multi_class = crammer_singer" -Option zu trainieren. Es hat eine Weile gedauert, bis Line Linear SVC in der Trainingsphase war. Aber am Ende variiert die Konfusionsmatrix noch, wenn ich sie zeichne. Können Sie mir einige Kontaktinformationen geben, damit ich Ihnen weitere Informationen zu meinem spezifischen Problem weiterleiten kann? – nainometer