【问题标题】:bartMachine in caret train error : incorrect number of dimensionsbartMachine in caret train 错误:维数不正确
【发布时间】:2020-07-22 18:28:06
【问题描述】:

尝试使用插入符号在 R 中训练模型时遇到一个奇怪的问题:

> bart <- train(x = cor_data, y = factor(outcome), method = "bartMachine")
Error in tuneGrid[!duplicated(tuneGrid), , drop = FALSE] : 
 nombre de dimensions incorrect 

但是,当使用 rfxgbTreeglmnetsvmRadial 而不是 bartMachine 时,不会引发错误。 而且dim(cor_data)length(outcome)分别返回[1] 3056 134[1] 3056,说明我的数据集的维度确实没有问题。

我已尝试更改train 中的tuneGrid 参数,这解决了问题,但却导致了这个问题:

Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "pool-89-thread-1"

我的数据集不包含 NA,所有变量都是数字或二进制。

我的目标是提取bart 模型中最重要的变量。例如,我用于随机森林:

rf <- train(x = cor_data, y = factor(outcome), method = "rf")
rfImp <- varImp(rf)
rf_select <- row.names(rfImp$importance[order(- rfImp$importance$Overall)[1:43], , drop = FALSE])

提前感谢您的帮助。

【问题讨论】:

标签: r dataframe r-caret


【解决方案1】:

由于您的目标是提取 bart 模型中最重要的变量,我假设您愿意绕过插入符号包装器并直接在 R bartMachine 中执行此操作,这是我成功运行它的唯一方法。

对于我的系统,解决内存问题还需要两件事:

  1. 重新启动 R 并在加载任何内容之前,分配 8Gb 内存:
options(java.parameters = "-Xmx8g")
  1. 运行bartMachineCV时,关闭mem_cache_for_speed:
library(bartMachine)
set_bart_machine_num_cores(16)
bart <- bartMachineCV(X = cor_data, y = factor(outcome), mem_cache_for_speed = F)

这将遍历 3 个 k 值(2、3 和 5)和 2 个 m 值(50 和 200),每次运行 5 次交叉验证,然后使用最佳超参数组合构建一个 bartMachine。您可能还需要根据您的系统减少内核数量,但这需要大约一个小时,在 16 个内核上的 20,000 个观察 x 12 变量训练集上完成。您还可以使用 k_cvs 和 num_tree_cvs 参数减少它测试的超参数组合的数量。

然后得到变量重要性:

 vi <- investigate_var_importance(bart, num_replicates_for_avg = 20)
print(vi)

您还可以将其用作predict(bart, new_data=new) 的预测模型,类似于caret::train() 通常返回的对象。这适用于 R4.0.5、bartMachine_1.2.6 和 rJava_1.0-4

【讨论】:

    猜你喜欢
    • 2017-04-10
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 2018-03-11
    • 2017-07-20
    • 2017-06-01
    相关资源
    最近更新 更多