使用ranger软件包进行fit_重采样失败
尝试使用交叉折叠重采样并拟合ranger软件包中的随机森林。没有重采样的拟合是有效的,但一旦我尝试重采样拟合,它就会失败,并出现以下错误 考虑以下使用ranger软件包进行fit_重采样失败,r,cross-validation,data-fitting,tidymodels,r-ranger,R,Cross Validation,Data Fitting,Tidymodels,R Ranger,尝试使用交叉折叠重采样并拟合ranger软件包中的随机森林。没有重采样的拟合是有效的,但一旦我尝试重采样拟合,它就会失败,并出现以下错误 考虑以下df df<-structure(list(a = c(1379405931, 732812609, 18614430, 1961678341, 2362202769, 55687714, 72044715, 236503454, 61988734, 2524712675, 98081131, 1366513385, 48203585, 69
df
df<-structure(list(a = c(1379405931, 732812609, 18614430, 1961678341,
2362202769, 55687714, 72044715, 236503454, 61988734, 2524712675,
98081131, 1366513385, 48203585, 697397991, 28132854), b = structure(c(1L,
6L, 2L, 5L, 7L, 8L, 8L, 1L, 3L, 4L, 3L, 5L, 7L, 2L, 2L), .Label = c("CA",
"IA", "IL", "LA", "MA", "MN", "TX", "WI"), class = "factor"),
c = structure(c(2L, 2L, 1L, 2L, 2L, 1L, 1L, 2L, 1L, 2L, 1L,
2L, 2L, 2L, 1L), .Label = c("R", "U"), class = "factor"),
d = structure(c(3L, 3L, 1L, 3L, 3L, 1L, 1L, 3L, 1L, 3L, 1L,
3L, 2L, 3L, 1L), .Label = c("CAH", "LTCH", "STH"), class = "factor"),
e = structure(c(3L, 2L, 3L, 3L, 1L, 3L, 3L, 3L, 2L, 4L, 2L,
2L, 3L, 3L, 3L), .Label = c("cancer", "general long term",
"psychiatric", "rehabilitation"), class = "factor")), row.names = c(NA,
-15L), class = c("tbl_df", "tbl", "data.frame"))
df%
拟合(a~,数据=df)
但只要我想通过
rf_folds <- vfold_cv(df, strata = c)
fit_resamples(a ~ . ,
rf_spec,
rf_folds)
rf\u folds上面的评论是正确的,这里问题的来源是factor列中的空格。重采样功能和普通旧配件功能目前处理方式不同,我们正在积极研究如何为用户解决这一问题。谢谢你的耐心
同时,我建议设置一个简单的plus a,它将为您处理所有必要的虚拟变量mung
库(tidymodels)
rf_规格%
设置引擎(“游骑兵”)
rf_wf%
添加_型号(rf_规格)%%>%
添加配方(配方(a~,数据=df))
配合(rf_wf,数据=df)
#> ══ 工作流程[培训]═══════════════════════════════════════════════════════════════════════════════════════════
#>预处理器:配方
#>型号:rand_forest()
#>
#> ── 预处理器─────────────────────────────────────────────────────────────────────────────────────────────────
#>0配方步骤
#>
#> ── 模型────────────────────────────────────────────────────────────────────────────────────────────────────────
#>游侠结果
#>
#>电话:
#>ranger::ranger(公式=公式,数据=数据,num.threads=1,verbose=FALSE,seed=sample.int(10^5,1))
#>
#>类型:回归
#>树木数目:500
#>样本量:15
#>自变量数:4
#>Mtry:2
#>目标节点大小:5
#>可变重要性模式:无
#>分割规则:方差
#>OOB预测误差(MSE):4.7042e+17
#>R平方(OOB):0.4341146
使用分层的rf#U折叠#10折叠交叉验证
#>#tibble:9 x 4
#>拆分id.metrics.notes
#>
#>1折叠1
#>2折叠2
#>3折叠3
#>4折叠4
#>折叠
#>6折叠6
#>折叠
#>8折叠8
#>折叠
由(v0.3.0)于2020年3月20日创建。朱莉娅与我打赌,让她得到报应。我得到了相同的答案(我做了她做的事情,但速度较慢):
这是一种bug,我们一直在努力使它不会出错。这很复杂。让我解释一下
ranger
是其公式方法不创建伪变量(因为它不需要伪变量)的少数R包之一
tune
中的基础结构使用工作流
包处理公式,然后将结果数据交给ranger
。默认情况下,工作流会创建虚拟变量,并且由于您的某些因子级别不是有效的R列名(例如,“常规长期”
),因此,ranger()
会引发错误
(我知道你没有使用工作流,但这就是幕后发生的事情)
我们正在做最好的事情,因为大多数用户不知道许多基于树的模型包不会生成虚拟变量。更复杂的是,parsnip
还没有使用工作流,也没有给你一个错误
目前的解决方案
使用简单的配方代替配方:
库(tidymodels)
#> ── 附加包─────────────────────────────────────────────────────────────────────────────────── tidymodels 0.1.0──
#> ✓ 扫帚0.5.4✓ 配方0.1.10
#> ✓ 刻度盘0.0.4✓ rsample 0.0.5
#> ✓ dplyr 0.8.5✓ tibble 2.1.3
#> ✓ ggplot2 3.3.0✓ 调谐0.0.1
#> ✓ 推断0.5.1✓ 工作流0.1.0
#> ✓ 欧防风0.0.5✓ 尺度0.0.5
#> ✓ purrr 0.3.3
#> ── 冲突────────────────────────────────────────────────────────────────────────────────────── tidymodels_冲突()──
#>x purrr::discard()遮罩比例::discard()
#>x dplyr::filter()屏蔽stats::filter()
#>x dplyr::lag()屏蔽stats::lag()
#>x ggplot2::margin()屏蔽拨号::margin()
#>x配方::步骤()遮罩统计::步骤()
df#A tibble:9 x 4
#>拆分id.metrics.notes
#> *
#>1折叠1
#>2折叠2
#>3折叠3
#>4折叠4
#>折叠
#>6折叠6
#>折叠
#>8折叠8
#>折叠
#仅供参考`tune`0.0.2将需要不同的参数顺序:
#rf\u规格%>%fit\u重采样(配方(a~,数据=df),rf\u折叠)
由(v0.3.0)于2020-03-20创建,似乎是一个问题,列中的空格值被转换为虚拟变量
rf_folds <- vfold_cv(df, strata = c)
fit_resamples(a ~ . ,
rf_spec,
rf_folds)