在尝试使用插入符号训练R中的模型时,我遇到一个奇怪的问题:
> bart <- train(x = cor_data, y = factor(outcome), method = "bartMachine")
Error in tuneGrid[!duplicated(tuneGrid), , drop = FALSE] :
nombre de dimensions incorrect 但是,当使用rf、xgbTree、glmnet或svmRadial而不是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])提前感谢您的帮助。
发布于 2021-05-13 13:00:38
由于您的目标是提取bart模型中最重要的变量,因此我假设您愿意绕过插入符号包装器,直接在R bartMachine中执行此操作,这是我成功运行它的唯一方法。
对于我的系统,解决内存问题需要另外两件事:
options(java.parameters = "-Xmx8g")mem_cache_for_speedlibrary(bartMachine)
set_bart_machine_num_cores(16)
bart <- bartMachineCV(X = cor_data, y = factor(outcome), mem_cache_for_speed = F)这将迭代k (2,3和5)的3个值和m (50和200)的2个值,每次运行5次交叉验证,然后使用最佳超参数组合构建bartMachine。根据您的系统,您可能还必须减少内核的数量,但这需要在16个内核上进行20,000个观察值x 12个变量训练集,这需要大约一个小时。您还可以使用k_cvs和num_tree_cvs参数减少它测试的超参数组合的数量。
然后获取变量重要性:
vi <- investigate_var_importance(bart, num_replicates_for_avg = 20)
print(vi)您还可以将其用作具有类似于caret::train()通常返回的对象的predict(bart, new_data=new)的预测模型。这适用于R4.0.5、bartMachine_1.2.6和rJava_1.0-4
https://stackoverflow.com/questions/63040889
复制相似问题