【问题标题】:Testing accuracy more than training accuracy测试准确率高于训练准确率
【发布时间】:2017-10-05 19:27:29
【问题描述】:

我正在为多类分类构建一个经过调整的随机森林模型。 我得到以下结果 训练准确率(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))

【问题讨论】:

    标签: machine-learning random-forest auc


    【解决方案1】:

    差异为 1e-4 阶,没有任何问题,这是一个常规的统计错误(结果的差异)。没什么可担心的。这实际上意味着差异约为 0.0001 * 100,000 = 10 个样本 ... 100k 中的 10 个样本。

    【讨论】:

    • 感谢您的回答。我有另一个与此无关的问题。如果您能提供帮助,我将不胜感激。我想知道将测试数据与训练数据一起操作是否是一种好习惯。通过操纵,我的意思是删除异常值或修改很少发生的因子水平,诸如此类的东西
    • @DhruvMahajan 不,这不是一个好习惯。您应该预处理训练集并将其应用于测试集。例如,如果您使用sklearn scaler,您将在训练集上拟合缩放器,然后单独转换测试集。
    猜你喜欢
    • 2018-09-18
    • 1970-01-01
    • 2023-03-17
    • 2020-10-17
    • 2019-08-31
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    相关资源
    最近更新 更多