ROC曲线学习

ROC曲线:全称 Receiver Operating Characteristic曲线,即受试者工作特性曲线,在机器学习领域常用于判断分类器的好坏。

要了解ROC曲线,首先要了解该曲线的横纵坐标 —— FPR(1-特异度)TPR(召回率或者灵敏度)

1. 基本概念 —— 混淆矩阵

绘制混淆矩阵https://www.cnblogs.com/qi-yuan-008/p/11675499.html

2. ROC曲线的横坐标是FPR值,纵坐标是TPR值;每指定一个threshold,就对应一个FPR-TPR值对。

threshold 表示的是:测试样本中每个样本预测为正的概率,并且从大到小排列。

AUC的值表示的是:ROC曲线下方区域的面积大小 —— 即对曲线进行积分所得;一般来说,AUC的值越大,分类器的分类性能越好。

3. Python绘制ROC曲线:

以支持向量机分类为例,假设训练样本为:x_train,y_train,测试样本为:x_test,y_test

from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix
from sklearn import metrics
import matplotlib.pyplot as plt

def svm_func(x_train,y_train,x_test,y_test):
    clf = SVC(kernel = 'linear', verbose=True)
    clf.fit(x_train,y_train)
    pred = clf.predict(x_test)

    #混淆矩阵, labels为数据中各类标签值,这里0为负样本,2为正样本
    cm = confusion_matrix(y_test, pred, labels=[0, 2]) #纵坐标是y_test,横坐标是pred
    print(cm)

    # 绘制ROC曲线
    fpr, tpr, thresholds = metrics.roc_curve(y_test, pred, pos_label=2) # pos_label表示选定该标签是正,其他的均为负,绘制ROC曲线
    auc = metrics.auc(fpr, tpr)  #计算AUC值
    
    # # 设置绘图风格
    plt.figure()
    plt.style.use('ggplot')
    
    # 绘制ROC曲线
    plt.plot(fpr, tpr,'')
    # 绘制参考线
    plt.plot((0,1),(0,1),'r--')
    # 添加文本
    plt.text(0.5,0.5,'AUC值为%.2f' % auc, fontsize=16)

    plt.title('支持向量机模型的ROC曲线')
    plt.xlabel('1-specificity')
    plt.ylabel('Sensitivity')
    
    # 中文和负号的正常显示
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    # 去除图形顶部边界和右边界的刻度
    plt.tick_params(top=False, right=False)
    plt.show()

注:

[1]. ROC曲线适用于二分类,但是可以扩展至多分类。

[2]. 当负样本数量远远大于正样本数量时,ROC曲线可能会不正确,这时可用PR曲线(Precision-Recall曲线)。

##

参考:

https://blog.csdn.net/u012429555/article/details/82973387

https://www.cnblogs.com/Zhi-Z/p/8728168.html

https://blog.csdn.net/qq_30992103/article/details/99730059

https://zhuanlan.zhihu.com/p/25212301

https://www.jianshu.com/p/2ca96fce7e81

posted on 2020-04-06 19:50  落日峡谷  阅读(1261)  评论(0编辑  收藏  举报

导航