上一篇文章中介绍了常用的模型评估指标,但一个好的模型,往往追求的是多个指标的平衡,而非某一个指标的大小。本文介绍的ROC,可以直观的展示评估效果。
ROC曲线
在ROC曲线中,横轴是假正例率(FPR),纵轴是真正例率(TPR)。
假正利率(False Posive Rate)FPR = FP/(FP+TN),代表分类器预测错的正样本,占实际负样本的比例。
真正利率(True Posive Rate)FPR = TP/(TP+FN),即召回率。
ROC曲线需要相应阈值进行绘制。
AUC面积
AUC (Area under Curve):ROC曲线下的面积,介于0.1和1之间,作为数值可以直观的评价分类器的好坏,值越大越好,表示找到真实正样本付出的代价越小。
代码示例
1、构建数据集
from matplotlib import pyplot as plt from sklearn.datasets import make_blobs class_1 = 500 class_2 = 50 centers = [[0,0], [1,1]] cluster_std = [1.5, 0.5] x,y = make_blobs(n_samples=[class_1, class_2], cluster_std=cluster_std, random_state=0) plt.scatter(x[:,0], x[:,1], c=y, s=40) plt.show()
2、建立模型,查看置信度(类似概率)
from sklearn.svm import SVC clf = SVC(probability=True).fit(x,y) prob = clf.predict_proba(x) # 两列值分别代表两个类别的概率 print(prob)
3、画ROC曲线
from sklearn.metrics import roc_curve import numpy as np # pos_label表示正样本的类别 fpr, tpr, thresholds = roc_curve(y, prob[:, 1], pos_label=1) # 最佳阈值,希望tpr尽量小,fpr尽量大 idx = np.argmax(tpr-fpr) threshold = thresholds[idx] print('最佳阈值:', threshold) plt.scatter(fpr[idx], tpr[idx], c='r', s=50) plt.plot([0,1], [0,1], c='k', linestyle='--') plt.plot(fpr, tpr) plt.show()
4、获取AUC面积
from sklearn.metrics import roc_auc_score as AUC score = AUC(y, prob[:,1]) print('AUC score:', score) #0.99164
本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/288
- 上一篇:
- 机器学习混淆矩阵及模型评估指标
- 下一篇:
- 澳大利亚天气预测特征工程之城市气候区域