1.機器學習之模型評估詳解


 模型評價是指對於已經建立的一個或多個模型,根據其模型的類別,使用不同的指標評價其性能優劣的過程。常用的聚類模型評價指標有ARI評價法(蘭德系數)、AMI評價法(互信息)、V-measure評分、FMI評價法和輪廓系數等。常用的分類模型評價指標有准確率(Accuracy)、精確率(Precision)、召回率(Recall)、F1值(F1 Value)、ROC和AUC等。常用的回歸模型評價指標有平均絕對誤差、均方根誤差、中值絕對誤差和可解釋方差值等。

線性回歸解決的是連續型數值的預測問題,例如預測房價,產品銷量等。
邏輯回歸解決的是分類問題,從分類數量上看,有二項分類和多項分類。

sklearn庫的metrics模塊提供各種評估方法,包括分類評估、回歸評估、聚類評估和交叉驗證等,評估分類是判斷預測值時否很好的與實際標記值相匹配。正確的鑒別出正樣本(True Positives)或者負樣本(True Negatives)都是True。同理,錯誤的判斷正樣本(False Positive,即一類錯誤)或者負樣本(False Negative,即二類錯誤)。
注意:True和False是對於評價預測結果而言,也就是評價預測結果是正確的(True)還是錯誤的(False)。而Positive和Negative則是樣本分類的標記。

metrics模塊分類度量有6種方法,如下表所示:

指標

描述

metrics方法

Accuracy

准確度

from sklearn.metrics import accuracy_score

Precision

查准率

from sklearn.metrics import precision_score

Recall

查全率

from sklearn.metrics import recall_score

F1

F1

from sklearn.metrics import f1_score

Classification Report

分類報告

from sklearn.metrics import classification_report

Confusion Matrix

混淆矩陣

from sklearn.metrics import confusion_matrix

ROC

ROC曲線

from sklearn.metrics import roc_curve

AUC

ROC曲線下的面積

from sklearn.metrics import auc

 1 '''
 2 from sklearn.metrics import accuracy_score, precision_score,
 3 recall_score, f1_score, classification_report, confusion_matrix
 4 accuracy_score(y_test, y_pred)
 5 precision_score(y_test, y_pred)    
 6 recall_score(y_test, y_pred)
 7 f1_score(y_test,y_pred)
 8 classification_report(y_test,y_pred)
 9 confusion_matrix(y_test, y_pred)
10 '''

准確度(accuracy)

准確度是預測正確的數(包括正樣本和負樣本)占所有數的比例。利用accuracy_score函數對預測數據進行模型評估,其中第一個參數是測試標記,第二個參數是預測標記值

ACC = (TP+TN)/(TP+TN+FP+FN)

查准率/精確度(Precision)和查全率/召回率(Recall

sklearnmetrics模塊分別提供了precision_scorerecall_score函數用來評估分類模型的查全率和查准率。

精確度:precision,正確預測為正的,占全部預測為正的比例,TP / (TP+FP)

召回率:recall,正確預測為正的,占全部實際為正的比例,TP / (TP+FN)

假設有一個大小為1000的帶布爾標簽數據集,里面的樣本只有100不到,剩下都是假樣本。假設訓練一個模型,不管輸入什么數據,它只給出的預測,那么正確率依舊是90%以上,很明顯,這個時候准確率accuracy就失去它的作用。因此,查全率和查准率一般用在傾斜數據集的時候。

F1值(F1-Measure

PrecisionRecall指標有的時候是矛盾的,F-Measure綜合這二者指標的評估指標,用於綜合反映整體的指標。F-MeasurePrecisionRecall加權調和平均, a為權重因子,a = 1時,F值變為最常見的F1了,代表精確率和召回率的權重一樣(fl_score)

                 

 

F1 值,也稱為綜合分類率:F1=2 * precision * recall/(precision+recall),為了綜合多個類別的分類情況,評測系統整體性能,經常采用的還有微平均F1(micro-averaging)和宏平均F1(macro-averaging)兩種指標。宏平均F1與微平均F1 是以兩種不同的平均方式求的全局的F1指標。其中宏平均 F1 的計算方法先對每個類別單獨計算F1值,再取這些F1值的算術平均值作為全局指標。而微平均F1的計算方法是先累加計算各個類別的a、b、c、d的值,再由這些值求出F1值。 由兩種平均F1的計算方式不難看出,宏平均F1平等對待每一個類別,所以它的值主要受到稀有類別的影響,而微平均F1平等考慮文檔集中的每一個文檔,所以它的值受到常見類別的影響比較大。

分類報告(Classification Report)

metrics模塊的classification_report方法,綜合提供了查准率(precision)、查全率(recall)和f1值三種評估指標

混淆矩陣(Confusion Matrix)

 

混淆矩陣是一個N X N矩陣,N為分類的個數。假如我們面對的是一個二分類問題,也就是N2,我們就得到一個2 X 2矩陣。在學習這個矩陣之前,我們需要知道一些簡單的定義。
Accuracy(
准確度):預測正確的數占所有數的比例。
Positive Predictive Value(
陽性預測值) or Precision(查准率):陽性預測值被預測正確的比例。
Negative Predictive Value(
陰性預測值):陰性預測值被預測正確的比例。
Sensity(
靈敏度) or Recall(查全率):在陽性值中實際被預測正確所占的比例。
Specificity(
特異度):在陰性值中實現被預測正確所占的比例

ROC(receiver operating characteristic curve)

曲線指受試者工作特征曲線或者是接收器操作特性曲線, 慮一個二分問題,即將實例分成正類(positive)或負類(negative)。對一個二分問題來說,會出現四種情況。如果一個實例是正類並且也被預測成正類,即為真正類(True positive,如果實例是負類被預測成正類,稱之為假正類(False positive)。相應地,如果實例是負類被預測成負類,稱之為真負類(True negative,正類被預測成負類則為假負類(false negative)。

TP:正確肯定的數目;

FN:漏報,沒有正確找到的匹配的數目;

FP:誤報,給出的匹配是不正確的;

TN:正確拒絕的非匹配對數; 

從列聯表引入兩個新名詞。其一是真正類率(true positive rate ,TPR), 計算公式為TPR=TP/ (TP+ FN),刻畫的是分類器所識別出的正實例占所有正實例的比例。另外一個是假正類率(false positive rate, FPR),計算公式為FPR= FP / (FP + TN),計算的是分類器錯認為正類的負實例占所有負實例的比例。還有一個真負類率(True Negative RateTNR),也稱為specificity,計算公式為TNR=TN/ (FP+ TN) = 1-FPR

FPR = FP/(FP + TN)負樣本中的錯判率(假警報率)

TPR = TP/(TP + TN)判對樣本中的正樣本率(命中率)

ACC = (TP + TN) / P+N判對准確率

  在一個二分類模型中,對於所得到的連續結果,假設已確定一個閥值,比如說 0.6,大於這個值的實例划歸為正類,小於這個值則划到負類中。如果減小閥值,減到0.5,固然能識別出更多的正類,也就是提高了識別出的正例占所有正例的比類,即TPR,但同時也將更多的負實例當作了正實例,即提高了FPR。為了形象化這一變化,在此引入ROCROC曲線可以用於評價一個分類器。

 

  ROC曲線其實就是從混淆矩陣衍生出來的圖形,其橫坐標為1-Specificity,縱坐標為Sensitivity1-specificity=FPR(False positive rate),即假正類率。Sensitivity=TPR(True positive rate),即是真正類率。

理想情況下,TPR應該接近1FPR應該接近0ROC曲線上的每一個點對應於一個threshold,對於一個分類器,每個threshold下會有一個TPRFPR。比如Threshold最大時,TP=FP=0,對應於原點;Threshold最小時,TN=FN=0,對應於右上角的點(1,1)。在ROC空間,ROC曲線越凸向左上方向效果越好;越靠近對角線,分類器越趨向於隨機分類器。

 

  利用metrics計算roc曲線,roc曲線有三個屬性:fprtpr,和閾值,因此該函數返回這三個變量。

1 import numpy as np  
2 from sklearn.metrics import roc_curve  
3 
4 y = np.array([1,1,2,2])  
5 pred = np.array([0.1, 0.4, 0.35, 0.8])  
6 
7 fpr, tpr, thresholds = roc_curve(y, pred, pos_label=2)  

AUCROC曲線下面積)

 

ROC曲線是根據與那條參照線進行比較來判斷模型的好壞,但這只是一種直覺上的定性分析,如果我們需要精確一些,就要用到AUC,也就是ROC曲線下面積。其判定方法是AUC應該大於0.5

 

參考線的面積是0.5ROC曲線與它偏離越大,ROC曲線就越往左上方靠攏,它下面的面積(AUC)也就越大,這里面積是0.869。我們可以根據AUC的值與0.5相比,來評估一個分類模型的預測效果。如果AUC的值達到0.80,那說明分類器分類非常准確;如果AUC值在0.600.80之間,那分類器有優化空間,可以通過調節參數得到更好的性能;如果AUC值小於0.60,那說明分類器模型效果比較差。

 

  利用剛才求得的fprtpr的結果作為參數,可以求得AUC的值,

1 from sklearn.metrics import auc  
2 
3 auc(fpr, tpr)

PR曲線

 

PR曲線的橫坐標是精確率P,縱坐標是召回率R。評價標准和ROC一樣,先看平滑不平滑(藍線明顯好些)。一般來說,在同一測試集,上面的比下面的好(綠線比紅線好)。當PR的值接近時,F1值最大,此時畫連接(0,0)(1,1)的線,線和PRC重合的地方的F1是這條線最大的F1(光滑的情況下),此時的F1對於PRC就好像AUC對於ROC一樣。一個數字比一條線更方便調型

 

有時候模型沒有單純的誰比誰好(比如圖二的藍線和青線),所以選擇模型還是要結合具體的使用場景。下面是兩個場景:1,地震的預測對於地震的預測,我們希望的是RECALL非常高,也就是說每次地震我們都希望預測出來。這個時候我們可以犧牲PRECISION。情願發出1000次警報,把10次地震都預測正確了,也不要預測100次對了8次漏了兩次。2,嫌疑人定罪基於不錯怪一個好人的原則,對於嫌疑人的定罪我們希望是非常准確的。即時有時候放過了一些罪犯(recall低),但也是值得的。對於分類器來說,本質上是給一個概率,此時,我們再選擇一個CUTOFF點(閥值),高於這個點的判正,低於的判負。那么這個點的選擇就需要結合你的具體場景去選擇。反過來,場景會決定訓練模型時的標准,比如第一個場景中,我們就只看RECALL=99.9999%(地震全中)時的PRECISION,其他指標就變得沒有了意義。當正負樣本數量差距不大的情況下,ROCPR的趨勢是差不多的,但是在正負樣本分布極不均衡的情況下,PRCROC更能真實的反映出實際情況,因為此時ROC曲線看起來似乎很好,但是卻在PR上效果一般

二、回歸問題

擬合(回歸)問題比較簡單,所用到的衡量指標也相對直觀。假設yiyi是第ii個樣本的真實值,ŷ iy^i是對第ii個樣本的預測值。

1. 平均絕對誤差(MAE

 

平均絕對誤差MAEMean Absolute Error)又被稱為l1范數損失(l1-norm loss):

 

2. 均方誤差(MSE

 

平均平方誤差MSEMean Squared Error)又被稱為l2范數損失(l2-norm loss):

3、均方根誤差(RMSE

RMSE雖然廣為使用,但是其存在一些缺點,因為它是使用平均誤差,而平均值對異常點(outliers)較敏感,如果回歸器對某個點的回歸值很不理性,那么它的誤差則較大,從而會對RMSE的值有較大影響,即平均值是非魯棒的。

4、解釋變異

 

解釋變異( Explained variance)是根據誤差的方差計算得到的:

 

5、決定系

 

決定系數(Coefficient of determination)又被稱為R2分數:

 

三、聚類

1 . 蘭德指

 

蘭德指數(Rand index)需要給定實際類別信息C,假設K是聚類結果,a表示在CK中都是同類別的元素對數,b表示在CK中都是不同類別的元素對數,則蘭德指數為:

 

其中分母數據集中可以組成的總元素對數,RI取值范圍為[0,1],值越大意味着聚類結果與真實情況越吻合。

 

對於隨機結果,RI並不能保證分數接近零。為了實現在聚類結果隨機產生的情況下,指標應該接近零,調整蘭德系數(Adjusted rand index)被提出,它具有更高的區分度:

 

 

具體計算方式參見Adjusted Rand index

ARI取值范圍為[−1,1],值越大意味着聚類結果與真實情況越吻合。從廣義的角度來講,ARI衡量的是兩個數據分布的吻合程度。

2. 互信

 

互信息(Mutual Information)也是用來衡量兩個數據分布的吻合程度。假設UUVV是對NN個樣本標簽的分配情況,則兩種分布的熵(熵表示的是不確定程度)分別為:

 

利用基於互信息的方法來衡量聚類效果需要實際類別信息,MINMI取值范圍為[0,1]AMI取值范圍為[−1,1],它們都是值越大意味着聚類結果與真實情況越吻合。

3. 輪廓系

 

輪廓系數(Silhouette coefficient)適用於實際類別信息未知的情況。對於單個樣本,設aa是與它同類別中其他樣本的平均距離,bb是與它距離最近不同類別中樣本的平均距離,輪廓系數為:

 

對於一個樣本集合,它的輪廓系數是所有樣本輪廓系數的平均值。

 

輪廓系數取值范圍是[−1,1][−1,1],同類別樣本越距離相近且不同類別樣本距離越遠,分數越高。

  

計算樣本i到同簇其它樣本到平均距離ai。ai越小,說明樣本i越應該被聚類到該簇(將ai稱為樣本i到簇內不相似度)。
計算樣本i到其它某簇Cj的所有樣本的平均距離bij,稱為樣本i與簇Cj的不相似度。定義為樣本i的簇間不相似度:bi=min(bi1,bi2,...,bik2)
si接近1,則說明樣本i聚類合理
si接近-1,則說明樣本i更應該分類到另外的簇
若si近似為0,則說明樣本i在兩個簇的邊界上

Confusion Matrix

混淆矩陣

from sklearn.metrics import confusion_matrix

ROC

ROC曲線

from sklearn.metrics import roc_curve

AUC

ROC曲線下的面積

from sklearn.metrics import auc

 

其他評價指標
計算速度:分類器訓練和預測需要的時間;
魯棒性:處理缺失值和異常值的能力;
可擴展性:處理大數據集的能力;
可解釋性:分類器的預測標准的可理解性,像決策樹產生的規則就是很容易理解的,而神經網絡的一堆參數就不好理解。

 

參考文章:https://zhuanlan.zhihu.com/p/46714763

https://www.cnblogs.com/yucen/p/9912063.html

https://blog.csdn.net/u012856866/article/details/52701857


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM