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

使用虚拟变量执行Ridge回归时出现训练测试矩阵变量数不一致问题

解决训练/测试集虚拟变量数量不一致问题

问题原因

你分别对训练集和测试集调用dummyVars时,函数会基于各自数据集内的分类变量水平生成虚拟变量。如果某个分类变量在训练集和测试集中的水平不完全匹配(比如训练集有某个类别,测试集没有,反之亦然),就会导致生成的虚拟变量数量不一致。

正确解决方案

核心原则是:基于训练集创建虚拟变量转换规则,再用同一规则处理测试集,确保两者的特征空间完全对齐。

修改你的代码如下:

library(caret)

# 保留你原有的数据集划分代码
set.seed(3)
train_index <- sample(1:nrow(Data1), round(nrow(Data1) * 0.7))
train <- Data1[train_index, ]
test <- Data1[-train_index, ]

# 仅基于训练集创建dummyVars转换对象
dummy_transformer <- dummyVars(`Time spent on social media` ~ ., data = train, fullRank = F)

# 用同一个转换对象处理训练集和测试集
train_mat <- predict(dummy_transformer, newdata = train) %>% as.matrix()
test_mat <- predict(dummy_transformer, newdata = test) %>% as.matrix()

# 验证变量数量是否一致
ncol(train_mat) == ncol(test_mat)

额外说明

  • 如果测试集中出现了训练集没有的分类水平,predict()会抛出警告并忽略该水平(对应虚拟变量列全为0)。如果需要处理这种情况,建议在划分数据集前,先将罕见类别合并为“其他”,确保所有分类水平在整个数据集中都有分布。
  • 如果你想用dummy_cols解决问题,同样要基于训练集的水平来统一处理测试集,比如使用keep_levels = TRUE参数并对齐列名,避免分别生成虚拟变量。

内容的提问来源于stack exchange,提问作者Stefano Primiterra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:21:34