已安装broom开发版仍无法对LiblineaR类模型对象调用tidy()
报错原因
broom包未原生实现LiblineaR类对象的tidy适配方法,和是否安装broom开发版本无关,因此直接调用会触发无对应方法的错误。
解决方案
自定义LiblineaR类的S3泛型适配方法即可,操作如下:
- 运行自定义方法代码:
# 为LiblineaR对象注册broom兼容的tidy方法 tidy.LiblineaR <- function(x, ...) { # 提取模型存储在W槽中的系数向量 raw_coef <- x$W # 若系数无对应特征名(如稀疏文本特征未保留列名),可在此处补充绑定: # names(raw_coef) = 训练模型时使用的特征矩阵的列名 tibble( term = names(raw_coef), estimate = unname(raw_coef) ) }
- 运行原有代码即可正常输出结构化结果:
svm_fit %>% pull_workflow_fit() %>% tidy()
注意事项
- 文本数据通常使用稀疏矩阵作为输入,需确保传入LiblineaR的特征矩阵保留了正确的列名,否则输出的
term列会为空,可手动补充绑定列名后再运行tidy。 - 若模型包含截距项,LiblineaR默认将截距系数存储在系数向量的最后一位,若特征工程未手动添加截距列,可手动为截距项补充term名,代码参考:
names(raw_coef)[length(raw_coef)] = "(Intercept)"。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

