0
6つのクラスのコンフュージョンマトリックスを構築しており、マトリックスをプロットするためのベースコードとしてscikit_learn confusion matrixを使用しています。 リニアSVMクラシファイアを再トレーニングするたびに、各トレーニングセッションごとにコンフュージョンマトリックスが変更されるという問題に直面しています。予測されるラベルの数は同じであり、同じではありません。真のラベルの数は、すべてのインターラクションで同じままです。私は混乱マトリックスがこのように変化している理由を理解できません。対角要素も意味をなさない。すべてのインターアクションで変化するコンフュージョンマトリックス
私は何をすべきか教えてください。
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()
私は、すべての特徴ベクトルセットとSVMパラメータが一定のままであれば、クラシファイア自体は同じままであるという考えがありました。分類レポートは毎回同じであるが、confであることが分かる。行列は変化する。 – nainometer
必ずしもそうではありません。多くのことに依存します。詳細を提供する必要があります。オンラインのドキュメンテーションを見ると、LinearSVCはmulti_class = 'crammer_singer'というオプションを使用して、CrammerとSingerによって策定された、いわゆるマルチクラスSVMである代替マルチクラス戦略も実装していることに注意してください。実際には、結果はほとんど同じですが、ランタイムが大幅に少なくなるため、通常は1対のレスト分類が好まれます。 – mattsap
私は "multi_class = crammer_singer"オプションでSVMのトレーニングを試みました。 Linear SVCがトレーニングフェーズで勤務していたときにはしばらく時間がかかりました。しかし、最終的に私はそれをプロットするときに混乱の行列はまだ変化しています。あなたが私の特定の問題についてより多くの情報を伝えることができるように、連絡先情報をいくつか教えてもらえますか? – nainometer