r - 尝试使用 gl_model 函数时,数据框具有不同的维度
问题描述
我有一个关于R代码的问题......
当我尝试将功能添加到我的模型中时,我遇到了问题。我们的教授给了我们一些代码来对 Magic The Gathering 卡的价格进行 lasso 回归。如果我按原样运行他的代码,它将起作用。每当我尝试将另一列作为功能添加到他的代码中时,我都会遇到问题。
这是错误:“cbind2(1, newx) %*% nbeta 中的错误:文件 ../MatrixOps/cholmod_sdmult.c 第 90 行中的 Cholmod 错误‘X 和/或 Y 有错误的尺寸’”
我的命令行的屏幕截图 然后,如果我在较大的训练数据集中删除一些列,那么我仍然会得到同样的错误。
在运行代码时,我检查了数据帧“测试”和“训练”的尺寸,并找出了哪些行正在改变测试和训练数据帧。
这些行:
dummies <- dummyVars(future_price ~ ., data = train)
train<-predict(dummies, newdata = train)
test<-predict(dummies, newdata = test)
因此,在运行这些行之前,训练数据集和测试数据集都正好有 23 个变量(列)。运行这三个虚拟行后,测试数据集有 41 列,训练数据集有 47 列。如果除了替换“train”和“test”之外,代码行相同,我真的不明白如何将不同数量的列添加到每个数据帧中。
请帮忙!谢谢。
解决方案
问题是您添加的新功能需要使用转换为因子as.factor
让我们重现您的错误
df <- data.frame(cat = c('A','B','C','B','A'),target=c(0,0,1,1,0))
df$cat <- as.character(df$cat)
train <- df[1:2,]
test <- df[3:5,]
dv_train <- dummyVars(target~.,train)
predict(dv_train,train)
# no column catC is created because in train there is no row where cat=="C"
# catA catB
#1 1 0
#2 0 1
predict(dv_train,test)
# catA catB catC
#3 0 0 1
#4 0 1 0
#5 1 0 0
您可以看到您获得了具有不同列数的数据框,因为您在训练和测试中具有不同数量的级别
为了解决这个问题,你应该在测试和训练之间分割你的数据帧之前将你的所有字符变量转换为因子,这样当 dummyVars 被执行时,每个级别都会创建一个新列
# Convert cat column to factor
df$cat <- as.factor(df$cat)
train <- df[1:2,]
test <- df[3:5,]
dv_train <- dummyVars(target~.,train)
predict(dv_train,train)
# cat.A cat.B cat.C
# 1 1 0 0
# 2 0 1 0
现在有一个 cat C 的列,即使 C 仍然没有出现在 train
推荐阅读
- spring - 根据spring boot中另一个@schedule方法的完成触发@schedule
- swift - NSPopUpButton - 使用 Cocoa 绑定填充动态内容时的奇怪行为
- sql - 填充每个类别的值列表
- vba - 错误时来自 GetAttr 的意外 TRUE 返回值
- html - 如何制作弹性弹出框?
- python - 如何使用循环从用户那里获得有效输入?
- sass - SCSS 字体大小不适用
- graph - 使用节点编辑器方法设计应用程序
- android - ListView 的问题:android.content.res.Resources$NotFoundException:资源 ID #0x102000a 类型 #0x12 无效
- windows - 在 Windows 上运行 docker run 命令