日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分类器评价与在R中的实现:混淆矩阵

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分类器评价与在R中的实现:混淆矩阵 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分類模型評價一般有以下幾種方法:混淆矩陣(Confusion Matrix)、收益圖(Gain Chart)、提升圖(Lift Chart)、KS圖(KS Chart)、接受者操作特性曲線(ROC Chart)。“分類模型評價與在R中的實現”系列中將逐個介紹。

本篇介紹最基礎的混淆矩陣。

一、混淆矩陣簡介

混淆矩陣將分類預測結果與實際目標進行比較,并匯總成NXN列聯表(N為分類類型數)。

以二元分類為例:

<td ?colspan="2">Confusion Matrix
? Target?
??PositiveNegative
ModelPositiveTrue Positives(TP)False Positives(FP)
NegativeFalse Negatives(FN)True Negatives(TN)
??Positive Samples(P)Negative Samples(N)

由上表可以計算的指標有:
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

是不是感覺這些貨已經組合完所有的分子/分母了?沒關系,其實只要知道TP和TN越高越好就好了。

二、在R中計算混淆矩陣

這次使用ROCR包中的ROCR.simple數據集,其中prediction是預測值,labels為真實值。

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()直接計算

在確定好閥值后,可以直接用table函數計算列聯表,再根據之前的公式計算各個指標。假設我們認為prediciton>0.5的都預測為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

通過對混淆矩陣中數值的計算可以得到:

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.8505

2 用confusionMatrix()算

如果不想手動算,可以借助caret包中的confusionMatrix函數計算。該函數既可以用混淆矩陣的結果,也可以直接輸入預測/目標兩列原始數據計算上述值。只要確定好positive分類是那個,就能得出跟之前一樣的結果。

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 ##

三、混淆矩陣的缺點

1 需要自己確定閥值

可以看到,混淆矩陣4個值的確定都依賴于最直線我們主觀設定的0.5。如果只依靠混淆矩陣這種原始的方法,那么不經過繁瑣的試錯我們無法確認哪個閥值是最好的。

2不平衡數據魯棒性不好

一些positive事件發生概率極小的不平衡數據集(imbalanced data),混淆矩陣可能效果不好。比如對信用卡交易是否異常做分類的情形,很可能1w筆交易中只有1筆交易是異常的。一個將將所有交易都判定為正常的分類器,準確率是99.99%。這個數字雖然很高,但是沒有任何現實意義。

在之前列舉的各種分類模型評價方法中,收益圖(Gain Chart)、提升圖(Lift Chart)、KS圖(KS Chart)、接受者操作特性曲線(ROC Chart)都對混淆矩陣的缺點的有改進。參考后續。

from:?http://iccm.cc/classification-model-evaluation-confusion-matrix/

總結

以上是生活随笔為你收集整理的分类器评价与在R中的实现:混淆矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。