1
我期待着我在这里忽略一些显而易见的事情。预测的线性回归的预测数量不同
我试图建立过度拟合的演示。我有一个二次生成函数,我已经绘制了20个样本,现在我想要拟合递增程度的多项式线性模型到采样数据。
由于某种原因,无论我使用哪种模型,每次运行predict
时,都会返回N个预测值,其中N是用于训练模型的记录数。无论多项式的式中的程度,其中包括简单的情况'y~x'
的
set.seed(123)
N=20
xv = seq(1,5,length.out=1e4)
x=sample(xv,N)
gen=function(v){v^2 + 2*rnorm(length(v))}
y=gen(x)
df = data.frame(x,y)
# convenience function for building formulas for polynomial regression
build_formula = function(N){
fpart = paste(lapply(2:N, function(i) {paste('+ poly(x,',i,',raw=T)')} ), collapse="")
paste('y~x',fpart)
}
## Example:
## build_formula(4)="y~x + poly(x, 2 ,raw=T)+ poly(x, 3 ,raw=T)+ poly(x, 4 ,raw=T)"
model = lm(build_formula(10), data=df)
predict(model, data=xv) # returns 20 values instead of 1000
predict(model, data=1) # even *this* spits out 20 results. WTF?
这种现象是本:
formulas = sapply(c(2,10,20), build_formula)
formulas = c('y~x', formulas)
pred = lapply(formulas
,function(f){
predict(
lm(f, data=df)
,data=xv)
})
lapply(pred, length) # 4 x 20 predictions, expecting 4 x 1000
# unsuccessful sanity check
m1 = lm('y~x', data=df)
predict(m1,data=xv)
这是我疯狂。我究竟做错了什么?
你是个美丽的人。是的,当我更改为'newdata'时,我收到了警告,但我只是用'newdata = list(x = x)'修复了它们,这基本上是一样的。认为这很简单。谢谢! –
其实'预测(m1)'会和'预测(m1,newdata = list(x = x))一样' –
大卫,我认为他也很漂亮:)。 – Arun