MATLAB Smoothing Spline 拟合

参考

The Elements of Statistical Learning (chapter 5.4)
MATLAB - Smoothing Splines
MATLAB - fit

1. 基础

Smoothing Spline 可以用于离散数据的函数拟合。考虑下面的问题:在所有存在二阶连续导数的函数中寻找拟合函数 f ( x ) f(x) f(x),可以使下面式子的值最小, R S S RSS RSS可以理解为惩罚系数。
R S S ( f , λ ) = ∑ i = 1 N { y i − f ( x i ) } 2 + λ ∫ { f ′ ′ ( t ) } d t RSS(f,\lambda)=\sum_{i=1}^{N}\{y_i-f(x_i)\}^2+\lambda \int\{f^{''}(t)\}dt RSS(f,λ)=i=1N{yif(xi)}2+λ{f(t)}dt
式中 λ \lambda λ是一个常数,称为平滑系数(smoothing parameter)。式子中的前一部分用来衡量拟合曲线与原数据的近似程度,后半部分称为曲率惩罚。 λ \lambda λ的选取原则可以参考下面两种极限情况。

  • λ = 0 \lambda=0 λ=0 f f f可以是任意函数。
  • λ = ∞ \lambda=∞ λ=: 简单的最小二乘直线拟合,因为此时任意非零二阶导数产生的惩罚系数都是都是 ∞ ∞ 而不能被接受,要使RSS最小, f ( x ) = 0 f(x)=0 f(x)=0

这里我们可以思考二阶导数的含义,即函数在某一点斜率的变化率,二阶导数越大,函数曲线的走向就越曲折,因此当 λ = 0 \lambda=0 λ=0,拟合函数 f ( x ) f(x) f(x)可以无限弯曲,经过所有样本点,使误差的平方和为0,从而使RSS最小。而当 λ = ∞ \lambda=∞ λ=,拟合函数 f ( x ) f(x) f(x)无限平滑,以至于成为一条直线。我们总能在 λ ∈ [ 0 , ∞ ) \lambda\in[0, \infty) λ[0,)中找到符合要求的拟合函数 f ( x ) f(x) f(x)

2. MATLAB 应用

MATLAB中所使用的Smoothing Splines代价函数与上面的定义非常类似。
p ∑ i w i ( y i − s ( x i ) ) 2 + ( 1 − p ) ∫ ( d 2 x d x 2 ) 2 d x p\sum_{i}w_i(y_i-s(x_i))^2+(1-p)\int(\frac{d^2x}{dx^2})^2dx piwi(yis(xi))2+(1p)(dx2d2x)2dx
其中权重 w i w_i wi如果没有定义,默认都是1。
p p p的定义域是0到1,即 p ∈ [ 0 , 1 ] p\in[0,1] p[0,1] p p p的取值越小,拟合结果越平滑,而当 p p p的取值越大,拟合结果就越倾向于经过所有的点。具体原因已经在上文中解释,不再赘述。

2.1 拟合

p=0.01
x = [0.3; 0.4; 0.5; 0.6; 0.7; 0.8; 0.9; 1.0];
y = [0; 143; 298; 482; 762; 1290; 2880; 4016];

f = fit(x, y, 'smoothingspline', 'SmoothingParam', 0.01);
plot(f, x, y);

在这里插入图片描述


p=1
x = [0.3; 0.4; 0.5; 0.6; 0.7; 0.8; 0.9; 1.0];
y = [0; 143; 298; 482; 762; 1290; 2880; 4016];

f = fit(x, y, 'smoothingspline', 'SmoothingParam', 0.01);
plot(f, x, y);

在这里插入图片描述

2.2 函数调用

对拟合生成的函数 f ,跟正常函数一样输入参数即可。

x = [0.3; 0.4; 0.5; 0.6; 0.7; 0.8; 0.9; 1.0];
y = [0; 143; 298; 482; 762; 1290; 2880; 4016];

f = fit(x, y, 'smoothingspline', 'SmoothingParam', 1);
f(0.6)
ans =

   482

函数返回结果与原数据一致(取决于拟合的程度)。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值