我写了一个预测序数数据的模型。目前,我正在使用二次科恩的 kappa评估我的模型。我正在寻找一种使用混淆矩阵来可视化结果的方法,然后在考虑预测距离的情况下计算召回率、精度和 f1 分数。
IE 在 class 为 1 时预测2比在class 为 1 时预测3更好。
我编写了以下代码来绘制和计算结果:
def plot_cm(df, ax):
cf_matrix = confusion_matrix(df.x, df.y,normalize='true',labels=[0,1,2,3,4,5,6,7,8])
ax = sns.heatmap(cf_matrix, linewidths=1, annot=True, ax=ax, fmt='.2f')
ax.set_ylabel(f'Actual')
ax.set_xlabel(f'Predicted')
print(f'Recall score:',recall_score(df.x,df.y, average= 'weighted',zero_division=0))
print(f'Precision score:',precision_score(df.x,df.y, average= 'weighted',zero_division=0))
print(f'F1 score:',f1_score(df.x,df.y, average= 'weighted',zero_division=0))
Recall score: 0.53505
Precision score: 0.5454783454981732
F1 score: 0.5360650278722704
可视化很好,但是,计算忽略了“几乎”为真的预测。IE在实际为9时预测为8(例如)。
考虑到数据的序数行为,有没有办法计算召回率、精度和 F1?