AI算法模型師之四件評估“法器”

導語

在AI領域,針對機器學習、自然語言處理等算法模型的評估(evaluation)是一項非常重要的工作,在海量數據中,爲使算法模型趨向更準確,需要藉助評估方法對算法模型進行評估,然後才能對模型進行針對性的優化、提升算法效率。

本文小編介紹四種評估方法,它們就像法師(數據科學家)使用的法器一樣,有着對算法模型評判的奇妙法力,同時能產生算法模型的評估打分結果,爲後續算法模型的優化提供依據。這四大法器分別是:準確率(Accuracy)、精確率(Precision)、召回率(Recall)和綜合評價指標(F1-Measure)。要當好一個合格的算法師,我們需要熟練掌握這些法器,下面我們逐一摩挲一下它們。

 

 

評估法器一:百發百中箭——準確率評估

古時射箭技藝高超的射手一般都被稱爲“神射手”,“神射手”射出的箭能夠“百步穿楊”、中靶率基本是百發百中,這個就是準確率的概念。而在機器學習中,對於算法模型預測的準確率,也是看其能夠百發幾中的概率。本文介紹的第一個評估法器就是:Accuracy,即準確率評估,它是對模型預測的正確數量所佔總預測數量的比例進行評估的一項指標。

新冠疫情爆發期,對病患的核算檢測進行確診是一項重要工作,我們可以用大數據AI算法進行新冠肺炎感染病患的進行預測。在預測中,可以使用準確率公式來表達新冠肺炎預測是否感染的正確及錯誤:

其中:TP=預測新冠確診病人數,並判斷正確;TN=預測健康人數,並判斷正確;FP=預測新冠確診病人數,但判斷錯誤;FN=預測健康人數,但判斷錯誤。

我們可以舉例,假設對20人進行新冠肺炎的確診情況進行預測,該數據實際情況和使用二元分類算法模型(即判斷要麼確診新冠、要麼爲健康)預測如下:

以上,黃色——TP=2,預測與實際都爲新冠感染患者人數(預測正確)

藍色——TN=14,預測與實際都爲健康人數(預測正確)

紅色——FP=1,預測爲新冠感染患者,實際是健康的人數(預測錯誤)

白色——FN=3,預測爲健康人員,實際是新冠感染患者人數(預測錯誤)

針對上述數據集進行預測的模型準確率,計算如下:

 

從該計算結果來看,預測的結果表現是還算可以的,分類準確率達到80%。那麼是不是我們選用的算法模型就是比較出色的模型呢?

我們可以仔細分析一下數據情況,深入理解一下模型預測的效果:

20人中,15人健康,剩餘5人感染了新冠肺炎,模型預測健康的人數14人,比率高達93.3%,效果不錯;但是感染了新冠的實際總人數爲5,錯誤的預測其中3人爲健康,比率達到了3/5=60%,說明從這個角度預測準確率纔有40%,錯誤率較高,模型實際上是達不到預測的精確要求的。

這樣,對模型的評估只使用這個準確率評估法器肯定是還不夠的,算法師還需要祭出後面要說的新法器——精確率、召回率評估法器。

 

 

評估法器二:諸葛神機弩——精確率評估

對於上述進行新冠肺炎患者預測的數據集,其分類是不太平衡的,即確診人員和健康人員的分佈比較不均衡,數量差異較大。算法師如果只使用一項準確率法器來判斷模型是否有效並不合理。

在三國戰爭中,爲了成批地精確打擊敵人,諸葛亮發明了諸葛神機弩,其命中率高、打擊面大,是讓敵人聞風喪膽的戰爭利器,使用精確率(Precision)法器來評估模型,也可以比喻爲算法師的諸葛神機弩。

精確率(也稱查準率)的公式是:

其中:TP=預測新冠確診病人數,並判斷正確;FP=預測的新冠確診病人數,但判斷錯誤。

我們還是採用前面的數據集來對精確率進行評估,計算如下:

 

即模型在對上述數據集預測出新冠肺炎感染者的精確率是66.67%。

 

 

評估法器三:回頭望月斬——召回率評估

算法師除了以上描述的法器,還可以使用一個妙技:回頭望月斬——進行召回率評估。回頭望月斬通常會在武功對決裏出現,一般指一個招式用老的瞬間,在敵人背後出其不意地回頭使出一招,打擊敵人。在這裏,我們可以形容分類算法模型對所有錯誤和正確的預測中預測正確的比例(也可以理解爲對模型錯誤預測的回顧和評估),通俗也可以稱爲“查全率”。

召回率的公式是:

其中:TP=預測新冠確診病人數,並判斷正確;FN=預測爲健康、但實際爲新冠感染者人數。

我們還是採用前面的數據集來對召回率進行評估,計算如下:

 

即對上述數據集,模型能正確預測出所有新冠肺炎感染者的比率只有40%。

因此,算法師要達到全面評估模型的有效性,必須同時檢查精確率和召回率,但是兩者的提升是有矛盾的,提高模型的精確率就會降低其召回率,反之亦然。因此算法師還需要利用一個更高端的評估法器來進行綜合評估——F1綜合評估法。

 

 

評估法器四:精準組合拳——F1綜合評估

國家在調控宏觀經濟時,經常採用一系列調控組合拳。武功高手通常打出一套讓人應接不暇的組合拳,虛中有實、實中有虛,會讓對手無法接招並取勝。算法師在評估模型時,也可以採用類似的評估組合,本文推薦一個常用的綜合評估法器:F1綜合評估法(F1-Measure),又稱F1-Score,是精確率(實招)和召回率(虛招)的加權調和平均,算是模型評估的一套精準組合拳,也可以比喻爲一個組合了前兩種評估法器的大法器。

F1綜合評估法的公式爲:

其中,P爲精確率(Precision), R爲召回率(Recall)。

(注:F1綜合評估是統計學中F-Measure在權重參數=1時的一個特例,即精確率與召回率權重一致,本文限於篇幅,只對評估常用的F1評估進行描述。)

繼續利用上述的數據集,根據前面計算出的精確率和召回率,便可得出其F1值如下:

 

結果是0.5,在模型評估中,當這個值較高時,說明算法模型的效果比較理想,目前看來這個分值反映出模型效果比較一般。

 

 

評估法器四:綜合實戰

 

爲了讓讀者更好地理解四件法器的功效,我們仍然使用上述的預測新冠感染者的數據集,通過python實戰演練一下。

1、準備數據集

#基於numpy實現模型評估,加載numpy

importnumpy as np

#設Corondata_real是實際的數據集,數值爲1代表新冠感染者,數值爲0代表健康人員

Corondata_real= np.array([0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1])

print('實際數據集:{}'.format(Corondata_real))

#設Corondata_pred是預測結果數據,數值爲1預測新冠感染者,數值爲0代表預測健康人員

Corondata_pred= np.array([0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0])

print('預測結果數據集:{}'.format(Corondata_pred))

輸出結果爲:

實際數據集:[01 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 1]

預測結果數據集:[01 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0]

2、計算TP、FP、TN、FN

#預測與實際都爲新冠感染患者人數(預測正確),truepositive

TP=np.sum(np.logical_and(np.equal(Corondata_real,1),np.equal(Corondata_pred,1)))

print('預測與實際都爲新冠感染患者人數(預測正確):{}'.format(TP))

#預測與實際都爲健康人數(預測正確),falsepositive

FP=np.sum(np.logical_and(np.equal(Corondata_real,0),np.equal(Corondata_pred,1)))

print('預測與實際都爲健康人數(預測正確):{}'.format(FP))

#預測爲新冠感染患者,實際是健康的人數(預測錯誤),truenegative

TN=np.sum(np.logical_and(np.equal(Corondata_real,1),np.equal(Corondata_pred,0)))

print('預測爲新冠感染患者,實際是健康的人數(預測錯誤):{}'.format(TN))

#預測爲健康人員,實際是新冠感染患者人數(預測錯誤),falsenegative

FN=np.sum(np.logical_and(np.equal(Corondata_real,0),np.equal(Corondata_pred,0)))

print('預測爲健康人員,實際是新冠感染患者人數(預測錯誤):{}'.format(FN))

輸出結果爲:

預測與實際都爲新冠感染患者人數(預測正確):2

預測與實際都爲健康人數(預測正確):1

預測爲新冠感染患者,實際是健康的人數(預測錯誤):3

預測爲健康人員,實際是新冠感染患者人數(預測錯誤):14

3、計算準確率、精確率、召回率、F1綜合評分

#利用sklearn.metrics的各類評估方法庫,計算準確率、精確率、召回率、F1綜合評分

fromsklearn.metrics import accuracy_score, precision_score, recall_score,f1_score

#準確率

a_score= accuracy_score(Corondata_real, Corondata_pred)

#精確率

p_score= precision_score(Corondata_real, Corondata_pred)

#召回率

r_score= recall_score(Corondata_real, Corondata_pred)

#F1綜合評分

f1_score= f1_score(Corondata_real, Corondata_pred)

print('準確率評分:{:.2%}'.format(a_score))

print('精確率評分:{:.2%}'.format(p_score))

print('召回率評分:{:.2%}'.format(r_score))

print('F1綜合評分:{:.2}'.format(f1_score))

輸出結果爲:

準確率評分:80.00%

精確率評分:66.67%

召回率評分:40.00%

F1綜合評分:0.5

4、擴展——classification_report評分報告庫

針對模型評估,在sklearn.metrics中內置了一個函數classification_report,可以同時統計出幾種評分方法的評分,能夠一目瞭然地看出模型的效果。

#導入classification_report評分報告庫

fromsklearn.metrics import classification_report

 

#用classification_report對模型評分,分別給出precision、recall、f1-score、support的分值

print(classification_report(Corondata_real,Corondata_pred))

輸出結果爲:

precision recall f1-score support

 

0 0.82 0.93 0.87 15

1 0.67 0.40 0.50 5

 

microavg 0.80 0.80 0.80 20

macroavg 0.75 0.67 0.69 20

weightedavg 0.78 0.80 0.78 20

上述結果對精度(Precision)、召回率(Recall)、f1分數(f1-score)、support四項指標的分值以列表形式概覽展示。這也對模型評估起到了很大的幫助。

 

 

結尾四件評估法器之小結

根據以上對四件評估法器的實戰演練,我們可以小結如下:

  • 對於模型評估,本文推薦的四件評估法器都能夠對模型打出分值,但各有千秋,均能體現出模型的一定效果。在實戰中,算法模型師可以採用這四件法器多方面進行評估,以方便後續對模型進行優化。
  • 本文介紹的是較爲普遍常用的評估方法,對模型進行評分還可以有很多其它的方法,例如交叉驗證法、ROC(Receiver Operating Characteristic Curve)、AUC(Area Under Curve)、R2分數等,限於篇幅,我們在這裏不再展開,讀者可以在網上搜索查看。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章