测试精度高于训练精度
Testing accuracy more than training accuracy
我正在构建一个用于多类分类的调整随机森林模型。
我得到以下结果
训练精度(AUC):0.9921996
测试精度(AUC):0.992237664
我在这个网站上看到了一个与此相关的问题,常见的答案似乎是数据集必须很小而且你的模型很幸运
但就我而言,我有大约 30 万个训练数据点和 10 万个测试数据点
我的 类 也很平衡
> summary(train$Bucket)
0 1 TO 30 121 TO 150 151 TO 180 181 TO 365 31 TO 60 366 TO 540 541 TO 730 61 TO 90
166034 32922 4168 4070 15268 23092 8794 6927 22559
730 + 91 TO 120
20311 11222
> summary(test$Bucket)
0 1 TO 30 121 TO 150 151 TO 180 181 TO 365 31 TO 60 366 TO 540 541 TO 730 61 TO 90
55344 10974 1389 1356 5090 7698 2932 2309 7520
730 + 91 TO 120
6770 3741
模型是否有可能在大型测试数据上很好地拟合?请回答我是否可以做一些交叉验证我的模型确实非常适合。
我的完整代码
split = sample.split(Book2$Bucket,SplitRatio =0.75)
train = subset(Book2,split==T)
test = subset(Book2,split==F)
traintask <- makeClassifTask(data = train,target = "Bucket")
rf <- makeLearner("classif.randomForest")
params <- makeParamSet(makeIntegerParam("mtry",lower = 2,upper = 10),makeIntegerParam("nodesize",lower = 10,upper = 50))
#set validation strategy
rdesc <- makeResampleDesc("CV",iters=5L)
#set optimization technique
ctrl <- makeTuneControlRandom(maxit = 5L)
#start tuning
tune <- tuneParams(learner = rf ,task = traintask ,resampling = rdesc ,measures = list(acc) ,par.set = params ,control = ctrl ,show.info = T)
rf.tree <- setHyperPars(rf, par.vals = tune$x)
tune$y
r<- train(rf.tree, traintask)
getLearnerModel(r)
testtask <- makeClassifTask(data = test,target = "Bucket")
rfpred <- predict(r, testtask)
performance(rfpred, measures = list(mmce, acc))
差值是1e-4阶,没有错,是常规的统计误差(结果的方差)。没什么好担心的。这字面意思是差异大约为 0.0001 * 100,000 = 10 个样本 ... 100k 中的 10 个样本。
我正在构建一个用于多类分类的调整随机森林模型。 我得到以下结果 训练精度(AUC):0.9921996 测试精度(AUC):0.992237664 我在这个网站上看到了一个与此相关的问题,常见的答案似乎是数据集必须很小而且你的模型很幸运 但就我而言,我有大约 30 万个训练数据点和 10 万个测试数据点 我的 类 也很平衡
> summary(train$Bucket)
0 1 TO 30 121 TO 150 151 TO 180 181 TO 365 31 TO 60 366 TO 540 541 TO 730 61 TO 90
166034 32922 4168 4070 15268 23092 8794 6927 22559
730 + 91 TO 120
20311 11222
> summary(test$Bucket)
0 1 TO 30 121 TO 150 151 TO 180 181 TO 365 31 TO 60 366 TO 540 541 TO 730 61 TO 90
55344 10974 1389 1356 5090 7698 2932 2309 7520
730 + 91 TO 120
6770 3741
模型是否有可能在大型测试数据上很好地拟合?请回答我是否可以做一些交叉验证我的模型确实非常适合。
我的完整代码
split = sample.split(Book2$Bucket,SplitRatio =0.75)
train = subset(Book2,split==T)
test = subset(Book2,split==F)
traintask <- makeClassifTask(data = train,target = "Bucket")
rf <- makeLearner("classif.randomForest")
params <- makeParamSet(makeIntegerParam("mtry",lower = 2,upper = 10),makeIntegerParam("nodesize",lower = 10,upper = 50))
#set validation strategy
rdesc <- makeResampleDesc("CV",iters=5L)
#set optimization technique
ctrl <- makeTuneControlRandom(maxit = 5L)
#start tuning
tune <- tuneParams(learner = rf ,task = traintask ,resampling = rdesc ,measures = list(acc) ,par.set = params ,control = ctrl ,show.info = T)
rf.tree <- setHyperPars(rf, par.vals = tune$x)
tune$y
r<- train(rf.tree, traintask)
getLearnerModel(r)
testtask <- makeClassifTask(data = test,target = "Bucket")
rfpred <- predict(r, testtask)
performance(rfpred, measures = list(mmce, acc))
差值是1e-4阶,没有错,是常规的统计误差(结果的方差)。没什么好担心的。这字面意思是差异大约为 0.0001 * 100,000 = 10 个样本 ... 100k 中的 10 个样本。