使用tidymodels的step_interact构建ames数据集模型时出现异常错误
错误原因分析与修正
问题根源
你遇到的错误来自step_interact()的语法使用不当:在配方的交互项步骤中,直接在公式里使用starts_with()这类变量选择器函数时,配方无法正确解析选择器表达式,导致解析公式时出现"意外结束输入"的错误。
修正方案
需要用terms()函数包裹包含选择器的交互表达式,让配方能够正确识别并处理选择器生成的变量。修正后的配方代码如下:
# 修正后的Recipe ames_rec <- recipe(Sale_Price ~ ., data = ames_train) |> step_log(Gr_Liv_Area, base = 10) |> step_dummy(all_nominal_predictors()) |> step_interact( ~ terms(Gr_Liv_Area : starts_with("Bldg_Type"))) |> # 用terms()包裹选择器表达式 step_zv(all_numeric_predictors()) |> step_normalize(all_numeric_predictors()) |> step_pca(matches("(SF$)|(^Bsmt)|(^Garage)"), num_comp = 5) |> prep()
额外说明
terms()函数的作用是明确告诉配方:当前表达式需要通过变量选择器解析,而非直接当作常规变量名处理。- 若不需要对交互项做标准化,可以调整步骤顺序,将
step_normalize()移至step_interact()之前,避免交互项被纳入标准化范围。
内容的提问来源于stack exchange,提问作者Logos
相关产品推荐
相关产品推荐

