R Caret火车:测试数据的结果要比火车数据好得多

时间:2019-01-22 12:03:13

标签: r r-caret supervised-learning

(我不确定这是R Caret还是stats问题,但我认为我仅能理解Caret的训练结果输出)

很抱歉没有提供有效的示例,这个问题是关于理解插入符号输出的。

我的数据集dt_in的尺寸为17,000 x 80。

我有以下代码用于训练模型(例如,随机森林,增强线性模型),与测试数据集相比,该测试的RMSE,R ^ 2和MAE更好。不管使用哪种模型,测试结果的均方根误差通常都低约10%-30%。

  # prepare datasets ----------------------------------------------------------------------------
  training_indices = createDataPartition(dt_in[, dep], p = .75, list = F)
  dt_training = dt_in[training_indices]
  dt_test = dt_in[-training_indices]

  tc = trainControl(method = "repeatedcv",number = 10,repeats = 3)

  # train ---------------------------------------------------------------------------------------  
  trained = train(dt_training[, -"dep"] , dt_training[, dep], method = fun, trControl = tc)
  # model evalution ---------------------------------------------------------

  trained$results
    mtry     RMSE  Rsquared      MAE   RMSESD RsquaredSD    MAESD
  1    2 80.59007 0.2192741 46.86460 21.27305 0.06727583 2.937344
  2   40 73.42838 0.3747700 40.95060 18.61011 0.05384239 1.291299
  3   79 71.62358 0.3975308 40.42657 19.50400 0.07105303 1.502392

  # test results
  models_predicted = extractPrediction(list(trained), 
                    testX = dt_test[, -"dep"],
                    testY = dt_test[, dep])
  postResample(models_predicted$pred, models_predicted$obs)

  RMSE   Rsquared        MAE 
  59.1520342  0.5816214 23.3004383 

我已经消除了因变量中的极端离群值,这些异常值更有可能出现在训练数据集中。

我了解extractPrediction的作用,但是我不确定trained$results是如何计算的,只是它基于重采样数据集。我看不出测试结果会比训练结果始终如一地更好。

0 个答案:

没有答案