R 中的多元多项式回归(预测)
Multivariate Polynomial Regression in R (Prediction)
我正在使用 60/40 测试拆分构建预测模型。
我想建立一个包含 10 个解释变量的多项式回归模型。
首先,我在训练的基础上建立模型,然后在training$y
上进行回归。
model_poly = lm(training$y ~ poly(training$x1, degree=2, raw=TRUE) +
poly(training$x2, degree=2, raw=TRUE) +
poly(training$x3, degree=2, raw=TRUE) +
poly(training$x4, degree=2, raw=TRUE) +
poly(training$x5, degree=2, raw=TRUE) +
poly(training$x6, degree=2, raw=TRUE) +
poly(training$x7, degree=2, raw=TRUE) +
poly(training$x8, degree=2, raw=TRUE) +
poly(training$x9, degree=2, raw=TRUE) +
poly(training$x10, degree=2, raw=TRUE))
之后,我想使用这个模型对新数据 (test
) 进行预测。
poly_predictions = predict(model_poly, poly(test$x1, degree=2, raw=TRUE)+
poly(test$x2, degree=2, raw=TRUE) +
poly(test$x3, degree=2, raw=TRUE) +
poly(test$x4, degree=2, raw=TRUE) +
poly(test$x5, degree=2, raw=TRUE) +
poly(test$x6, degree=2, raw=TRUE) +
poly(test$x7, degree=2, raw=TRUE) +
poly(test$x8, degree=2, raw=TRUE) +
poly(test$x9, degree=2, raw=TRUE) +
poly(test$x10, degree=2, raw=TRUE))
测试数据大约有 20 万行,训练数据大约有 30 万行。
问题是,poly_predictions
具有训练数据的维度,而不是测试数据的维度。因此,有些不对劲。
我在这里错过了什么?用简单的线性模型预测时,比如
model_lm = lm(training$y ~ ., training)
lm_predictions = predict(model_lm, test)
我没有问题。
您过度指定了问题。由于您的模型公式使用 training$x1
,这就是它在进行预测时要查找的确切变量。相反,使用列共享名称这一事实,并将模型创建为
model_poly = lm(y ~ poly(x1, degree=2, raw=T) +
poly(x2, degree=2, raw=T), data=df.training)
这将根据抽象变量 x1
、x2
等生成模型
然后您可以像这样使用预测(您可以省略此处的 poly
调用,因为它已融入模型):
predict(model_poly, df.test)
以产生预期的结果。否则,您通常会收到一条警告,指出您的输出数据与提供的 newdata
不匹配,以预测它们是否具有不同的长度。
我正在使用 60/40 测试拆分构建预测模型。 我想建立一个包含 10 个解释变量的多项式回归模型。
首先,我在训练的基础上建立模型,然后在training$y
上进行回归。
model_poly = lm(training$y ~ poly(training$x1, degree=2, raw=TRUE) +
poly(training$x2, degree=2, raw=TRUE) +
poly(training$x3, degree=2, raw=TRUE) +
poly(training$x4, degree=2, raw=TRUE) +
poly(training$x5, degree=2, raw=TRUE) +
poly(training$x6, degree=2, raw=TRUE) +
poly(training$x7, degree=2, raw=TRUE) +
poly(training$x8, degree=2, raw=TRUE) +
poly(training$x9, degree=2, raw=TRUE) +
poly(training$x10, degree=2, raw=TRUE))
之后,我想使用这个模型对新数据 (test
) 进行预测。
poly_predictions = predict(model_poly, poly(test$x1, degree=2, raw=TRUE)+
poly(test$x2, degree=2, raw=TRUE) +
poly(test$x3, degree=2, raw=TRUE) +
poly(test$x4, degree=2, raw=TRUE) +
poly(test$x5, degree=2, raw=TRUE) +
poly(test$x6, degree=2, raw=TRUE) +
poly(test$x7, degree=2, raw=TRUE) +
poly(test$x8, degree=2, raw=TRUE) +
poly(test$x9, degree=2, raw=TRUE) +
poly(test$x10, degree=2, raw=TRUE))
测试数据大约有 20 万行,训练数据大约有 30 万行。
问题是,poly_predictions
具有训练数据的维度,而不是测试数据的维度。因此,有些不对劲。
我在这里错过了什么?用简单的线性模型预测时,比如
model_lm = lm(training$y ~ ., training)
lm_predictions = predict(model_lm, test)
我没有问题。
您过度指定了问题。由于您的模型公式使用 training$x1
,这就是它在进行预测时要查找的确切变量。相反,使用列共享名称这一事实,并将模型创建为
model_poly = lm(y ~ poly(x1, degree=2, raw=T) +
poly(x2, degree=2, raw=T), data=df.training)
这将根据抽象变量 x1
、x2
等生成模型
然后您可以像这样使用预测(您可以省略此处的 poly
调用,因为它已融入模型):
predict(model_poly, df.test)
以产生预期的结果。否则,您通常会收到一条警告,指出您的输出数据与提供的 newdata
不匹配,以预测它们是否具有不同的长度。