模型評價是指對於已經建立的一個或多個模型,根據其模型的類別,使用不同的指標評價其性能優劣的過程。常用的聚類模型評價指標有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)
sklearn的metrics模塊分別提供了precision_score和recall_score函數用來評估分類模型的查全率和查准率。
精確度:precision,正確預測為正的,占全部預測為正的比例,TP / (TP+FP)
召回率:recall,正確預測為正的,占全部實際為正的比例,TP / (TP+FN)
假設有一個大小為1000的帶布爾標簽數據集,里面的“真”樣本只有100不到,剩下都是假樣本。假設訓練一個模型,不管輸入什么數據,它只給出“假”的預測,那么正確率依舊是90%以上,很明顯,這個時候准確率accuracy就失去它的作用。因此,查全率和查准率一般用在傾斜數據集的時候。
F1值(F1-Measure)
Precision和Recall指標有的時候是矛盾的,F-Measure綜合這二者指標的評估指標,用於綜合反映整體的指標。F-Measure是Precision和Recall加權調和平均, 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為分類的個數。假如我們面對的是一個二分類問題,也就是N=2,我們就得到一個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 Rate,TNR),也稱為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。為了形象化這一變化,在此引入ROC,ROC曲線可以用於評價一個分類器。
ROC曲線其實就是從混淆矩陣衍生出來的圖形,其橫坐標為1-Specificity,縱坐標為Sensitivity。1-specificity=FPR(False positive rate),即假正類率。Sensitivity=TPR(True positive rate),即是真正類率。
理想情況下,TPR應該接近1,FPR應該接近0。ROC曲線上的每一個點對應於一個threshold,對於一個分類器,每個threshold下會有一個TPR和FPR。比如Threshold最大時,TP=FP=0,對應於原點;Threshold最小時,TN=FN=0,對應於右上角的點(1,1)。在ROC空間,ROC曲線越凸向左上方向效果越好;越靠近對角線,分類器越趨向於隨機分類器。
利用metrics計算roc曲線,roc曲線有三個屬性:fpr,tpr,和閾值,因此該函數返回這三個變量。
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)
AUC(ROC曲線下面積)
ROC曲線是根據與那條參照線進行比較來判斷模型的好壞,但這只是一種直覺上的定性分析,如果我們需要精確一些,就要用到AUC,也就是ROC曲線下面積。其判定方法是AUC應該大於0.5。
參考線的面積是0.5,ROC曲線與它偏離越大,ROC曲線就越往左上方靠攏,它下面的面積(AUC)也就越大,這里面積是0.869。我們可以根據AUC的值與0.5相比,來評估一個分類模型的預測效果。如果AUC的值達到0.80,那說明分類器分類非常准確;如果AUC值在0.60~0.80之間,那分類器有優化空間,可以通過調節參數得到更好的性能;如果AUC值小於0.60,那說明分類器模型效果比較差。
利用剛才求得的fpr和tpr的結果作為參數,可以求得AUC的值,
1 from sklearn.metrics import auc 2 3 auc(fpr, tpr)
PR曲線
PR曲線的橫坐標是精確率P,縱坐標是召回率R。評價標准和ROC一樣,先看平滑不平滑(藍線明顯好些)。一般來說,在同一測試集,上面的比下面的好(綠線比紅線好)。當P和R的值接近時,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,其他指標就變得沒有了意義。當正負樣本數量差距不大的情況下,ROC和PR的趨勢是差不多的,但是在正負樣本分布極不均衡的情況下,PRC比ROC更能真實的反映出實際情況,因為此時ROC曲線看起來似乎很好,但是卻在PR上效果一般
二、回歸問題
擬合(回歸)問題比較簡單,所用到的衡量指標也相對直觀。假設yiyi是第ii個樣本的真實值,ŷ iy^i是對第ii個樣本的預測值。
1. 平均絕對誤差(MAE)
平均絕對誤差MAE(Mean Absolute Error)又被稱為l1范數損失(l1-norm loss):
2. 均方誤差(MSE)
平均平方誤差MSE(Mean 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表示在C與K中都是同類別的元素對數,b表示在C與K中都是不同類別的元素對數,則蘭德指數為:
其中分母數據集中可以組成的總元素對數,RI取值范圍為[0,1],值越大意味着聚類結果與真實情況越吻合。
對於隨機結果,RI並不能保證分數接近零。為了實現“在聚類結果隨機產生的情況下,指標應該接近零”,調整蘭德系數(Adjusted rand index)被提出,它具有更高的區分度:
具體計算方式參見Adjusted Rand index。
ARI取值范圍為[−1,1],值越大意味着聚類結果與真實情況越吻合。從廣義的角度來講,ARI衡量的是兩個數據分布的吻合程度。
2. 互信息
互信息(Mutual Information)也是用來衡量兩個數據分布的吻合程度。假設UU與VV是對NN個樣本標簽的分配情況,則兩種分布的熵(熵表示的是不確定程度)分別為:
利用基於互信息的方法來衡量聚類效果需要實際類別信息,MI與NMI取值范圍為[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