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曲线的差距,这个差距反映了对正类样本的区分度。