r - 为什么分类的拟合模型评估和混淆矩阵的准确性差异如此之大。使用 R
问题描述
我试图通过打印来解释我运行的随机森林模型的结果Model_RF_RF
。但是,这些结果看起来与我通过手动比较混淆矩阵和准确性获得的结果非常不同。
Model_RF_RF<-randomForest(Label ~ .,data = train.tokens.tfidf.df,ntree=500,mtry=82,importance=TRUE,proximity=TRUE,trControl = cv.cntrl,nodesize=10)
>Model_RF_RF
Call:
randomForest(formula = Label ~ ., data = train.tokens.tfidf.df, ntree = 500, mtry = 82, importance = TRUE, proximity = TRUE, trControl = cv.cntrl, nodesize = 10)
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 82
OOB estimate of error rate: 44.56%
Confusion matrix:
HIGH LOW MEDIUM class.error
HIGH 46 3 72 0.6198347
LOW 3 25 93 0.7933884
MEDIUM 22 20 194 0.1779661
> confusionMatrix(PD5,train$Label )
Confusion Matrix and Statistics
Reference
Prediction HIGH LOW MEDIUM
HIGH 119 0 0
LOW 1 120 3
MEDIUM 1 1 233
Overall Statistics
Accuracy : 0.9874
95% CI : (0.9729, 0.9954)
No Information Rate : 0.4937
P-Value [Acc > NIR] : <2e-16
Kappa : 0.98
Mcnemar's Test P-Value : 0.3916
Statistics by Class:
Class: HIGH Class: LOW Class: MEDIUM
Sensitivity 0.9835 0.9917 0.9873
Specificity 1.0000 0.9888 0.9917
Pos Pred Value 1.0000 0.9677 0.9915
Neg Pred Value 0.9944 0.9972 0.9877
Prevalence 0.2531 0.2531 0.4937
Detection Rate 0.2490 0.2510 0.4874
Detection Prevalence 0.2490 0.2594 0.4916
Balanced Accuracy 0.9917 0.9903 0.9895
这种行为有什么解释吗?
解决方案
欢迎来到 Stack Overflow,Manu。不同之处在于,您在调用中显示的结果Model_RF_RF
是您的 OOB(Out of Bag)结果,而您最后打印的结果是您的训练集上的结果。
如您所知,随机森林使用 bagging,这意味着他们使用您的数据的自举样本来种植树木。这意味着数据集中的每条记录将仅用于您种植的所有树木的一小部分,即在引导期间绘制记录的树木。因此,OOB 分数是通过仅使用不包括引导程序中指定条目的树来预测条目而获得的,因此每棵树只预测它从未见过的数据 - 这给出了一个很好的(通常略显悲观的)测试估计错误。
因此,看起来您的训练准确度非常好,而您的测试准确度却很低(正如 OOB 估计所示)。您可以尝试在一些验证数据上测试您的模型或使用交叉验证,您应该获得与您的 OOB 相似的分数。
尝试改变 的值mtry
,增加树的数量,或者做更多的特征工程。祝你好运!
推荐阅读
- java - 多对一中的Spring未解决的前向引用
- mysql - 在 SQL 中选择部分匹配输入的行
- sql - 从 BigQuery 中具有无效令牌的列中解析 JSON 文件
- push-notification - Swift iOS 13:单击推送通知如何打开文本字段?
- testing - 如何让我的 TestCafe 框架处理 Web 应用程序上的 A/B 实验?
- java - OpenJDK 11 和 Eclipse 中的 javax.xml 问题
- asp.net-mvc - ASP.NET MVC 中同一视图/控制器上的多个操作
- reactjs - Moment.js 返回 RangeError:时间值无效
- laravel - 在 Laravel 项目中放置类的位置
- python - 使用 pandas 绘制系列或数据框,其 x 轴比可用的实际数据长