Python機(jī)器學(xué)習(xí)性能度量利用鳶尾花數(shù)據(jù)繪制P-R曲線
一、性能度量
性能度量目的是對(duì)學(xué)習(xí)期的泛華能力進(jìn)行評(píng)估,性能度量反映了任務(wù)需求,在對(duì)比不同算法的泛華能力時(shí),使用不同的性能度量往往會(huì)導(dǎo)致不同的評(píng)判結(jié)果。常用度量有均方誤差,錯(cuò)誤率與精度,查準(zhǔn)率與查全率等。
1.錯(cuò)誤率與精度
這兩種度量既適用于二分類任務(wù),也適用于多分類任務(wù)。錯(cuò)誤率是分類錯(cuò)誤的樣本數(shù)占樣本總數(shù)的比例,精度則是分類正確的樣本數(shù)占樣本總數(shù)的比例。
2.查準(zhǔn)率、查全率與F1
查準(zhǔn)率(precision)與查全率(recall)是對(duì)于需求在信息檢索、Web搜索等應(yīng)用評(píng)估性能度量適應(yīng)度高的檢測(cè)數(shù)值。對(duì)于二分類問(wèn)題,可將真實(shí)類別與算法預(yù)測(cè)類別的組合劃分為真正例(ture positive)、假證例(false positive)、真反例(true negative)、假反例(false negative)四種情形。顯然TP+FP+TN+FN=樣例總數(shù)。分類結(jié)果為混淆矩陣:
真實(shí)情況 預(yù)測(cè)結(jié)果 正例 反例 正例 TP(真正例) FN(假反例) 反例 FP(假正例) TN(真反例)
查準(zhǔn)率P定義為:
一般來(lái)說(shuō)。查準(zhǔn)率高時(shí),查全率往往偏低;而查全率高時(shí),查準(zhǔn)率往往偏低。通常只有一些簡(jiǎn)單任務(wù)中,才可能使查全率和查準(zhǔn)率都很高。
二、代碼實(shí)現(xiàn):
1.基于具體二分類問(wèn)題算法實(shí)現(xiàn)代碼:
import numpy import matplotlib from matplotlib import pyplot as plt # true = [真實(shí)組1,真實(shí)組2...真實(shí)組N],predict = [預(yù)測(cè)組1,預(yù)測(cè)組2...預(yù)測(cè)組N] def evaluation(true, predict): num = len(true) # 確定有幾組 (TP, FP, FN, TN) = ([0] * num for i in range(4)) # 賦初值 for m in range(0, len(true)): if (len(true[m]) != len(predict[m])): # 樣本數(shù)都不等,顯然是有錯(cuò)誤的 print("真實(shí)結(jié)果與預(yù)測(cè)結(jié)果樣本數(shù)不一致。") else: for i in range(0, len(true[m])): # 對(duì)每一組數(shù)據(jù)分別計(jì)數(shù) if (predict[m][i] == 1) and ((true[m][i] == 1)): TP[m] += 1.0 elif (predict[m][i] == 1) and ((true[m][i] == 0)): FP[m] += 1.0 elif (predict[m][i] == 0) and ((true[m][i] == 1)): FN[m] += 1.0 elif (predict[m][i] == 0) and ((true[m][i] == 0)): TN[m] += 1.0 (P, R) = ([0] * num for i in range(2)) for m in range(0, num): if (TP[m] + FP[m] == 0): P[m] = 0 # 預(yù)防一些分母為0的情況 else: P[m] = TP[m] / (TP[m] + FP[m]) if (TP[m] + FN[m] == 0): R[m] = 0 # 預(yù)防一些分母為0的情況 else: R[m] = TP[m] / (TP[m] + FN[m]) plt.title("P-R") plt.xlabel("P") plt.ylabel("R") #plt.plot(P, R) #plt.show() if __name__ == "__main__": # 簡(jiǎn)單舉例 myarray_ture = numpy.random.randint(0, 2, (3, 100)) myarray_predict = numpy.random.randint(0, 2, (3, 100)) evaluation(myarray_ture,myarray_predict)
下面給出利用鳶尾花數(shù)據(jù)集繪制P-R曲線的代碼(主要體現(xiàn)其微互斥性)
2.利用鳶尾花繪制P-R曲線
from sklearn import svm, datasets from sklearn.model_selection import train_test_split import numpy as np 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ù)組 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 < 2], y[y < 2], test_size=0.25, random_state=0) #根據(jù)此模型訓(xùn)練簡(jiǎn)單數(shù)據(jù)分類器 classifier = svm.LinearSVC(random_state=0)#線性分類支持向量機(jī) classifier.fit(x_train, y_train) y_score = classifier.decision_function(x_test) from sklearn.metrics import precision_recall_curve import matplotlib.pyplot as plt precision, recall, _ =precision_recall_curve(y_test, y_score) plt.fill_between(recall, precision,color='b') plt.xlabel('Recall') plt.ylabel('Precision') plt.ylim([0.0, 1.0]) plt.xlim([0.0, 1.0]) plt.plot(recall, precision) plt.title("Precision-Recall") plt.show()
效果:
P-R圖直觀的顯示出學(xué)習(xí)器在樣本上的查全率、查準(zhǔn)率。在進(jìn)行比較時(shí),若一個(gè)休息區(qū)的P-R曲線被另一個(gè)學(xué)習(xí)器的曲線完全“包住”,則可斷言后者的性能優(yōu)于前者。為取得比較合理的判斷依據(jù),將采用“平衡點(diǎn)”(Break-Even Point,BEP)度量對(duì)比算法的泛華性能強(qiáng)弱。它是“查準(zhǔn)率=查全率”時(shí)的取值。但BEP還是過(guò)于簡(jiǎn)化,更常用F1度量(all為樣例總數(shù)):
以上就是Python機(jī)器學(xué)習(xí)性能度量利用鳶尾花數(shù)據(jù)繪制P-R曲線的詳細(xì)內(nèi)容,更多關(guān)于Python鳶尾花數(shù)據(jù)繪制P-R曲線的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python梯度提升庫(kù)XGBoost解決機(jī)器學(xué)習(xí)問(wèn)題使用探究
- 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ù)繪制ROC和AUC曲線
- 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)文章
python+selenium 定位到元素,無(wú)法點(diǎn)擊的解決方法
今天小編就為大家分享一篇python+selenium 定位到元素,無(wú)法點(diǎn)擊的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01pandas數(shù)據(jù)分列實(shí)現(xiàn)分割符號(hào)&固定寬度
數(shù)據(jù)分列在數(shù)據(jù)處理中很常見,數(shù)據(jù)分列一般指的都是字符串分割,本文主要介紹了pandas數(shù)據(jù)分列實(shí)現(xiàn)分割符號(hào)&固定寬度,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04解決tensorflow測(cè)試模型時(shí)NotFoundError錯(cuò)誤的問(wèn)題
今天小編就為大家分享一篇解決tensorflow測(cè)試模型時(shí)NotFoundError錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07python3中利用filter函數(shù)輸出小于某個(gè)數(shù)的所有回文數(shù)實(shí)例
今天小編就為大家分享一篇 python3中利用filter函數(shù)輸出小于某個(gè)數(shù)的所有回文數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11Python+Selenium實(shí)現(xiàn)一鍵摸魚&采集數(shù)據(jù)
將Selenium程序編寫為 .bat 可執(zhí)行文件,從此一鍵啟動(dòng)封裝好的Selenium程序,省時(shí)省力還可以復(fù)用,豈不美哉。所以本文將利用Selenium實(shí)現(xiàn)一鍵摸魚&一鍵采集數(shù)據(jù),需要的可以參考一下2022-08-08Python在不同目錄下導(dǎo)入模塊的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇Python在不同目錄下導(dǎo)入模塊的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10