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()
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
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
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