Python機(jī)器學(xué)習(xí)利用鳶尾花數(shù)據(jù)繪制ROC和AUC曲線
一、ROC與AUC
很多學(xué)習(xí)器是為了測(cè)試樣本產(chǎn)生的一個(gè)實(shí)值或概率預(yù)測(cè),然后將這個(gè)預(yù)測(cè)值與一個(gè)分類閾值(threshold)進(jìn)行比較,若大于閾值則分為正類,否則為反類。主要看需要建立的模型側(cè)重于想用在測(cè)試數(shù)據(jù)的泛華性能的好壞。排序本身的質(zhì)量好壞體系了綜合考慮學(xué)習(xí)去在不同任務(wù)下的“期望泛化性能”的好壞。ROC曲線則是從這個(gè)角度出發(fā)來研究學(xué)習(xí)器泛化性能。
1.ROC
ROC的全稱是“受試者工作特征”曲線,與P-R曲線相似。與P-R曲線使用查準(zhǔn)率、查全率為縱、橫坐標(biāo)不同,ROC曲線的縱軸是“真正例率”{簡(jiǎn)稱TPR),橫軸是“假正例率”(簡(jiǎn)稱FPR)二者分別定義為:
ROC曲線圖以真正例率為Y軸,假正例率為X軸。
2.AUC
進(jìn)行檢驗(yàn)判定ROC曲線性能的合理判據(jù)是比較ROC曲線下的面積,即AUC。從定義知AUC可通過對(duì)ROC曲線下各部分的面積求和而得,AUC可估算為:
從形式化看,AUC考慮的是樣本預(yù)測(cè)的排序質(zhì)量,因此它與排序誤差有緊密聯(lián)系。因此存在排序損失。
二、代碼實(shí)現(xiàn)
形式基本和P-R曲線差不多,只是幾個(gè)數(shù)值要改一下。
代碼如下(示例):
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 #標(biāo)簽二值化LabelBinarizer,可以把yes和no轉(zhuǎn)化為0和1,或是把incident和normal轉(zhuǎn)化為0和1。 import numpy as np from sklearn.multiclass import OneVsRestClassifier iris = datasets.load_iris() # 鳶尾花數(shù)據(jù)導(dǎo)入 X = iris.data #每一列代表了萼片或花瓣的長(zhǎng)寬,一共4列,每一列代表某個(gè)被測(cè)量的鳶尾植物,iris.shape=(150,4) y = iris.target #target是一個(gè)數(shù)組,存儲(chǔ)了data中每條記錄屬于哪一類鳶尾植物,所以數(shù)組的長(zhǎng)度是150,所有不同值只有三個(gè) random_state = np.random.RandomState(0) #給定狀態(tài)為0的隨機(jī)數(shù)組 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)] #添加合并生成特征測(cè)試數(shù)據(jù)集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0) #根據(jù)此模型訓(xùn)練簡(jiǎn)單數(shù)據(jù)分類器 classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True, random_state=random_state))#線性分類支持向量機(jī) y_score = classifier.fit(X_train, y_train).decision_function(X_test) #用一個(gè)分類器對(duì)應(yīng)一個(gè)類別, 每個(gè)分類器都把其他全部的類別作為相反類別看待。 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]) #計(jì)算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()
效果
以上就是Python機(jī)器學(xué)習(xí)利用鳶尾花數(shù)據(jù)繪制ROC和AUC曲線的詳細(xì)內(nèi)容,更多關(guān)于Python數(shù)據(jù)繪制ROC AUC的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python梯度提升庫(kù)XGBoost解決機(jī)器學(xué)習(xí)問題使用探究
- Python機(jī)器學(xué)習(xí)特征重要性分析的8個(gè)常用方法實(shí)例探究
- python taipy庫(kù)輕松地將數(shù)據(jù)和機(jī)器學(xué)習(xí)模型轉(zhuǎn)為功能性Web應(yīng)用
- Python BentoML構(gòu)建部署和管理機(jī)器學(xué)習(xí)模型技巧掌握
- Python機(jī)器學(xué)習(xí)性能度量利用鳶尾花數(shù)據(jù)繪制P-R曲線
- python人工智能human?learn繪圖創(chuàng)建機(jī)器學(xué)習(xí)模型
- python機(jī)器學(xué)習(xí)Github已達(dá)8.9Kstars模型解釋器LIME
- python?lazypredict構(gòu)建大量基本模型簡(jiǎn)化機(jī)器學(xué)習(xí)
相關(guān)文章
關(guān)于pandas-profiling的降級(jí)之旅
這篇文章主要介紹了關(guān)于pandas-profiling的降級(jí)之旅,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11python 如何在list中找Topk的數(shù)值和索引
這篇文章主要介紹了python 如何在list中找Topk的數(shù)值和索引的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05如何爬取通過ajax加載數(shù)據(jù)的網(wǎng)站
這篇文章主要介紹了如何爬取通過ajax加載數(shù)據(jù)的網(wǎng)站,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08