分类器评价与在R中的实现:混淆矩阵
分類模型評(píng)價(jià)一般有以下幾種方法:混淆矩陣(Confusion Matrix)、收益圖(Gain Chart)、提升圖(Lift Chart)、KS圖(KS Chart)、接受者操作特性曲線(ROC Chart)?!胺诸惸P驮u(píng)價(jià)與在R中的實(shí)現(xiàn)”系列中將逐個(gè)介紹。
本篇介紹最基礎(chǔ)的混淆矩陣。
一、混淆矩陣簡(jiǎn)介
混淆矩陣將分類預(yù)測(cè)結(jié)果與實(shí)際目標(biāo)進(jìn)行比較,并匯總成NXN列聯(lián)表(N為分類類型數(shù))。
以二元分類為例:
<td ?colspan="2">Confusion Matrix| ? | Target | ? | |
| ? | ? | Positive | Negative |
| Model | Positive | True Positives(TP) | False Positives(FP) |
| Negative | False Negatives(FN) | True Negatives(TN) | |
| ? | ? | Positive Samples(P) | Negative Samples(N) |
由上表可以計(jì)算的指標(biāo)有:
Accuracy = (TP+TN)/(P+N)
Error Rate = 1 – Accuracy = (FP+FN)/(P+N)
False Positive Rate = Fallout = FP/N
True Positive Rate = Recall = Sensitivity = TP/P
False Negative Rate = Miss = FN/P
True Negative Rate = Specificity = TN/N
Positive Predictive Value = Precision = TP/(TP+FP)
Negative Predictive Value = TN/(TN+FN)
Prediction-conditioned Fallout = FP/(TP+FP)
Prediction-conditioned Miss = FN/(TN+FN)
Rate of Positive Predictions = Detection Prevalence = (TP+FP)/(P+N)
Rate of Negative Predictions = (TN+FN)/(P+N)
Prevalence = (TP+FN)/(P+N)
Detection Rate = TP/(P+N)
Balanced Accuracy = (Sensitivity+Specificity)/2
是不是感覺這些貨已經(jīng)組合完所有的分子/分母了?沒關(guān)系,其實(shí)只要知道TP和TN越高越好就好了。
二、在R中計(jì)算混淆矩陣
這次使用ROCR包中的ROCR.simple數(shù)據(jù)集,其中prediction是預(yù)測(cè)值,labels為真實(shí)值。
require(ROCR) data(ROCR.simple) str(ROCR.simple) ## List of 2 ## $ predictions: num [1:200] 0.613 0.364 0.432 0.14 0.385 ... ## $ labels : num [1:200] 1 1 0 0 0 1 1 1 1 0 ...1 用table()直接計(jì)算
在確定好閥值后,可以直接用table函數(shù)計(jì)算列聯(lián)表,再根據(jù)之前的公式計(jì)算各個(gè)指標(biāo)。假設(shè)我們認(rèn)為prediciton>0.5的都預(yù)測(cè)為1,其余為0.
pred.class <- as.integer(ROCR.simple$predictions > 0.5) print(cft <- table(pred.class, ROCR.simple$labels)) ## ## pred.class 0 1 ## 0 91 14 ## 1 16 79通過對(duì)混淆矩陣中數(shù)值的計(jì)算可以得到:
tp <- cft[2, 2] tn <- cft[1, 1] fp <- cft[2, 1] fn <- cft[1, 2] print(accuracy <- (tp + tn)/(tp + tn + fp + fn)) ## [1] 0.85 print(sensitivity <- tp/(tp + fn)) ## [1] 0.8495 print(specificity <- tn/(tn + fp)) ## [1] 0.85052 用confusionMatrix()算
如果不想手動(dòng)算,可以借助caret包中的confusionMatrix函數(shù)計(jì)算。該函數(shù)既可以用混淆矩陣的結(jié)果,也可以直接輸入預(yù)測(cè)/目標(biāo)兩列原始數(shù)據(jù)計(jì)算上述值。只要確定好positive分類是那個(gè),就能得出跟之前一樣的結(jié)果。
require(caret) confusionMatrix(cft, positive = "1") confusionMatrix(pred.class, ROCR.simple$labels, positive = "1") ## Confusion Matrix and Statistics ## ## Reference ## Prediction 0 1 ## 0 91 14 ## 1 16 79 ## ## Accuracy : 0.85 ## 95% CI : (0.793, 0.896) ## No Information Rate : 0.535 ## P-Value [Acc > NIR] : <2e-16 ## ## Kappa : 0.699 ## Mcnemar's Test P-Value : 0.855 ## ## Sensitivity : 0.849 ## Specificity : 0.850 ## Pos Pred Value : 0.832 ## Neg Pred Value : 0.867 ## Prevalence : 0.465 ## Detection Rate : 0.395 ## Detection Prevalence : 0.475 ## Balanced Accuracy : 0.850 ## ## 'Positive' Class : 1 ##三、混淆矩陣的缺點(diǎn)
1 需要自己確定閥值
可以看到,混淆矩陣4個(gè)值的確定都依賴于最直線我們主觀設(shè)定的0.5。如果只依靠混淆矩陣這種原始的方法,那么不經(jīng)過繁瑣的試錯(cuò)我們無法確認(rèn)哪個(gè)閥值是最好的。
2不平衡數(shù)據(jù)魯棒性不好
一些positive事件發(fā)生概率極小的不平衡數(shù)據(jù)集(imbalanced data),混淆矩陣可能效果不好。比如對(duì)信用卡交易是否異常做分類的情形,很可能1w筆交易中只有1筆交易是異常的。一個(gè)將將所有交易都判定為正常的分類器,準(zhǔn)確率是99.99%。這個(gè)數(shù)字雖然很高,但是沒有任何現(xiàn)實(shí)意義。
在之前列舉的各種分類模型評(píng)價(jià)方法中,收益圖(Gain Chart)、提升圖(Lift Chart)、KS圖(KS Chart)、接受者操作特性曲線(ROC Chart)都對(duì)混淆矩陣的缺點(diǎn)的有改進(jìn)。參考后續(xù)。
from:?http://iccm.cc/classification-model-evaluation-confusion-matrix/
總結(jié)
以上是生活随笔為你收集整理的分类器评价与在R中的实现:混淆矩阵的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用FLANN进行特征点匹配
- 下一篇: 分类器评价与在R中的实现:ROC图与AU