尽管精度超过99%,随机森林模型仍会产生错误的预测

问题描述

对于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类而言比B类更多的数据点,则该模型将简单地学习始终预测A类。

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

我还建议使用过采样欠采样之类的技术,以避免数据不平衡的问题。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...