網站首頁 編程語言 正文
一、ROC與AUC
很多學習器是為了測試樣本產生的一個實值或概率預測,然后將這個預測值與一個分類閾值(threshold)進行比較,若大于閾值則分為正類,否則為反類。主要看需要建立的模型側重于想用在測試數據的泛華性能的好壞。排序本身的質量好壞體系了綜合考慮學習去在不同任務下的“期望泛化性能”的好壞。ROC曲線則是從這個角度出發來研究學習器泛化性能。
1.ROC
ROC的全稱是“受試者工作特征”曲線,與P-R曲線相似。與P-R曲線使用查準率、查全率為縱、橫坐標不同,ROC曲線的縱軸是“真正例率”{簡稱TPR),橫軸是“假正例率”(簡稱FPR)二者分別定義為:
ROC曲線圖以真正例率為Y軸,假正例率為X軸。
2.AUC
進行檢驗判定ROC曲線性能的合理判據是比較ROC曲線下的面積,即AUC。從定義知AUC可通過對ROC曲線下各部分的面積求和而得,AUC可估算為:
從形式化看,AUC考慮的是樣本預測的排序質量,因此它與排序誤差有緊密聯系。因此存在排序損失。
二、代碼實現
形式基本和P-R曲線差不多,只是幾個數值要改一下。
代碼如下(示例):
from sklearn import svm, datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, auc
from itertools import cycle
from sklearn.preprocessing import label_binarize #標簽二值化LabelBinarizer,可以把yes和no轉化為0和1,或是把incident和normal轉化為0和1。
import numpy as np
from sklearn.multiclass import OneVsRestClassifier
iris = datasets.load_iris()
# 鳶尾花數據導入
X = iris.data
#每一列代表了萼片或花瓣的長寬,一共4列,每一列代表某個被測量的鳶尾植物,iris.shape=(150,4)
y = iris.target
#target是一個數組,存儲了data中每條記錄屬于哪一類鳶尾植物,所以數組的長度是150,所有不同值只有三個
random_state = np.random.RandomState(0)
#給定狀態為0的隨機數組
y = label_binarize(y, classes=[0, 1, 2])
n_classes = y.shape[1]
n_samples, n_features = X.shape
X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]
#添加合并生成特征測試數據集
X_train, X_test, y_train, y_test = train_test_split(X, y,
test_size=0.25,
random_state=0)
#根據此模型訓練簡單數據分類器
classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,
random_state=random_state))#線性分類支持向量機
y_score = classifier.fit(X_train, y_train).decision_function(X_test)
#用一個分類器對應一個類別, 每個分類器都把其他全部的類別作為相反類別看待。
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(n_classes):
fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i])
#計算ROC曲線面積
roc_auc[i] = auc(fpr[i], tpr[i])
fpr["micro"], tpr["micro"], _ = roc_curve(y_test.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])
import matplotlib.pyplot as plt
plt.figure()
lw = 2
plt.plot(fpr[2], tpr[2], color='darkorange',
lw=lw, label='ROC curve (area = %0.2f)' % roc_auc[2])
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.ylim([0.0, 1.0])
plt.xlim([0.0, 1.0])
plt.legend(loc="lower right")
plt.title("Precision-Recall")
plt.show()
效果
原文鏈接:https://juejin.cn/post/7196975187992068133
相關推薦
- 2022-09-18 C#面向對象編程中依賴反轉原則的示例詳解_C#教程
- 2022-08-03 GoFrame?gtree樹形結構的使用技巧示例_Golang
- 2022-10-22 Python構建簡單線性回歸模型_python
- 2022-08-18 KubeSphere分級管理實踐及解析_云其它
- 2022-05-13 深度優先搜索之八皇后問題
- 2022-04-28 WPF使用Canvas畫布面板布局_實用技巧
- 2021-12-14 go調用shell命令兩種方式實現(有無返回值)_Golang
- 2022-04-08 Python實現自定義異常實例_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支