7

我正在尝试使用 R caret 模块进行模型生成,并且我想使用一些交叉验证功能。我发现唯一可以与之一起使用的交叉验证功能rpartLOOCV(留下一个交叉验证)。

以下代码引发错误:

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    
4

1 回答 1

9

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

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

剩下两个问题:

  • 如果模型是常数,我不清楚为什么 R^2 计算会失败。caret如果模型预测中没有至少两个不同的值,则代码显式失败。我用没有这些限制的自写计算替换了 R^2 计算。
  • 为什么 rpart 有时会生成常量模型的问题仍然悬而未决。尤其是为什么它只为除 LOOCV 之外的其他交叉验证生成常量模型。

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

于 2012-05-17T17:20:45.550 回答