最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)二分類和多分類的ROC曲線教程

 更新時間:2020年06月15日 14:36:30   作者:Hinton-wu  
這篇文章主要介紹了python實(shí)現(xiàn)二分類和多分類的ROC曲線教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

基本概念

precision:預(yù)測為對的當(dāng)中,原本為對的比例(越大越好,1為理想狀態(tài))

recall:原本為對的當(dāng)中,預(yù)測為對的比例(越大越好,1為理想狀態(tài))

F-measure:F度量是對準(zhǔn)確率和召回率做一個權(quán)衡(越大越好,1為理想狀態(tài),此時precision為1,recall為1)

accuracy:預(yù)測對的(包括原本是對預(yù)測為對,原本是錯的預(yù)測為錯兩種情形)占整個的比例(越大越好,1為理想狀態(tài))

fp rate:原本是錯的預(yù)測為對的比例(越小越好,0為理想狀態(tài))

tp rate:原本是對的預(yù)測為對的比例(越大越好,1為理想狀態(tài))

ROC曲線通常在Y軸上具有真陽性率,在X軸上具有假陽性率。這意味著圖的左上角是“理想”點(diǎn) - 誤報(bào)率為零,真正的正率為1。這不太現(xiàn)實(shí),但它確實(shí)意味著曲線下面積(AUC)通常更好。

二分類問題:ROC曲線

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import time
start_time = time.time()
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import recall_score,accuracy_score
from sklearn.metrics import precision_score,f1_score
from keras.optimizers import Adam,SGD,sgd
from keras.models import load_model

print('讀取數(shù)據(jù)')
X_train = np.load('x_train-rotate_2.npy')
Y_train = np.load('y_train-rotate_2.npy')
print(X_train.shape)
print(Y_train.shape)

print('獲取測試數(shù)據(jù)和驗(yàn)證數(shù)據(jù)')
X_train, X_valid, Y_train, Y_valid = train_test_split(X_train, Y_train, test_size=0.1, random_state=666)

Y_train = np.asarray(Y_train,np.uint8)
Y_valid = np.asarray(Y_valid,np.uint8)
X_valid = np.array(X_valid, np.float32) / 255.

print('獲取模型')
model = load_model('./model/InceptionV3_model.h5')
opt = Adam(lr=1e-4)
model.compile(optimizer=opt, loss='binary_crossentropy')

print("Predicting")
Y_pred = model.predict(X_valid)
Y_pred = [np.argmax(y) for y in Y_pred] # 取出y中元素最大值所對應(yīng)的索引
Y_valid = [np.argmax(y) for y in Y_valid]

# micro:多分類  
# weighted:不均衡數(shù)量的類來說,計(jì)算二分類metrics的平均
# macro:計(jì)算二分類metrics的均值,為每個類給出相同權(quán)重的分值。
precision = precision_score(Y_valid, Y_pred, average='weighted')
recall = recall_score(Y_valid, Y_pred, average='weighted')
f1_score = f1_score(Y_valid, Y_pred, average='weighted')
accuracy_score = accuracy_score(Y_valid, Y_pred)
print("Precision_score:",precision)
print("Recall_score:",recall)
print("F1_score:",f1_score)
print("Accuracy_score:",accuracy_score)

# 二分類?。遥希们€
# roc_curve:真正率(True Positive Rate , TPR)或靈敏度(sensitivity)
# 橫坐標(biāo):假正率(False Positive Rate , FPR)
fpr, tpr, thresholds_keras = roc_curve(Y_valid, Y_pred)
auc = auc(fpr, tpr)
print("AUC : ", auc)
plt.figure()
plt.plot([0, 1], [0, 1], 'k--')
plt.plot(fpr, tpr, label='Keras (area = {:.3f})'.format(auc))
plt.xlabel('False positive rate')
plt.ylabel('True positive rate')
plt.title('ROC curve')
plt.legend(loc='best')
plt.savefig("../images/ROC/ROC_2分類.png")
plt.show()

print("--- %s seconds ---" % (time.time() - start_time))

ROC圖如下所示:

多分類問題:ROC曲線

ROC曲線通常用于二分類以研究分類器的輸出。為了將ROC曲線和ROC區(qū)域擴(kuò)展到多類或多標(biāo)簽分類,有必要對輸出進(jìn)行二值化。⑴可以每個標(biāo)簽繪制一條ROC曲線。⑵也可以通過將標(biāo)簽指示符矩陣的每個元素視為二元預(yù)測(微平均)來繪制ROC曲線。⑶另一種用于多類別分類的評估方法是宏觀平均,它對每個標(biāo)簽的分類給予相同的權(quán)重。

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import time
start_time = time.time()
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import recall_score,accuracy_score
from sklearn.metrics import precision_score,f1_score
from keras.optimizers import Adam,SGD,sgd
from keras.models import load_model
from itertools import cycle
from scipy import interp
from sklearn.preprocessing import label_binarize

nb_classes = 5
print('讀取數(shù)據(jù)')
X_train = np.load('x_train-resized_5.npy')
Y_train = np.load('y_train-resized_5.npy')
print(X_train.shape)
print(Y_train.shape)

print('獲取測試數(shù)據(jù)和驗(yàn)證數(shù)據(jù)')
X_train, X_valid, Y_train, Y_valid = train_test_split(X_train, Y_train, test_size=0.1, random_state=666)

Y_train = np.asarray(Y_train,np.uint8)
Y_valid = np.asarray(Y_valid,np.uint8)
X_valid = np.asarray(X_valid, np.float32) / 255.

print('獲取模型')
model = load_model('./model/SE-InceptionV3_model.h5')
opt = Adam(lr=1e-4)
model.compile(optimizer=opt, loss='categorical_crossentropy')

print("Predicting")
Y_pred = model.predict(X_valid)
Y_pred = [np.argmax(y) for y in Y_pred] # 取出y中元素最大值所對應(yīng)的索引
Y_valid = [np.argmax(y) for y in Y_valid]

# Binarize the output
Y_valid = label_binarize(Y_valid, classes=[i for i in range(nb_classes)])
Y_pred = label_binarize(Y_pred, classes=[i for i in range(nb_classes)])

# micro:多分類  
# weighted:不均衡數(shù)量的類來說,計(jì)算二分類metrics的平均
# macro:計(jì)算二分類metrics的均值,為每個類給出相同權(quán)重的分值。
precision = precision_score(Y_valid, Y_pred, average='micro')
recall = recall_score(Y_valid, Y_pred, average='micro')
f1_score = f1_score(Y_valid, Y_pred, average='micro')
accuracy_score = accuracy_score(Y_valid, Y_pred)
print("Precision_score:",precision)
print("Recall_score:",recall)
print("F1_score:",f1_score)
print("Accuracy_score:",accuracy_score)

# roc_curve:真正率(True Positive Rate , TPR)或靈敏度(sensitivity)
# 橫坐標(biāo):假正率(False Positive Rate , FPR)

# Compute ROC curve and ROC area for each class
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range(nb_classes):
 fpr[i], tpr[i], _ = roc_curve(Y_valid[:, i], Y_pred[:, i])
 roc_auc[i] = auc(fpr[i], tpr[i])

# Compute micro-average ROC curve and ROC area
fpr["micro"], tpr["micro"], _ = roc_curve(Y_valid.ravel(), Y_pred.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])

# Compute macro-average ROC curve and ROC area

# First aggregate all false positive rates
all_fpr = np.unique(np.concatenate([fpr[i] for i in range(nb_classes)]))

# Then interpolate all ROC curves at this points
mean_tpr = np.zeros_like(all_fpr)
for i in range(nb_classes):
 mean_tpr += interp(all_fpr, fpr[i], tpr[i])

# Finally average it and compute AUC
mean_tpr /= nb_classes

fpr["macro"] = all_fpr
tpr["macro"] = mean_tpr
roc_auc["macro"] = auc(fpr["macro"], tpr["macro"])

# Plot all ROC curves
lw = 2
plt.figure()
plt.plot(fpr["micro"], tpr["micro"],
  label='micro-average ROC curve (area = {0:0.2f})'
  ''.format(roc_auc["micro"]),
  color='deeppink', linestyle=':', linewidth=4)

plt.plot(fpr["macro"], tpr["macro"],
  label='macro-average ROC curve (area = {0:0.2f})'
  ''.format(roc_auc["macro"]),
  color='navy', linestyle=':', linewidth=4)

colors = cycle(['aqua', 'darkorange', 'cornflowerblue'])
for i, color in zip(range(nb_classes), colors):
 plt.plot(fpr[i], tpr[i], color=color, lw=lw,
  label='ROC curve of class {0} (area = {1:0.2f})'
  ''.format(i, roc_auc[i]))

plt.plot([0, 1], [0, 1], 'k--', lw=lw)
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Some extension of Receiver operating characteristic to multi-class')
plt.legend(loc="lower right")
plt.savefig("../images/ROC/ROC_5分類.png")
plt.show()

print("--- %s seconds ---" % (time.time() - start_time))

ROC圖如下所示:

以上這篇python實(shí)現(xiàn)二分類和多分類的ROC曲線教程就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 六個竅門助你提高Python運(yùn)行效率

    六個竅門助你提高Python運(yùn)行效率

    這篇文章主要介紹了六個竅門助你提高Python運(yùn)行效率,本文講解了關(guān)鍵代碼使用外部功能包、在排序時使用鍵、針對循環(huán)的優(yōu)化、使用較新的Python版本等優(yōu)化竅門,需要的朋友可以參考下
    2015-06-06
  • Pygame實(shí)戰(zhàn)之迷宮游戲的實(shí)現(xiàn)

    Pygame實(shí)戰(zhàn)之迷宮游戲的實(shí)現(xiàn)

    玩迷宮游戲長大的我們,欣慰地看到,下一代仍熱愛著這個經(jīng)典游戲。本文將通過Python中的Pygame庫制作這一經(jīng)典的游戲,需要的可以參考一下
    2022-02-02
  • Matplotlib繪圖基礎(chǔ)之樣式表詳解

    Matplotlib繪圖基礎(chǔ)之樣式表詳解

    Matplotlib庫?由于誕生的比較早,所以其默認(rèn)的顯示樣式很難符合現(xiàn)在的審美,不過經(jīng)過版本更迭之后,現(xiàn)在?Matplotlib?已經(jīng)內(nèi)置了很多樣式表,下面我們就來看看這些樣式表的使用吧
    2023-08-08
  • opencv+python實(shí)現(xiàn)圖像矯正

    opencv+python實(shí)現(xiàn)圖像矯正

    這篇文章主要為大家詳細(xì)介紹了opencv+python實(shí)現(xiàn)圖像矯正,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Python全局變量global關(guān)鍵字詳解

    Python全局變量global關(guān)鍵字詳解

    這篇文章主要介紹了Python全局變量global關(guān)鍵字詳解,需要的朋友可以參考下
    2021-04-04
  • Python實(shí)現(xiàn)刪除排序數(shù)組中重復(fù)項(xiàng)的兩種方法示例

    Python實(shí)現(xiàn)刪除排序數(shù)組中重復(fù)項(xiàng)的兩種方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)刪除排序數(shù)組中重復(fù)項(xiàng)的兩種方法,涉及Python數(shù)組元素的遍歷、判斷、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • Fiddler如何抓取手機(jī)APP數(shù)據(jù)包

    Fiddler如何抓取手機(jī)APP數(shù)據(jù)包

    Fiddler,這個是所有軟件開發(fā)者必備神器!這款工具不僅可以抓取PC上開發(fā)web時候的數(shù)據(jù)包,而且可以抓取移動端,通過本文給大家介紹Fiddler如何抓取手機(jī)APP數(shù)據(jù)包,感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • keras的backend 設(shè)置 tensorflow,theano操作

    keras的backend 設(shè)置 tensorflow,theano操作

    這篇文章主要介紹了keras的backend 設(shè)置 tensorflow,theano操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 詳解Python 爬取13個旅游城市,告訴你五一大家最愛去哪玩?

    詳解Python 爬取13個旅游城市,告訴你五一大家最愛去哪玩?

    這篇文章主要介紹了Python 爬取13個旅游城市,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python hasattr函數(shù)的具體使用

    Python hasattr函數(shù)的具體使用

    本文主要介紹了Python hasattr函數(shù)的具體使用,包括基本用法、返回值、應(yīng)用場景,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02

最新評論

大同县| 班玛县| 嘉荫县| 亚东县| 仙桃市| 博白县| 拜城县| 靖州| 密山市| 南昌市| 呼图壁县| 德兴市| 会东县| 琼结县| 盐池县| 吕梁市| 延庆县| 永宁县| 西昌市| 汕头市| 万载县| 商河县| 济阳县| 金秀| 佛冈县| 宜城市| 方山县| 宜良县| 增城市| 读书| 大方县| 岳阳市| 左云县| 垫江县| 台州市| 大荔县| 禹城市| 新宾| 河池市| 额济纳旗| 泸水县|