Scikit-Learn:混淆矩阵中的标签不匹配
Scikit-Learn: Labels don't match in Confusion Matrix
假设我有一个包含(可能)43 个不同值的数组,例如
import pandas as pd
Y_test = pd.Series([4,4,4,42,42,0,1,1,19], dtype=int)
Y_hat = pd.Series([4,4,2,32,42,0,5,5,19], dtype=int)
每当我尝试用以下方法绘制混淆矩阵时:
def create_conf_mat(index, y_test, y_hat):
cm = confusion_matrix(y_test, y_hat)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cm)
plt.title(f'Confusion Matrix ({index} features, 1 outcome)')
fig.colorbar(cax)
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.savefig(f'confm_{index}.png')
plt.savefig(f'confm_{index}.svg')
plt.savefig(f'confm_{index}.pdf')
return
我没有得到标签 [0, 1, 2, 4, 5, 19, 32, 42] 但是 [0, 1, 2, 3, 4, 5, 6, 7]。
我试图通过使用 y_test/y_hat 中的唯一值作为标签参数来显式设置标签,但它也不起作用。我什至尝试将整数值转换为字符串,但这样做时,sklearn 抱怨至少有一个标签必须在 y_true 中。
有谁知道如何将 y_test 和 y_pred 中的实际值绘制为混淆矩阵中的标签?
正如 documentation 中所暗示的,关于 labels
参数到 confusion_matrix
:
If None is given, those that appear at least once in y_true or y_pred are used in sorted order.
因此,我们需要将两个列表放在一起,并提取唯一编号列表:
labels = np.unique(np.concatenate([y_test.values, y_hat.values]))
plt.xticks(range(len(labels)), labels)
plt.yticks(range(len(labels)), labels)
请注意 'scikit-learn' 的最新版本现在包含一个 integrated function to plot a confusion matrix with example code。
假设我有一个包含(可能)43 个不同值的数组,例如
import pandas as pd
Y_test = pd.Series([4,4,4,42,42,0,1,1,19], dtype=int)
Y_hat = pd.Series([4,4,2,32,42,0,5,5,19], dtype=int)
每当我尝试用以下方法绘制混淆矩阵时:
def create_conf_mat(index, y_test, y_hat):
cm = confusion_matrix(y_test, y_hat)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(cm)
plt.title(f'Confusion Matrix ({index} features, 1 outcome)')
fig.colorbar(cax)
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.savefig(f'confm_{index}.png')
plt.savefig(f'confm_{index}.svg')
plt.savefig(f'confm_{index}.pdf')
return
我没有得到标签 [0, 1, 2, 4, 5, 19, 32, 42] 但是 [0, 1, 2, 3, 4, 5, 6, 7]。 我试图通过使用 y_test/y_hat 中的唯一值作为标签参数来显式设置标签,但它也不起作用。我什至尝试将整数值转换为字符串,但这样做时,sklearn 抱怨至少有一个标签必须在 y_true 中。 有谁知道如何将 y_test 和 y_pred 中的实际值绘制为混淆矩阵中的标签?
正如 documentation 中所暗示的,关于 labels
参数到 confusion_matrix
:
If None is given, those that appear at least once in y_true or y_pred are used in sorted order.
因此,我们需要将两个列表放在一起,并提取唯一编号列表:
labels = np.unique(np.concatenate([y_test.values, y_hat.values]))
plt.xticks(range(len(labels)), labels)
plt.yticks(range(len(labels)), labels)
请注意 'scikit-learn' 的最新版本现在包含一个 integrated function to plot a confusion matrix with example code。