我正在尝试使用R caret模块进行模型生成,并且想使用一些交叉验证功能。我发现,与rpart一起使用的唯一交叉验证功能是LOOCV(省去了交叉验证)。

以下代码引发错误:

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



警告消息:在nominalTrainWorkflow(dat = trainData,信息=
trainInfo,方法=方法,:中缺少值
重新抽样的绩效指标。


此错误是什么意思,我该如何解决?我在互联网上搜索此错误消息,但没有一次点击。我将错误追溯到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

最佳答案

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

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

剩下两个问题:


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


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

关于r - 插入符:将rpart以外的内容用于LOOCV时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10503784/

10-12 22:38