10.1 分类准确度的问题
- 对于极度偏斜的数据,只用分类准确度是远远不够的。(比如癌症预测,只有0.01%的癌症患者,会有极高的准确度)
混淆矩阵 Confusion Matrix
- 例子:预测10000个人是否患癌症
10.2 精准率和召回率
精准率
直观解释:预测出来的所关注的类(1:患病)中正确的比例
召回率
直观解释:有多少真实的所关注的类(1:患病)被预测出来
一个很好的解释图:
10.4 F1-Score
- F1 是 precision和recall的调和平均值
10.5 precision-recall的平衡
- 通过调整阈值threshold,可以改变精确率和召回率。两者是矛盾的,一方增大,另一方就会减小。
例子:
10.6 Precision-Recall曲线
曲线1
横轴:threshold(阈值)
数轴:precision和recall的值
曲线2
横轴:精确率
纵轴:召回率
例子:两个算法绘制Precision-Recall曲线
显然外边的曲线所对应的算法优于内部曲线。(与x和y轴包围成的面积较大)
可用来评估算法、模型。
10.7 ROC曲线
描述TPR和FPR之间的关系。其中TPR=Recall,即召回率。FPR公式见下方
TPR和FPR的关系
同增同减
10.7 ROC曲线
常用于比较模型、算法之间的优劣。
对于有偏数据,该曲线不能很好反应算法的好坏,应该要看精确率和召回率。
- 面积大的为更好的算法模型。
10.8 多分类问题中的混淆矩阵
可以利用混淆矩阵,绘制error matrix,来看错误发生在哪一类别中,从而可以再观察数据或改进算法。
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_predict)
#绘制混淆矩阵
cfm = confusion_matrix(y_test, y_predict)
plt.matshow(cfm, cmap=plt.cm.gray)
plt.show()
#绘制error matrix
row_sums = np.sum(cfm, axis=1)
err_matrix = cfm / row_sums
np.fill_diagonal(err_matrix, 0)
plt.matshow(err_matrix, cmap=plt.cm.gray)
plt.show()
- 混淆矩阵
- error matrix
多分类指标参考笔记:https://blog.csdn.net/wf592523813/article/details/95202448
https://www.jianshu.com/p/100f3dee345d