normalize的使用有何影响?
normalize
参数用于控制混淆矩阵是否进行归一化。混淆矩阵是用于评估分类模型性能的表格,其中行表示实际类别,列表示预测类别。在可视化混淆矩阵时,有时候希望将每行的值归一化,以便更清晰地了解模型在每个类别上的性能,而不受类别样本数量的影响。
具体来说:
-
当
normalize=False
时,混淆矩阵中的值表示每个类别的样本数量,而不进行归一化。 -
当
normalize=True
时,混淆矩阵中的值被归一化为每个类别的样本百分比,即每行的和变为 1。这样可以更容易地比较不同类别之间的性能,而不受类别样本数量的差异影响。
在可视化混淆矩阵时,通常使用归一化的混淆矩阵,因为这样更容易识别模型在各个类别上的分类准确度。通过比较每个类别的归一化值,您可以更好地了解模型在不同类别上的性能表现。
学习测试代码
# 绘制混淆矩阵的图片
def plot_confusion_matrix(cm, classes,
normalize=False,
title='混淆矩阵',
cmap=plt.cm.Blues):
if normalize:
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
print("Normalized confusion matrix")
else:
print('Confusion matrix, without normalization')
# print(cm)
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=310, size=12)
plt.yticks(tick_marks, classes, size=12)
fmt = '.2f' if normalize else 'd'
thresh = cm.max() / 2.
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, format(cm[i, j], fmt),
horizontalalignment="center",
color="white"
if cm[i, j] > thresh else "black")
plt.tight_layout()
plt.ylabel('真实标签', size=12)
plt.xlabel('预测标签', size=12)