在R中如何使用测试数据计算训练模型的MSE及处理长度不匹配警告
问题原因
你遇到的警告是预测值和测试集真实值长度不匹配导致的,核心问题出在predict()函数的使用上:
predict(Price.Model1)不指定newdata参数时,默认返回的是训练集样本的拟合值,长度和你的train.data样本量一致- 测试集
test.data的样本量是总样本的25%,和训练集长度不一致,两个不等长向量相减时R会触发循环补齐规则,不仅触发警告,计算出的MSE结果也完全错误
正确代码
将predict部分指定测试集作为新数据即可:
mean((test.data$Y.house.price.of.unit.area - predict(Price.Model1, newdata = test.data))^2)
验证方法
你可以运行以下代码确认长度匹配情况:
- 查看测试集真实值长度:
length(test.data$Y.house.price.of.unit.area) - 查看未指定newdata的预测值长度:
length(predict(Price.Model1)) - 查看指定newdata后的预测值长度:
length(predict(Price.Model1, newdata = test.data))
最后一行的长度会和测试集真实值长度完全一致,不会再触发警告,计算出的也是正确的测试集MSE。
内容的提问来源于stack exchange,提问作者user16301499
相关产品推荐
相关产品推荐

