python 怎么调用 矩阵 第几行_第58集 python机器学习:混淆矩阵精度指标
混淆矩陣的精度計(jì)算公式為:精度=(TP+TN)/(TP+TN+FP+FN),也就是說(shuō),精度就是指正確的預(yù)測(cè)數(shù)目除以所有樣本的數(shù)量。
準(zhǔn)確率、召回率與f-分?jǐn)?shù):總結(jié)混淆矩陣還有幾種方法,其中最常見(jiàn)的就是準(zhǔn)確率和召回率。準(zhǔn)確率度量的是被預(yù)測(cè)為正例的樣本有多少是整整的樣例。即:準(zhǔn)確率=TP/(TP+FP)。如果目標(biāo)是限制假正例的數(shù)量,那么可以使用準(zhǔn)確率作為性能目標(biāo)。
召回率:召回率(recalll)度量的是正類(lèi)樣本中有多少被預(yù)測(cè)為正類(lèi),即:召回率=TP/(TP+FN),如果我們需要找出所有的正類(lèi)樣本,即避免反例是很重要的情況下,那么可以使用召回率作為性能指標(biāo)。
在優(yōu)化召回率與優(yōu)化準(zhǔn)確率之間需要折中,如果你預(yù)測(cè)所有樣本都屬于正類(lèi),那么可以輕松得到完美的召回率(沒(méi)有假反例、也沒(méi)有真反例)。但是,將所有樣本都預(yù)測(cè)為正類(lèi),將會(huì)得得很多假正例,因此準(zhǔn)確率會(huì)很低。與之相反,如果你的模型只講一個(gè)最確定的數(shù)據(jù)點(diǎn)預(yù)測(cè)為正類(lèi),其他點(diǎn)都預(yù)測(cè)為反類(lèi),那么準(zhǔn)確率將會(huì)很完美(假設(shè)這個(gè)數(shù)據(jù)點(diǎn)上實(shí)際上就屬于正類(lèi)),但是召回率會(huì)很差。(當(dāng)然,準(zhǔn)確率和召回率只是度量混淆矩陣情況中兩個(gè)量,其他的可以根據(jù)實(shí)際情況取對(duì)應(yīng)的參數(shù))。
f-分?jǐn)?shù):雖然準(zhǔn)確率和召回率是非常重要的度量,三式僅查看二者之一無(wú)法提供完美的途徑,所以還有一種將兩種方法匯總的方法——f-分?jǐn)?shù)。它是準(zhǔn)確率與召回率的調(diào)和平均,即:F=2*(準(zhǔn)確率*召回率)/(準(zhǔn)確率+召回率)。
由于f-分?jǐn)?shù)同時(shí)考慮了準(zhǔn)確率和召回率,所以它對(duì)于不平衡的二分類(lèi)數(shù)據(jù)集來(lái)說(shuō)是一種比精度更好的度量方式。我們對(duì)前面提到過(guò)的“9與其余”的數(shù)據(jù)集的預(yù)測(cè)結(jié)果計(jì)算f1-分?jǐn)?shù)(我們這里假設(shè)“9”是正類(lèi),標(biāo)記為T(mén)rue,其他樣本為False):
from sklearn.metrics import f1_score
print("F1 score most frequent: {:.2f}".format(f1_score(y_test, pred_most_frequent)))
print("F1 score dummy: {:.2f}".format(f1_score(y_test, pred_dummy)))
print("F1 score logreg: {:.2f}".format(f1_score(y_test, pred_logreg)))
print("F1 score of Tree: {:.2f}".format(f1_score(y_test, pred_tree)))
運(yùn)行后其結(jié)果如下:
F1 score most frequent: 0.00
F1 score dummy: 0.13
F1 score logreg: 0.89
F1 score of Tree: 0.55
由運(yùn)行結(jié)果可以看出:most_frequency的預(yù)測(cè)中得到的是一條錯(cuò)誤信息;另外需要注意的是,虛擬預(yù)測(cè)和決策樹(shù)預(yù)測(cè)之間還是有差別的,盡管精度差別不大,但是f-分?jǐn)?shù)卻相差很大。在這里,f-分?jǐn)?shù)更加符合我們對(duì)模型的直覺(jué)。f-分?jǐn)?shù)的缺點(diǎn)則是比精度更加難以解釋。
如果我們要對(duì)準(zhǔn)確率、召回率和f1-分?jǐn)?shù)做一個(gè)更加全面的總結(jié),則可以使用classification_report這個(gè)函數(shù),它可以同時(shí)計(jì)算這三個(gè)值,并以美觀的形式打印出來(lái)。
from sklearn.metrics import classification_report
print("Most frequency class precious:")
print(classification_report(y_test, pred_most_frequent, target_names=["not Nine", "Nine"]))
print("Dummy model precious:")
print(classification_report(y_test, pred_dummy, target_names=["not Nine", "Nine"]))
print("Decision tree precious:")
print(classification_report(y_test, pred_tree, target_names=["not Nine", "Nine"]))
print("logistic regression precious")
print(classification_report(y_test, pred_logreg, target_names=["not Nine", "Nine"]))
運(yùn)行結(jié)果如下圖:
classification_report 屬性打印
classification_report函數(shù)為每個(gè)類(lèi)別(這里是True和False)生成一行,并給出以該類(lèi)并為正類(lèi)的準(zhǔn)確率、召回率及f-分?jǐn)?shù)。這里的最后一列support(支持)表示的是在這個(gè)類(lèi)別中真實(shí)樣本的數(shù)量;最后一行顯示的是對(duì)應(yīng)指標(biāo)的加權(quán)平均(按每個(gè)類(lèi)別中的樣本個(gè)數(shù)加權(quán))。
同時(shí),我們從運(yùn)行結(jié)果中還可以看出,虛擬模型與logreg之間的區(qū)別并不是很明顯,選擇哪個(gè)類(lèi)作為正類(lèi)對(duì)指標(biāo)有很大影響。在這里選擇Nine作為正類(lèi)時(shí)logisticregression比其他方法更具備優(yōu)勢(shì)。
總結(jié)
以上是生活随笔為你收集整理的python 怎么调用 矩阵 第几行_第58集 python机器学习:混淆矩阵精度指标的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: u盘怎么取消管理员权限 u盘取消管理员权
- 下一篇: win10开始程序启动不了怎么回事 Wi