You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中用平滑样条生成预测?及MSE计算报错排查

问题解答

1. 错误原因及修正

你遇到的错误是因为predict(smooth.spline(...))返回的是列表对象,包含预测的x值($x)和对应的预测y值($y),直接用列表和数值向量做减法属于非数值操作,触发报错。

修正代码如下:

# 拟合平滑样条模型
fit_training <- smooth.spline(training_dataset$x, training_dataset$y)

# 预测训练集并提取预测值向量
yhat_training <- predict(fit_training, newx = training_dataset$x)$y

# 计算训练MSE
mean((yhat_training - training_dataset$y)^2)

如果你的X_training_set和y_training_set是单独提取的向量,可改为:

yhat_training <- predict(fit_training, newx = X_training_set)$y
mean((yhat_training - y_training_set)^2)

2. 关于smooth.spline的最优Knots选择

R中smooth.spline默认不是直接选择knot的数量,而是通过**广义交叉验证(GCV)**自动选择最优的平滑参数lambda,以此控制样条的平滑程度:

  • 默认设置nknots = min(n, 30)(n为样本量),生成固定数量的knots;
  • 通过GCV选择最优lambda,该参数会惩罚模型复杂度,最终决定有效自由度(Effective Degrees of Freedom),对应拟合的灵活程度;
  • 若需手动指定knot数量,可通过nknots参数设置,例如smooth.spline(x, y, nknots = 15)。

测试集预测示例

对测试集进行预测的逻辑与训练集一致:

# 假设test_dataset为你的测试数据集
yhat_test <- predict(fit_training, newx = test_dataset$x)$y
test_mse <- mean((yhat_test - test_dataset$y)^2)

内容的提问来源于stack exchange,提问作者TFT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 10:35:17