多项式拟合 & 多项式插值
多项式插值,给出一些点,求出这些点所满足的方程的表达式,表达式曲线一定经过每个点
n 次多项式插值 → n + 1 个点 求解 n + 1 元一次方程组 \boxed{n 次多项式插值} \xrightarrow{n+1个点} \boxed{求解 n+1 元一次方程组} n次多项式插值n+1个点求解n+1元一次方程组
多项式拟合,给出一些点,求出与这些点最接近的曲线表达式,表达式不一定经过每个点
n 次多项式拟合 → 最小二乘法 m 个点, m ≥ n + 1 求解 n + 1 元一次方程组 \boxed{n 次多项式拟合} \xrightarrow[最小二乘法]{m 个点,m \ge n+1} \boxed{求解 n+1 元一次方程组} n次多项式拟合m个点,m≥n+1最小二乘法求解n+1元一次方程组
最小二乘法曲线拟合
假设样本数据集 P ( x , y ) P(x, y) P(x,y) 包含数据点 P i ( x i , y i ) , ( i = 1 , 2 , . . . , m ) P_i(x_i, y_i), (i=1, 2, ..., m) Pi(xi,yi),(i=1,2,...,m),来自多项式函数 f ( x ) = a 0 + a 1 x + a 2 x 2 + . . . + a n x n f(x) = a_0 + a_1x + a_2x^2 + ... + a_nx^n f(x)=a0+a1x+a2x2+...+anxn 的多次采样,那么就可以得到方程组:
a 0 + a 1 x i + a 2 x i 2 + . . . + a n x i n = y i , ( i = 1 , 2 , . . , , m , m ≥ n + 1 ) a_0 + a_1x_i + a_2x_i^2 + ... + a_nx_i^n = y_i, (i = 1, 2, ..,, m, m \ge n + 1) a0+a1xi+a2xi2+...+anxin=yi,(i=1,2,..,,m,m≥n+1)
用矩阵可以表示为:
[ 1 x 0 x 0 2 ⋯ x 0 n 1 x 1 x 1 2 ⋯ x 1 n ⋮ ⋮ ⋱ ⋮ 1 x m x m 2 ⋯ x m n ] [ a 0 a 1 ⋮ a m ] = [ y 0 y 1 ⋮ y n ] \begin{bmatrix} 1 & {x_0} & {x_0^2} & {\cdots} & {x_0^n} \\ 1 & {x_1} & {x_1^2} & {\cdots} & {x_1^n} \\ {\vdots} & {\vdots} & {\ddots} & {\vdots} \\ 1 & {x_m} & {x_m^2} & {\cdots} & {x_m^n} \end{bmatrix} \begin{bmatrix} {a_0} \\ {a_1} \\ {\vdots} \\ {a_m} \end{bmatrix} = \begin{bmatrix} {y_0} \\ {y_1} \\ {\vdots} \\ {y_n} \end{bmatrix} 11⋮1x0x1⋮xmx02x12⋱xm2⋯⋯⋮⋯x0nx1nxmn a0a1⋮am = y0y1⋮yn
⇒ X a = Y \Rightarrow Xa = Y ⇒Xa=Y
那么样本数据集的残差平方和可以表示为:
E = ( X a − Y ) T ( X a − Y ) E = (Xa - Y)^T(Xa - Y) E=(Xa−Y)T(Xa−Y)
E E E 对 a a a 求导得到:
∂ E ∂ a = 2 X T X a − 2 X T Y \frac{\partial E}{\partial a} = 2X^TXa - 2X^TY ∂a∂E=2XTXa−2XTY
显然, E E E 是关于 a a a 的二次函数,那么在 ∂ E ∂ a = 0 \frac{\partial E}{\partial a} = 0 ∂a∂E=0 时, E E E取到最小值解得:
a = ( X T X ) − 1 X T Y a = (X^TX)^{-1}X^TY a=(XTX)−1XTY
⇒ \Rightarrow ⇒ 可以直接计算 ( X T X ) − 1 X T Y (X^TX)^{-1}X^TY (XTX)−1XTY,求得拟合参数 a a a,
这种方式有些问题,在求解逆矩阵的过程中可能后出现奇异值,导致误差比较大,需要自定义大数类
继续观察方程组矩阵
X a = Y → ( X T X ) − 1 X T X a = ( X T X ) − 1 X T Y → a = ( X T X ) − 1 X T Y Xa = Y \\ \rightarrow (X^TX)^{-1}X^TXa = (X^TX)^{-1}X^TY \\ \rightarrow a = (X^TX)^{-1}X^TY Xa=Y→(XTX)−1XTXa=(XTX)−1XTY→a=(XTX)−1XTY
考虑到:
X a = Y → X − 1 X a = X − 1 Y → a = X − 1 Y Xa = Y \\ \rightarrow X^{-1}Xa = X^{-1}Y \\ \rightarrow a = X^{-1}Y Xa=Y→X−1Xa=X−1Y→a=X−1Y
由于:
→ \rightarrow → 那么使用高斯消元也可以得到等价的结果,这种方式不需要求逆矩阵,可以只使用初等行变换来实现,不易引入较大的误差
根据这样的方式,实现的多项式拟合类,具有比较可观的性能和精度
等式约束优化问题
消元法:一阶导数等于 0 求驻点,高斯消元
拉格朗日乘子法:多维、高次耦合的非线性约束问题
不等式约束优化问题
对不等式约束条件引入松弛变量,转化为等式约束优化问题
{ m i n f ( X ) X ∈ E n S . t . g i ( X ) ≤ 0 i = 1 , 2 , ⋯ , m \begin{cases} min f(\bf{X}) & \bf{X} \in E^n \\ S.t.g_i(\bf{X}) \leq 0 & i = 1, 2, \cdots, m \end{cases} {minf(X)S.t.gi(X)≤0X∈Eni=1,2,⋯,m
引入松弛变量 ν \nu ν,把不等式约束条件转化为等式约束条件:
g i ( X ) + ν i 2 = 0 , i = 1 , 2 , ⋯ , m g_i(\bf{X}) + \nu _i ^2 = 0, i = 1, 2, \cdots, m \\ gi(X)+νi2=0,i=1,2,⋯,m
引入拉格朗日系数 λ 1 , λ 2 , ⋯ , λ m \lambda _1, \lambda _2, \cdots, \lambda _m λ1,λ2,⋯,λm,构造拉格朗日函数:
L ( X , λ 1 , λ 2 , ⋯ , λ m , ν 1 , ν 2 , ⋯ , ν m ) = f ( X ) − ∑ i = 1 m λ i ( g i ( X ) + ν i 2 ) L(\bf{X}, \lambda _1, \lambda _2, \cdots, \lambda _m, \nu _1, \nu _2, \cdots, \nu _m) = f(\bf{X}) - \sum _{i = 1} ^m \lambda _i (g_i(\bf{X}) + \nu _i ^2) L(X,λ1,λ2,⋯,λm,ν1,ν2,⋯,νm)=f(X)−i=1∑mλi(gi(X)+νi2)
→ \rightarrow →
{ ∂ L ∂ x j = ∂ f ∂ x j − ∑ i = 1 m λ i ∂ g ∂ x j = 0 j = 1 , 2 , ⋯ , n ∂ L ∂ λ i = g i ( X ) + ν i 2 = 0 i = 1 , 2 , ⋯ , m ∂ L ∂ ν i = − 2 λ i ν i i = 1 , 2 , ⋯ , m \begin{cases} \frac{\partial L}{\partial x_j} = \frac{\partial f}{\partial x_j} - \sum _{i = 1} ^m \lambda _i \frac{\partial g}{\partial x_j} = 0 & j = 1, 2, \cdots, n \\ \frac{\partial L}{\partial \lambda _i} = g_i(\bf{X}) + \nu _i ^2 = 0 & i = 1, 2, \cdots, m \\ \frac{\partial L}{\partial \nu _i} = -2 \lambda _i \nu _i & i = 1, 2, \cdots, m \\ \end{cases} ⎩ ⎨ ⎧∂xj∂L=∂xj∂f−∑i=1mλi∂xj∂g=0∂λi∂L=gi(X)+νi2=0∂νi∂L=−2λiνij=1,2,⋯,ni=1,2,⋯,mi=1,2,⋯,m
→ \rightarrow → (2m + n) 个方程,(2m + n) 个未知数,可以使用前面的方法求解方程组
不等式约束优化问题引入松弛变量的作用是为了将不等式约束转化为等式约束,可以这么做的原理:松弛变量是等高线负值,将不等式约束的取值面改为等式约束的取值曲线,但要满足不等式约束条件。这个方法求解得到的解可能不满足原不等式约束条件,需要通过 KKT 条件判定解是否存在,并利用 KKT 条件求解极值
KKT 条件
KKT 条件给出了不等式约束条件的优化问题,存在极值点的必要条件,即通过判定条件来判定解是否存在,并利用 KKT 条件求解极值
定理,对于不等式约束的非线性最优化问题,
{ m i n f ( X ) X ∈ E n S . t g ( X ) ≤ 0 i = 1 , 2 , ⋯ , m f ( X ) , g ( X ) 均可微 \begin{cases} min f(\bf{X}) & \bf{X} \in E^n \\ S.t \ g(\bf{X}) \leq 0 & i = 1, 2, \cdots, m \\ f(\bf{X}), \ g(\bf{X}) 均可微 \end{cases} ⎩ ⎨ ⎧minf(X)S.t g(X)≤0f(X), g(X)均可微X∈Eni=1,2,⋯,m
极值点存在的必要条件是:
{ ∂ f ( X ) ∂ x j + ∑ i = 1 m λ i ∂ g i ( X ) ∂ x j = 0 i = 1 , 2 , ⋯ , m ; j = 1 , 2 , ⋯ , n λ i ≥ 0 ( λ i , K K T f a c t o r ) λ i g i ( X ) = 0 g i ( X ) ≤ 0 \begin{cases} \frac{\partial f(\bf{X})}{\partial x_j} + \sum _{i = 1} ^m \lambda _{i} \frac{\partial g_i(\bf{X})}{\partial x_j} = 0 & i = 1, 2, \cdots, m;\ j = 1, 2, \cdots, n \\ \lambda _i \geq 0 & (\lambda _i, KKT \ factor) \\ \lambda _i g_i(\bf{X}) = 0 \\ g_i(\bf{X}) \leq 0 \\ \end{cases} ⎩ ⎨ ⎧∂xj∂f(X)+∑i=1mλi∂xj∂gi(X)=0λi≥0λigi(X)=0gi(X)≤0i=1,2,⋯,m; j=1,2,⋯,n(λi,KKT factor)
KKT 条件的简单证明和一些说明
引入松弛变量 S i S_i Si,使得:
S i + g i ( X ) = 0 , i = 1 , 2 , ⋯ , m S_i + g_i(\bf{X}) = 0, i = 1, 2, \cdots, m \\ Si+gi(X)=0,i=1,2,⋯,m
引入拉格朗日乘子,构造拉格朗日方程:
L ( X , λ , S ) = f ( X ) + ∑ i = 1 m λ i [ S i + g i ( X ) ] L(\bf{X}, \bf{\lambda}, \bf{S}) = f(\bf{X}) + \sum _{i=1}^m \lambda _i[S_i + g_i(\bf{X})] L(X,λ,S)=f(X)+i=1∑mλi[Si+gi(X)]
那么:
1) ∂ L ∂ x j = ∂ f ∂ x j + ∑ i = 1 m λ i ∂ g ∂ x j = 0 \frac{\partial L}{\partial x_j} = \frac{\partial f}{\partial x_j} + \sum _{i=1}^m \lambda _i \frac{\partial g}{\partial x_j} = 0 ∂xj∂L=∂xj∂f+∑i=1mλi∂xj∂g=0
2) ∂ L ∂ λ i = S i + g i ( X ) = 0 \frac{\partial L}{\partial \lambda _i} = S_i + g_i(\bf{X}) = 0 ∂λi∂L=Si+gi(X)=0,考虑到 S i ≥ 0 S_i \geq 0 Si≥0,那么 g i ( X ) ≤ 0 g_i(\bf{X}) \leq 0 gi(X)≤0
3)考虑到当前的讨论点是 L ( X , λ , S ) L(\bf{X}, \bf{\lambda}, \bf{S}) L(X,λ,S) 的极小值点,那么: d L ≥ 0 → ∂ L ∂ S i d S i ≥ 0 → λ i d S i ≥ 0 dL \geq 0 \rightarrow \frac{\partial L}{\partial S_i} dS_i \geq 0 \rightarrow \lambda _i dS _i \geq 0 dL≥0→∂Si∂LdSi≥0→λidSi≥0,那么不难得到:
{ X 在边界时, d S i ≥ 0 → λ i ≥ 0 X 在边界内时, d S i 可正可负 → λ i = 0 \begin{cases} X 在边界时,dS_i \geq 0 \rightarrow \lambda _i \geq 0 \\ X 在边界内时,dS_i 可正可负 \rightarrow \lambda _i = 0 \\ \end{cases} {X在边界时,dSi≥0→λi≥0X在边界内时,dSi可正可负→λi=0
→ λ i ≥ 0 \rightarrow \lambda _i \geq 0 →λi≥0
4)在边界上时, g i ( X ) = 0 , λ i ≥ 0 g_i(\bf{X}) = 0, \lambda _i \geq 0 gi(X)=0,λi≥0;在边界内时, g i ( X ) ≤ 0 , λ i = 0 g_i(\bf{X}) \leq 0, \lambda _i = 0 gi(X)≤0,λi=0
→ λ i g i ( X ) = 0 \rightarrow \lambda _i g_i(\bf{X}) = 0 →λigi(X)=0
一些说明
凸规划,求最优化问题 P: min f ( x ) \min f(x) minf(x),当 D 为 凸集,f(x) 为凸函数,那么该规划为凸规划
凸集,点集 D 中的任意两点的连线都属于 D,那么 D 就是凸集
凸函数
一阶条件:D 为非空凸集,f(x) 在 D 上的所有一阶偏导数都连续,那么 f(x) 在 D 上严格凸的充要条件为:
f ( x 2 ) − f ( x 1 ) x 2 − x 1 ≥ f ′ ( x 1 ) \frac{f(x_2) - f(x_1)}{x_2 - x_1} \geq f^{'}(x_1) x2−x1f(x2)−f(x1)≥f′(x1)
即,对于 ∀ x , y ∈ D \forall \bf{x}, \bf{y} \in D ∀x,y∈D:
f ( y ) ≥ f ( x ) + ( y − x ) T ∇ f ( x ) f(\bf{y}) \geq f(\bf{x}) + (\bf{y} - \bf{x}) ^T \nabla f(\bf{x}) f(y)≥f(x)+(y−x)T∇f(x)
x = y \bf{x} = \bf{y} x=y 时,等号成立
二阶条件:D 为非空开凸集,f(x) 在 D 上的所有二阶偏导数都连续,那么:
拉格朗日乘子法简单证明 —— 以二维问题为例
如果极值点存在,则极值点满足,目标函数在约束曲线的切线方向的方向导数为 0。目标函数 f ( x ) f(x) f(x) 沿约束曲线 g ( x 1 , x 2 ) = 0 g(x_1, x_2) = 0 g(x1,x2)=0 的切线 s s s 方向的方向导数等于 0,即:
∂ f ∂ s = ∂ f ∂ x 1 × ∂ x 1 ∂ s + ∂ f ∂ x 2 × ∂ x 2 ∂ s = 0 \frac{\partial f}{\partial s} = \frac{\partial f}{\partial x_1} \times \frac{\partial x_1}{\partial s} + \frac{\partial f}{\partial x_2} \times \frac{\partial x_2}{\partial s} = 0 ∂s∂f=∂x1∂f×∂s∂x1+∂x2∂f×∂s∂x2=0
注:方向导数代表了曲线梯度在曲线切线方向的分量,梯度是曲线在该点上升的方向。如果曲线梯度与曲线切线向量的乘积不为 0 ,即梯度与曲线切线不垂直,则在该曲线上,沿着负梯度方向走,必然能找见更小的点
另外,也不难知道,极值点满足约束函数在约束曲线切线方向的导数也为 0:
∂ g ∂ s = ∂ g ∂ x 1 × ∂ x 1 ∂ s + ∂ g ∂ x 2 × ∂ x 2 ∂ s = 0 \frac{\partial g}{\partial s} = \frac{\partial g}{\partial x_1} \times \frac{\partial x_1}{\partial s} + \frac{\partial g}{\partial x_2} \times \frac{\partial x_2}{\partial s} = 0 ∂s∂g=∂x1∂g×∂s∂x1+∂x2∂g×∂s∂x2=0
联立上面两个函数在约束曲线切线的极值点条件可得:
∂ f ∂ x 1 / ∂ g ∂ x 1 = ∂ f ∂ x 2 / ∂ g ∂ x 2 = λ \frac{\partial f}{\partial x_1} / \frac{\partial g}{\partial x_1} = \frac{\partial f}{\partial x_2} / \frac{\partial g}{\partial x_2} = \lambda ∂x1∂f/∂x1∂g=∂x2∂f/∂x2∂g=λ
结合拉格朗日方程和其偏导数等于 0 的方程组:
L ( x 1 , x 2 , λ ) = f ( x 1 , x 2 ) − λ g ( x 1 , x 2 ) { ∂ L ∂ x 1 = ∂ f ∂ x 1 − λ ∂ g ∂ x 1 = 0 ∂ L ∂ x 2 = ∂ f ∂ x 2 − λ ∂ g ∂ x 2 = 0 ∂ L ∂ λ = − g ( x 1 , x 2 ) = 0 L(x_1, x_2, \lambda) = f(x_1, x_2) - \lambda g(x_1, x_2) \\ \begin{cases} \frac{\partial L}{\partial x_1} = \frac{\partial f}{\partial x_1} - \lambda \frac{\partial g}{\partial x_1} = 0 \\ \frac{\partial L}{\partial x_2} = \frac{\partial f}{\partial x_2} - \lambda \frac{\partial g}{\partial x_2} = 0 \\ \frac{\partial L}{\partial \lambda} = -g(x_1, x_2) = 0 \\ \end{cases} L(x1,x2,λ)=f(x1,x2)−λg(x1,x2)⎩ ⎨ ⎧∂x1∂L=∂x1∂f−λ∂x1∂g=0∂x2∂L=∂x2∂f−λ∂x2∂g=0∂λ∂L=−g(x1,x2)=0
3 个未知数,3 个独立方程,原问题可解