插入符号:使用除了LOOCV和rpart之外的任何内容时出错

时间:2012-05-08 17:50:42

标签: r

我正在尝试使用R插入符模块进行模型生成,我想使用一些交叉验证功能。我发现唯一与rpart一起使用的交叉验证函数是LOOCV(留下一个交叉验证)。

以下代码抛出错误:

library(cart)
data(trees)
formula=Volume~Girth+Height
train(formula, data=trees,  method='rpart')
  

警告消息:在nominalTrainWorkflow中(dat = trainData,info =   trainInfo,method = method,:缺少值   重新采样的绩效指标。

这个错误意味着什么,如何让它消失?我在互联网上搜索,而不是一次点击此错误消息。我将错误追溯到rpart模型生成。它以某种方式输出此错误消息,所有其他模式生成方法工作正常!

如果我使用LOOCV,一切正常。

我将警告追溯到workflows.R文件,但我不明白为什么会抛出此警告。

> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    
 [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8   
 [7] LC_PAPER=C                 LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
 [1] earth_3.2-3           plotrix_3.4           plotmo_1.3-1         
 [4] leaps_2.9             doMC_1.2.5            multicore_0.1-7      
 [7] iterators_1.0.6       forecast_3.20         RcppArmadillo_0.3.0.2
[10] Rcpp_0.9.10           fracdiff_1.4-1        tseries_0.10-28      
[13] zoo_1.7-7             quadprog_1.5-4        caret_5.15-023       
[16] foreach_1.4.0         cluster_1.14.2        reshape_0.8.4        
[19] plyr_1.7.1            lattice_0.20-6        mda_0.4-2            
[22] class_7.3-3           rpart_3.1-52          data.table_1.8.0     

loaded via a namespace (and not attached):
[1] codetools_0.2-8 compiler_2.15.0 grid_2.15.0    

1 个答案:

答案 0 :(得分:9)

使用R邮件列表和caret作者的帮助,我找到了以下解决方案:

如果由于某种原因生成的模型是常量,则会发生错误。常量意味着在这种情况下,对于所有输入值,模型总是产生相同的值。在这种情况下,R ^ 2的计算失败。插入符默认计算R ^ 2。由于插入符号不使用R ^ 2值进行模型选择,因此可以跳过此错误。

还有两个问题:

  • 我不清楚为什么如果模型是常数则R ^ 2计算失败。如果模型预测中没有至少两个不同的值,caret中的代码将明显失败。我将R ^ 2计算替换为没有这些限制的自写计算。
  • 为什么rpart有时会生成一个常量模型的问题仍然存在。特别是为什么它只为LOOCV生成其他交叉验证的常数模型。

简而言之:您可以忽略警告,如果需要,请编写自己的R ^ 2来修复警告。