You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:25:43