使用tidymodels构建冰球预期进球模型时fit函数报错求助
冰球预期进球模型构建报错解决
问题描述
我是R语言新手,正跟随指南学习为所在冰球联赛构建预期进球(Expected Goals)模型。运行下方代码时出现错误,想知道是不是漏了什么简单步骤?看起来模型部分似乎尝试调用公式,但我已经在workflow里加了recipe。麻烦帮忙看看!
运行代码
library(tidymodels) library(tidyverse) library(dplyr) set.seed(1972) train_test_split <- initial_split(data = EXPECTED_GOALS_MODEL, prop = 0.80) train_data <- train_test_split %>% training() test_data <- train_test_split %>% testing() xg_recipe <- recipe(Goal ~ DistanceC + Angle + Home + Hand + AgeDec31 + GoalieAgeDec31 + NewX + NewY, data = train_data) %>% update_role(NewX, NewY, new_role = "ID") model <- logistic_reg() %>% set_engine("glm") xg_wflow <- workflow() %>% add_model(model) %>% add_recipe(xg_recipe) xg_wflow xg_fit <- xg_wflow %>% fit(data = train_data)
错误信息
Error in validObject(.Object) : invalid class "model" object: invalid object for slot "formula" in class "model": got class "workflow", should be or extend class "formula" In addition: Warning message: In fit(., data = train_data) : fit failed: Error in as.matrix(y) : argument "y" is missing, with no default fit(x = ., data = train_data)
解决方法
问题出在模型定义时缺少了任务模式声明:
- 逻辑回归在这里是二分类任务(预测
Goal是否发生,取值0或1),tidymodels要求必须明确指定模型的任务模式,否则workflow无法正确识别拟合逻辑。 - 修改模型定义代码,新增
set_mode("classification"):
model <- logistic_reg() %>% set_mode("classification") %>% # 添加这一行指定分类任务 set_engine("glm")
修改后重新运行整个代码流程,fit()函数就能正常执行,完成模型拟合。另外请确认你的Goal变量是0/1的二分类变量,符合逻辑回归的输入要求。
内容的提问来源于stack exchange,提问作者Dooms31
相关产品推荐
相关产品推荐

