Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一致的;错误:为步骤选择的所有列都应为数字“0”;在R tidymodels中尝试套索模型_R_Lasso Regression_Tidymodels - Fatal编程技术网

一致的;错误:为步骤选择的所有列都应为数字“0”;在R tidymodels中尝试套索模型

一致的;错误:为步骤选择的所有列都应为数字“0”;在R tidymodels中尝试套索模型,r,lasso-regression,tidymodels,R,Lasso Regression,Tidymodels,尝试运行我的第一个套索模型,遇到了一些问题。我有一个医学数据集,我试图从大约60个预测因子中预测二分结果(疾病)。尽管在配方阶段已经将所有列都转换为虚拟变量,但在出现错误“为步骤选择的所有列都应该是数字”之前,我已经对网格进行了优化。我减少了预测器的数量,看看这是否改变了什么,但似乎并没有解决它。这种结果是罕见的,大约3%的病例都能看到,所以我不知道这会影响到什么。 代码如下 分为测试和培训数据,并按疾病分层 set.seed(123) df_split <- initial_split(

尝试运行我的第一个套索模型,遇到了一些问题。我有一个医学数据集,我试图从大约60个预测因子中预测二分结果(疾病)。尽管在配方阶段已经将所有列都转换为虚拟变量,但在出现错误“为步骤选择的所有列都应该是数字”之前,我已经对网格进行了优化。我减少了预测器的数量,看看这是否改变了什么,但似乎并没有解决它。这种结果是罕见的,大约3%的病例都能看到,所以我不知道这会影响到什么。 代码如下

分为测试和培训数据,并按疾病分层

set.seed(123)
df_split <- initial_split(df, strata = disease)
df_train <- training(df_split)
df_test <- testing(df_split)
set.seed(123)
df_分割%
添加配方(df配方)
要调整的惩罚值网格

df_reg_grid <- tibble(penalty = 10^seq(-4, -1, length.out = 30))

df_reg_grid您收到的错误来自
step\u medianimpute()
step\u medianimpute()
要求所有变量都是数字,但它是通过
all\u predictors()传递因子变量的

解决这个问题的一种方法是在插补之前重新安排配方,创建虚拟变量

库(配方)
库(模型数据)
数据(ames)
df_配方%
步骤\u medianimpute(所有\u预测器())%>%
步骤虚拟(所有标称值(),-所有结果())%>%
步骤zv(所有预测器())%>%
步骤\u规格化(所有\u预测器())
准备(df_配方)
#>错误:为步骤选择的所有列都应为数字
df_配方%
步骤虚拟(所有标称值(),-所有结果())%>%
步骤\u medianimpute(所有\u预测器())%>%
步骤zv(所有预测器())%>%
步骤\u规格化(所有\u预测器())
准备(df_配方)
#>数据配方
#> 
#>投入:
#> 
#>角色变量
#>结果1
#>预测器73
#> 
#>培训数据包含2930个数据点,无缺失数据。
#> 
#>操作:
#> 
#>来自MS_子类、MS_分区、街道、胡同等的虚拟变量。。。[经过培训]
#>地块临街、地块面积的中值插补。。。[经过培训]
#>零差异过滤器删除2项[已培训]
#>地块临街、地块面积的居中和缩放。。。[经过培训]

由(v1.0.0)创建于2021-04-27。您收到的错误来自
步骤\u medianimpute()
step\u medianimpute()
要求所有变量都是数字,但它是通过
all\u predictors()传递因子变量的

解决这个问题的一种方法是在插补之前重新安排配方,创建虚拟变量

库(配方)
库(模型数据)
数据(ames)
df_配方%
步骤\u medianimpute(所有\u预测器())%>%
步骤虚拟(所有标称值(),-所有结果())%>%
步骤zv(所有预测器())%>%
步骤\u规格化(所有\u预测器())
准备(df_配方)
#>错误:为步骤选择的所有列都应为数字
df_配方%
步骤虚拟(所有标称值(),-所有结果())%>%
步骤\u medianimpute(所有\u预测器())%>%
步骤zv(所有预测器())%>%
步骤\u规格化(所有\u预测器())
准备(df_配方)
#>数据配方
#> 
#>投入:
#> 
#>角色变量
#>结果1
#>预测器73
#> 
#>培训数据包含2930个数据点,无缺失数据。
#> 
#>操作:
#> 
#>来自MS_子类、MS_分区、街道、胡同等的虚拟变量。。。[经过培训]
#>地块临街、地块面积的中值插补。。。[经过培训]
#>零差异过滤器删除2项[已培训]
#>地块临街、地块面积的居中和缩放。。。[经过培训]

由(v1.0.0)于2021-04-27创建

非常感谢您的帮助!非常感谢你的努力!
df_model <- 
  logistic_reg(penalty = tune(), mixture = 1) %>% 
  set_engine("glmnet")
df_recipe <- 
  recipe(dfPyVAN ~ ., data = df_train) %>% 
  step_medianimpute(all_predictors()) %>% 
  step_dummy(all_nominal(), -all_outcomes()) %>% 
  step_zv(all_predictors()) %>% 
  step_normalize(all_predictors())
df_workflow <- 
  workflow() %>% 
  add_model(df_model) %>% 
  add_recipe(df_recipe)
df_reg_grid <- tibble(penalty = 10^seq(-4, -1, length.out = 30))
df_res <- 
  df_workflow %>% 
  tune_grid(validation_set,
            grid = df_reg_grid,
            control = control_grid(save_pred = TRUE),
            metrics = metric_set(roc_auc))