<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
1、ROC用於度量模型效能
2、用於二分類問題,如若遇到多分類也以二分類的思想進行操作。
3、二分類問題程式碼實現(至於實現,檔案說的很清楚了:官方檔案)
原理看懂就好,實現直接呼叫API即可
from sklearn.metrics import roc_curve, auc fpr, tpr, thresholds = roc_curve(y_true,y_sore) roc_auc = auc(fpr, tpr) plt.title('Receiver Operating Characteristic') plt.plot(fpr, tpr, '#9400D3',label=u'AUC = %0.3f'% roc_auc) plt.legend(loc='lower right') plt.plot([0,1],[0,1],'r--') plt.xlim([-0.1,1.1]) plt.ylim([-0.1,1.1]) plt.ylabel('True Positive Rate') plt.xlabel('False Positive Rate') plt.grid(linestyle='-.') plt.grid(True) plt.show() print(roc_auc)
4、多分類問題程式碼實現
對於兩個以上類的分類問題,
這裡就有ROC的宏觀平均(macro-average)和微觀平均(micro-average)的做法了(具體查閱機器學習)
在這之前,我想肯定會有人想把每個類別的ROC的都繪製出來,實現起來,無非就是獲得每個單類的標籤值和模型預測值資料
不過你怎麼解釋呢?有什麼意義呢?其實這個問題我也想了很久,查閱了很多文獻,也沒有個所以然。
PS:(如果有人知道,麻煩告知下~)
具體如下
import numpy as np import matplotlib.pyplot as plt from scipy import interp from sklearn.preprocessing import label_binarize from sklearn.metrics import confusion_matrix,classification_report from sklearn.metrics import roc_curve, auc from sklearn.metrics import cohen_kappa_score, accuracy_score
fpr0, tpr0, thresholds0 = roc_curve(y_true0,y_sore0) fpr1, tpr1, thresholds1 = roc_curve(y_true1,y_sore1) fpr2, tpr2, thresholds2 = roc_curve(y_true2,y_sore2) fpr3, tpr3, thresholds3 = roc_curve(y_true3,y_sore3) fpr4, tpr4, thresholds4 = roc_curve(y_true4,y_sore4) roc_auc0 = auc(fpr0, tpr0) roc_auc1 = auc(fpr1, tpr1) roc_auc2 = auc(fpr2, tpr2) roc_auc3 = auc(fpr3, tpr3) roc_auc4 = auc(fpr4, tpr4) plt.title('Receiver Operating Characteristic') plt.rcParams['figure.figsize'] = (10.0, 10.0) plt.rcParams['image.interpolation'] = 'nearest' plt.rcParams['image.cmap'] = 'gray' plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False # 設定標題大小 plt.rcParams['font.size'] = '16' plt.plot(fpr0, tpr0, 'k-',color='k',linestyle='-.',linewidth=3,markerfacecolor='none',label=u'AA_AUC = %0.5f'% roc_auc0) plt.plot(fpr1, tpr1, 'k-',color='grey',linestyle='-.',linewidth=3,label=u'A_AUC = %0.5f'% roc_auc1) plt.plot(fpr2, tpr2, 'k-',color='r',linestyle='-.',linewidth=3,markerfacecolor='none',label=u'B_AUC = %0.5f'% roc_auc2) plt.plot(fpr3, tpr3, 'k-',color='red',linestyle='-.',linewidth=3,markerfacecolor='none',label=u'C_AUC = %0.5f'% roc_auc3) plt.plot(fpr4, tpr4, 'k-',color='y',linestyle='-.',linewidth=3,markerfacecolor='none',label=u'D_AUC = %0.5f'% roc_auc4) plt.legend(loc='lower right') plt.plot([0,1],[0,1],'r--') plt.xlim([-0.1,1.1]) plt.ylim([-0.1,1.1]) plt.ylabel('True Positive Rate') plt.xlabel('False Positive Rate') plt.grid(linestyle='-.') plt.grid(True) plt.show()
在上面的基礎上,我們將標籤二值化
(如果你不使用二分類思想去畫ROC曲線,大概率會出現報錯:ValueError: multilabel-indicator format is not supported)
y_test_all = label_binarize(true_labels_i, classes=[0,1,2,3,4]) y_score_all=test_Y_i_hat fpr = dict() tpr = dict() roc_auc = dict() for i in range(len(classes)): fpr[i], tpr[i], thresholds = roc_curve(y_test_all[:, i],y_score_all[:, i]) roc_auc[i] = auc(fpr[i], tpr[i])
注意看,宏觀平均(macro-average)和微觀平均(micro-average)的處理方式
(y_test_all(真實標籤值)和y_score_all(與真實標籤值維度匹配,如果十個類就對應十個值,↓行代表資料序號,列代表每個類別的預測值)
# micro-average ROC curve(方法一) fpr["micro"], tpr["micro"], thresholds = roc_curve(y_test_all.ravel(),y_score_all.ravel()) roc_auc["micro"] = auc(fpr["micro"], tpr["micro"]) # macro-average ROC curve 方法二) all_fpr = np.unique(np.concatenate([fpr[i] for i in range(len(classes))])) mean_tpr = np.zeros_like(all_fpr) for i in range(len(classes)): mean_tpr += interp(all_fpr, fpr[i], tpr[i]) # 求平均計算ROC包圍的面積AUC mean_tpr /= len(classes) fpr["macro"] = all_fpr tpr["macro"] = mean_tpr roc_auc["macro"] = auc(fpr["macro"], tpr["macro"]) #畫圖部分 plt.figure() plt.plot(fpr["micro"], tpr["micro"],'k-',color='y', label='XXXX ROC curve micro-average(AUC = {0:0.4f})' ''.format(roc_auc["micro"]), linestyle='-.', linewidth=3) plt.plot(fpr["macro"], tpr["macro"],'k-',color='k', label='XXXX ROC curve macro-average(AUC = {0:0.4f})' ''.format(roc_auc["macro"]), linestyle='-.', linewidth=3) plt.plot([0,1],[0,1],'r--') plt.xlim([-0.1,1.1]) plt.ylim([-0.1,1.1]) plt.ylabel('True Positive Rate') plt.xlabel('False Positive Rate') plt.legend(loc="lower right") plt.grid(linestyle='-.') plt.grid(True) plt.show()
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45