7.1 分类模型评估
1、二分类

混淆矩阵中对角线的元素代表正确分类的数量;
非对角线元素代表错误分类的数量。
所以最为理想的模型(拿测试集来看),应该是一个对角阵。若无法得到对角阵,对角线上的数字之和如果占统治地位也是可以的。


片面的追求查准率可能会降低召回率
2、多分类


recall参数中的average()的取值:
binary表示二分类
micro表示多元混淆矩阵中的第一种方法
macro表示的是一种不加权的平均
weighted表示加权的平均
3、 反应分类效果的图及ROC曲线阈值的选取
(1)ROC、AUC


选取标准:让TPR尽可能的大,FPR尽可能的小,所以选取其拐点
AUC表示的是ROC曲线下的面积,可以直接反应ROC曲线像左上方靠近的程度。
如何做ROC曲线?

xy_lst = [(X_train, Y_train), (X_validation, Y_validation), (X_test, Y_test)]
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve,auc,roc_auc_score
f = plt.figure()
for i in range(len(xy_lst)):
X_part = xy_lst[i][0]
Y_part = xy_lst[i][1]
Y_pred = mdl.predict(X_part)
# Y_pred = mdl.predict_classes(X_part)#用predict()时输出的是连续值,使用predict_classes()时输出的是分类标注
# print(i)
print(Y_pred)
Y_pred = np.array(Y_pred[:,1]).reshape((1,-1))[0]
# from sklearn.metrics import accuracy_score, recall_score, f1_score
# print(i, '---:', 'Nural Network', '准确率:', accuracy_score(Y_part, Y_pred),
# '召回率:', recall_score(Y_part, Y_pred),
# 'F1分数:', f1_score(Y_part, Y_pred))
f.add_subplot(1,3,i+1)
fpr,tpr,thresholds = roc_curve(Y_part,Y_pred)
plt.plot(fpr,tpr)
plt.shaow()
#这两个函数功能一样
print('Nural Network','AUC',auc(fpr,tpr))
print('Nural Network','AUC Score',roc_auc_score(Y_part,Y_pred))
'''
Nural Network AUC 0.9610879734019506
Nural Network AUC Score 0.9610879734019506
Nural Network AUC 0.961721658936862
Nural Network AUC Score 0.961721658936862
Nural Network AUC 0.9637020039792525
Nural Network AUC Score 0.9637020039792525
'''
(2)增益图与KS图

其中KS图中关注的是,TPR曲线与FPR曲线的差距,这个差距反映了对正类样本的区分度。