数据拟合基本方法

欢迎关注更多精彩
关注我,学习常用算法与数据结构,一题多解,降维打击。
在这里插入图片描述

问题描述

在平面内给定n个点 {Pi=(xi, yi)}, i = [1, n]。

分别使用多项式插值, 拉格朗日插值, 高斯基函数插值, 最小二乘多项式(最多m次方)逼近, 最小二乘多项式(最多m次方)岭回归逼近来拟合函数f(x)

多项式插值

设多项式 f ( x ) = ∑ i = 0 n − 1 a i x i 设多项式f(x) = \displaystyle\sum_{i=0}^{n-1}a_ix^i 设多项式f(x)=i=0n1aixi

对于n个点就有n个方程

{ y 1 = a 0 + a 1 x 1 + a 2 x 1 2 + . . . + a n − 1 x 1 n − 1 y 2 = a 0 + a 1 x 2 + a 2 x 2 2 + . . . + a n − 1 x 2 n − 1 . . . y n = a 0 + a 1 x n + a 2 x n 2 + . . . + a n − 1 x n n − 1 \left \{\begin{array}{lc} y_1=a_0+a_1x_1+a_2x_1^2+...+a_{n-1}x_1^{n-1} \\ y_2=a_0+a_1x_2+a_2x_2^2+...+a_{n-1}x_2^{n-1} \\ ...\\y_n=a_0+a_1x_n+a_2x_n^2+...+a_{n-1}x_n^{n-1} \end{array} \right. y1=a0+a1x1+a2x12+...+an1x1n1y2=a0+a1x2+a2x22+...+an1x2n1...yn=a0+a1xn+a2xn2+...+an1xnn1


Y = [ y 1 y 2 . . . y n ] Y=\begin{bmatrix} y_1\\y_2\\...\\y_n \end{bmatrix} Y= y1y2...yn

B = [ 1 x 1 x 1 2 . . . x 1 n − 1 1 x 2 x 2 2 . . . x 2 n − 1 . . . . . . . . . . . . . . . 1 x n x n 2 . . . x n n − 1 ] B=\begin{bmatrix} 1&x_1&x_1^2&...&x_1^{n-1}\\1&x_2&x_2^2&...&x_2^{n-1}\\...&...&...&...&...\\1&x_n&x_n^2&...&x_n^{n-1} \end{bmatrix} B= 11...1x1x2...xnx12x22...xn2............x1n1x2n1...xnn1

a = [ a 0 a 1 . . . a n − 1 ] a=\begin{bmatrix} a_0\\a_1\\...\\a_{n-1} \end{bmatrix} a= a0a1...an1

求解方程组Ba=Y, 即可得到a向量,

拉格朗日插值

f ( x ) = ∑ k = 0 n − 1 y k l k ( x ) f(x) = \displaystyle\sum_{k=0}^{n-1}y_kl_k(x) f(x)=k=0n1yklk(x)

上式中 l k ( x ) = ∏ j = 0 , j ≠ k n − 1 x − x j x i − x j 上式中l_k(x) = \displaystyle\prod_{j=0,j\ne k}^{n-1}\frac{x-x_j}{x_i-x_j} 上式中lk(x)=j=0,j=kn1xixjxxj

拉格朗日插值结果与多项式插值法得出的曲线是相同, 计算量比直接解方程少.

牛顿插值也有相同的功能.

高斯基函数插值

设 f ( x ) = a 0 + ∑ i = 1 n a i g i ( x ) 设f(x) = a_0 + \displaystyle\sum_{i=1}^{n}a_ig_i(x) f(x)=a0+i=1naigi(x)

g i ( x ) = e − ( x − x i ) 2 2 σ 2 , σ 为用户给定参数 g_i(x) = e^{-\frac {(x-x_i)^2}{2\sigma^2}}, \sigma为用户给定参数 gi(x)=e2σ2(xxi)2,σ为用户给定参数

a = [ a 0 a 1 a 2 . . . a n ] 为未知数 a=\begin{bmatrix} a_0\\a_1\\a_2\\...\\a_n \end{bmatrix} 为未知数 a= a0a1a2...an 为未知数

点代入f(x)

得到方程组

{ y 1 = a 0 + a 1 g 1 ( x 1 ) + a 2 g 2 ( x 1 ) + . . . + a n g n ( x 1 ) y 2 = a 0 + a 1 g 1 ( x 2 ) + a 2 g 2 ( x 2 ) + . . . + a n g n ( x 2 ) . . . y n = a 0 + a 1 g 1 ( x n ) + a 2 g 2 ( x n ) + . . . + a n g n ( x n ) \left \{\begin{array}{lc} y_1=a_0+a_1g_1(x_1)+a_2g_2(x_1)+...+a_ng_n(x_1) \\ y_2=a_0+a_1g_1(x_2)+a_2g_2(x_2)+...+a_ng_n(x_2) \\ ...\\ y_n=a_0+a_1g_1(x_n)+a_2g_2(x_n)+...+a_ng_n(x_n) \end{array} \right. y1=a0+a1g1(x1)+a2g2(x1)+...+angn(x1)y2=a0+a1g1(x2)+a2g2(x2)+...+angn(x2)...yn=a0+a1g1(xn)+a2g2(xn)+...+angn(xn)

上面只有n条方程, 有n+1个未知数, 我们加入一条构造方程

f ( x 1 + x 2 2 ) = y 1 + y 2 2 f(\frac {x_1+x_2}2) = \frac {y_1+y_2}2 f(2x1+x2)=2y1+y2

求解方程组即可得到a向量.

最小二乘多项式逼近

在多项式插值中, 随着点数增多,曲线阶会升高, 阶数过高时会带来不稳定因素。

我们可以通过固定幂基函数来作拟合逼近。

设 f ( x ) = ∑ i = 0 m a i x i , m < n 设f(x) = \sum_{i=0}^ma_ix_i, m<n f(x)=i=0maixi,m<n

构建方程组

{ y 1 = a 0 + a 1 x 1 + a 2 x 1 2 + . . . + a m x 1 m y 2 = a 0 + a 1 x 2 + a 2 x 2 2 + . . . + a m x 2 m . . . y n = a 0 + a 1 x n + a 2 x n 2 + . . . + a m x n m \left \{\begin{array}{lc} y_1=a_0+a_1x_1+a_2x_1^2+...+a_{m}x_1^{m} \\ y_2=a_0+a_1x_2+a_2x_2^2+...+a_{m}x_2^{m} \\ ...\\y_n=a_0+a_1x_n+a_2x_n^2+...+a_{m}x_n^{m} \end{array} \right. y1=a0+a1x1+a2x12+...+amx1my2=a0+a1x2+a2x22+...+amx2m...yn=a0+a1xn+a2xn2+...+amxnm

上述方程数多于未知数,可以利用最小二乘来得到最优解。

Y = [ y 1 y 2 . . . y n ] Y=\begin{bmatrix} y_1\\y_2\\...\\y_n \end{bmatrix} Y= y1y2...yn

B = [ 1 x 1 x 1 2 . . . x 1 m 1 x 2 x 2 2 . . . x 2 m . . . . . . . . . . . . . . . 1 x n x n 2 . . . x n m ] B=\begin{bmatrix} 1&x_1&x_1^2&...&x_1^{m}\\1&x_2&x_2^2&...&x_2^{m}\\...&...&...&...&...\\1&x_n&x_n^2&...&x_n^{m} \end{bmatrix} B= 11...1x1x2...xnx12x22...xn2............x1mx2m...xnm

a = [ a 0 a 1 . . . a n − 1 ] a=\begin{bmatrix} a_0\\a_1\\...\\a_{n-1} \end{bmatrix} a= a0a1...an1

最小二乘求解

最小二乘优化 m i n ∣ ∣ B a − Y ∣ ∣ 2 , a = ( B T B ) − 1 ( B T Y ) 最小二乘优化min||Ba-Y||^2,a = (B^{T}B)^{-1}(B^TY) 最小二乘优化min∣∣BaY2a=(BTB)1(BTY)

岭回归逼近

在上述逼近算法中, 会存在过拟合的情况,可以加入2模正则项作为惩罚函数,希望系数的模越小越好。

最小二乘优化 m i n ∣ ∣ B a − Y ∣ ∣ 2 + λ ∣ ∣ a ∣ ∣ 2 , λ = 0.5 最小二乘优化min ||Ba-Y||^2+\lambda||a||^2,\lambda=0.5 最小二乘优化min∣∣BaY2+λ∣∣a2λ=0.5

对 ∣ ∣ B a − Y ∣ ∣ 2 + λ ∣ ∣ a ∣ ∣ 2 求导 , 使得导数等于 0 ,得到 对 ||Ba-Y||^2+\lambda||a||^2求导, 使得导数等于0,得到 ∣∣BaY2+λ∣∣a2求导,使得导数等于0,得到

2 B T Y − 2 B T B a − 2 λ I a = 0 2B^TY-2B^TBa-2\lambda I a=0 2BTY2BTBa2λIa=0

a = ( B T B + λ I ) − 1 B T Y a=(B^TB+\lambda I)^{-1}B^TY a=(BTB+λI)1BTY

运行结果

代码链接:
https://gitcode.com/chenbb1989/geometric_model/tree/master/gohw1

sigma=50
在这里插入图片描述
sigma = 20

在这里插入图片描述
高斯基函数拟合如果没有合适的sigma,效果会很不好,可以通过RBF神经网络对sigma和miu进行训练。


本人码农,希望通过自己的分享,让大家更容易学懂计算机知识。创作不易,帮忙点击公众号的链接,帮忙转发,感激不尽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值