【发布时间】:2016-02-29 08:07:45
【问题描述】:
我使用lars 模型并将其应用于包含数值数据和因子的大型数据集(75 个特征)。
我通过以下方式训练模型
mm <- model.matrix(target~0+.,data=data)
larsMod <- lars(mm,data$target,intercept=FALSE)
这提供了很好的样本内拟合。如果我通过
将它应用到testdatamm.test <- model.matrix(target~0+.,,data=test.data)
predict(larsMod,mm.test,type="fit",s=length(larsMod$arc.length))
然后我收到错误消息
Error in scale.default(newx, object$meanx, FALSE) :
length of 'center' must equal the number of columns of 'x'
我认为这与数据集中的因子水平不同这一事实有关。不过
which(! colnames(mm.test) %in% colnames(mm) )
给出一个空的结果 而
which(! colnames(mm) %in% colnames(mm.test) )
给出 3 个 indizes。 因此 3 个因子水平确实出现在训练集中,但没有出现在测试集中。 为什么这会导致问题?我该如何解决这个问题?
代码爆炸用一个玩具示例说明了这一点。在测试数据集中,因子的级别不为“l3”。
require(lars)
data.train = data.frame( target = c(0,1,0,1,1,1,1,0,0,0), f1 = rep(c("l1","l2","l1","l2","l3"),2), n1 = rep(c(1,2,3,4,5),2))
test.data = data.frame(f1 = rep(c("l1","l2","l1","l2","l2"),2),n1 = rep(c(7,4,3,4,5),2) )
mm <- model.matrix(target~0+f1+n1,data = data.train)
colnames(mm)
length(colnames(mm))
larsMod <- lars(mm,data.train$target,intercept=FALSE)
mm.test <- model.matrix(~0+f1+n1,data=test.data)
colnames(mm.test)
length( colnames(mm.test) )
which(! colnames(mm.test) %in% colnames(mm) )
which(! colnames(mm) %in% colnames(mm.test) )
predict(larsMod,mm.test,type="fit",s=length(larsMod$arc.length))
【问题讨论】:
-
您在创建
mm.test时使用双逗号是故意的吗?你能分享一些(可能是生成的,但类似的)数据吗? -
额外的通讯是故意的,是的......我会尽力提供数据。谢谢!
-
@Heroka 我添加了一个玩具示例。
标签: r machine-learning lars