尽管准确率超过 99%,但随机森林模型产生了不正确的预测

Posted

技术标签:

【中文标题】尽管准确率超过 99%,但随机森林模型产生了不正确的预测【英文标题】:Random Forest model yields incorrect predictions despite having accuracy of over 99 percent 【发布时间】:2020-12-01 08:31:15 【问题描述】:

对于 ML 课程,我应该基于训练集构建一个模型来预测验证集上的变量“classe”。我删除了训练集中所有不必要的变量,使用交叉验证来防止过度拟合,并确保验证集在删除哪些列方面与训练集匹配。当我预测验证集中的类时,它会产生所有类 A,我知道这是不正确的。

我在下面包含了整个脚本。

我哪里做错了?

library(caret)

download.file("https://d396qusza40orc.cloudfront.net/predmachlearn/pml-training.csv", "train.csv")
download.file("https://d396qusza40orc.cloudfront.net/predmachlearn/pml-testing.csv", "test.csv")

train <- read.csv("./train.csv")
val <- read.csv("./test.csv")

#getting rid of columns with NAs
nas <- sapply(train, function(x) sum(is.na(x)))
train <- train[, nas<1900]

#removing near zero variance columns
remove <- nearZeroVar(train)
train <- train[, -remove]

#create partition in our training set
set.seed(8675309)
inTrain <- createDataPartition(train$classe, p = .7, list = FALSE)
training <- train[inTrain,]
testing <- train[-inTrain,]

model <- train(classe ~ ., method = "rf", data = training)

confusionMatrix(predict(model, testing), testing$classe)

#make sure validation set has same features as training set
trainforvalid <- subset(training, select = -classe)
val <- val[, colnames(trainforvalid)]

predict(model, val)
#the above step yields all predictions as classe A

【问题讨论】:

如果它预测所有的 A,它怎么能给出 0.99 的 ACC,但 A 只占数据的 0.284(根据你在 Khelifi 的答案中对目标的分布)? 此外,删除zeroVar 是您应该考虑的事情。如果您有一个特征 X1 在 [10^(-10),10^(-8) ] 的范围内,由于规模,它本质上会具有“低方差”,但它可能非常清楚将您的班级分开,例如每个班级可以是医疗产品,X1 是给定活性化学物质的数量。使用归一化/缩放方差代替 IMO 【参考方案1】:

这可能是因为数据不平衡而发生的。如果数据中 A 类的数据点多于 B 类,则模型将简单地学习总是预测 A 类。

在这种情况下尝试使用更好的指标,例如 F1 得分

我还建议使用过采样欠采样等技术来避免数据不平衡问题。

【讨论】:

以下是在训练集中输入的“classe”变量的分类:ABCDE 3906 2658 2396 2252 2525,我知道它的可读性不高,但实际上响应变量并没有令人难以置信的偏斜朝向A 嗯,数据似乎并没有那么不平衡(以 A 为类的行数在其他标签的 1.4 a,d 1.9 之间)。如果您使用弱功能或弱模型,这可能是问题的原因。尝试增加估算器的数量并创建/使用其他有意义的功能。不要拘泥于一种模型,如果您更喜欢基于树的模型,XGBoost 或 LightGBM 会比 RF 表现更好。 混淆矩阵长什么样子?它可能会让你知道它在处理哪些类。

以上是关于尽管准确率超过 99%,但随机森林模型产生了不正确的预测的主要内容,如果未能解决你的问题,请参考以下文章

如何提高随机森林多类分类模型的准确率?

R语言数据分析|随机森林

详解随机森林-机器学习中调参的基本思想菜菜的sklearn课堂笔记

决策树、随机森林

随机森林

使用 Python 的随机森林的高 OOB 错误