模型評價是指對于已經建立的一個或多個模型,根據其模型的類別,使用不同的指標評價其性能優劣的程序,常用的聚類模型評價指標有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個樣本的真實值,y? 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
https://www.cnblogs.com/yucen/p/9912063.html
https://blog.csdn.net/u012856866/article/details/52701857
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/186851.html
標籤:Python
