使用nls拟合训练集后,predict命令返回训练集值而非测试集值的问题
解决nls predict返回训练集预测值的问题
我来帮你搞定这个问题!你遇到的核心问题在于predict.nls函数对newdata参数的格式要求——它需要一个数据框,而且数据框里的列名必须和你拟合模型时用的自变量名称完全一致(这里是HD)。你直接传入向量HD_test的话,函数没法识别这是新的测试数据,所以默认用训练集的数据生成了预测值。
修正步骤
- 把测试集的
HD_test转换成列名为HD的数据框,确保和模型中的自变量名匹配 - 将这个数据框作为
newdata参数传入predict函数
修正后的完整代码
## Following is train set HD = c(714,715,716.6,717.6) p_l = c(0.5,0.1,0.05826374, 0.005982334) ## Fitting with nls raw_data = data.frame(HD,p_l) exp_fit = nls(p_l~exp(a+b*HD),data = raw_data,trace = T,start = list(a = 0,b = 0)) ## Following is test set HD_test = c(718.2,719.17) # 转换为符合要求的数据框 test_data = data.frame(HD = HD_test) # 生成测试集预测值 p_l_test = predict(exp_fit, newdata = test_data) # 查看结果 print(p_l_test)
这样运行后,p_l_test就会返回对应718.2和719.17这两个测试点的预测值,而不是训练集的结果了。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

