最小二乘直线拟合
作者:互联网
最小二乘法(英文:least square method)是一种常用的数学优化方法,所谓二乘就是平方的意思。这平方一词指的是在拟合一个函数的时候,通过最小化误差的平方来确定最佳的匹配函数,所以最小二乘、最小平方指的就是拟合的误差平方达到最小。
推导过程
问题
以直线拟合为例,已知有一组平面上的点集:\((x_1,y_1), (x_2,y_2), ... (x_n,y_n)\) 。
基于这些点拟合一条直线,设直线方程为: \(y=ax+b\)
那么算法的输入就是这些点集,需要求取的为直线方程的参数\(a,b\)。
这些点距离直线的平方偏差之和为
\[S_\epsilon^2=\sum_{i=1}^{n}(y_i-y)^2 = \sum_{i=1}^{n}(y_i - (ax_i+b))^2 \]以上公式已知的是\(x_i,y_i\), 未知且要求取的是\(a、b\)。
不同的\(a、b\)会得到不同的\(S_\epsilon^2\),求取的是在\(S_\epsilon^2\)最小的时候求取\(a、b\)。
多元函数的极值与最值问题
这是一个二元\(a,b\)函数,此问题实际上就是多元函数的极值与最值问题,要求解函数极值时二元变量数值,这里要用到二元函数取极值的必要条件,即下面这个定理。
那么对 \(S_\epsilon^2\) 求偏导且使得偏导为0,此时 \(S_\epsilon^2\) 取得极值点最小值:
下面公式已知的是\(x_i,y_i\), 未知且要求取的是\(a、b\)。
\[ \begin{aligned} \frac{\partial }{\partial a} S_\epsilon^2 = \frac{\partial }{\partial a} \sum_{i=1}^{n}(y_i - (ax_i+b))^2 = 0 \newline \frac{\partial }{\partial b} S_\epsilon^2 = \frac{\partial }{\partial b} \sum_{i=1}^{n}(y_i - (ax_i+b))^2 = 0 \end{aligned} \]求偏导过程
这里主要用到下面几个求导规则
加减规则
函数 \(f(x) \pm g(x)\) 的导数 \(f'(x) \pm g'(x)\) 所以 \(\sum\) 可以直接拆解。
\[\frac{\partial }{\partial b} \sum_{i=1}^{n}(y_i - (ax_i+b))^2 = \frac{\partial }{\partial b}[(y_0 - (ax_0+b))^2 ] + \frac{\partial }{\partial b}[(y_1 - (ax_1+b))^2 ] + ... + \frac{\partial }{\partial b} [(y_n - (ax_n+b))^2] \]后面我们只需要看相加的每一项
乘法规则
函数 \(f(x)*g(x)\) 的导数等于 \(f'(x)*g(x)+f(x)*g'(x)\)
所以
\[\frac{\partial }{\partial b} [(y_i - (ax_i+b))^2] = \frac{\partial [y_i - (ax_i+b)]}{\partial b} *(y_i - (ax_i+b)) + (y_i - (ax_i+b)) * \frac{\partial (y_i - (ax_i+b))}{\partial b} = 2 (y_i - (ax_i+b)) * \frac{\partial {(y_i - (ax_i+b))}}{\partial b} \]常量导数是0,一元函数导数是斜率
下面公式 \(x_i,y_i\) 是常数;
由于是求\(b\)的偏导数,\(a\)也认为是常数;
如果是求 \(a\)的偏导数,\(b\)认为是常数;
\[\frac{\partial {(y_i - (ax_i+b))}}{\partial a} = \frac{\partial y_i}{\partial a} - \frac{\partial ax_i}{\partial a} - \frac{\partial b}{\partial a} = 0 - x_i - 0 = -x_i \]基于上面的推理,我们可以得出
\[\begin{aligned} \frac{\partial }{\partial a} S_\epsilon^2 = \sum_{i=1}^{n}(y_i - (ax_i+b))*(-x_i) = 0 \newline \frac{\partial }{\partial b} S_\epsilon^2 = \sum_{i=1}^{n}(y_i - (ax_i+b))*(-1) = 0 \end{aligned} \]求 \(a,b\) 的值
继续往下推,我们可以得到
\[\begin{aligned} (\sum_{i=1}^{n}x_i^2)* a + (\sum_{i=1}^{n}x_i)*b = \sum_{i=1}^{n}x_i*y_i \newline (\sum_{i=1}^{n}x_i)* a + n*b = \sum_{i=1}^{n}y_i \end{aligned} \]参考: 最小二乘直线拟合
从上面,我们可以推理出 \(a,b\)的值
\[\begin{aligned} a = \frac {n*(\sum x_iy_i) - (\sum x_i)*(\sum y_i) } {n * (\sum x_i^2) - (\sum x_i)^2} \newline b = \frac {(\sum x_i^2)*(\sum y_i) - (\sum x_i)*(\sum x_i y_i) } {n * (\sum x_i^2) - (\sum x_i)^2} \end{aligned} \]参考:最小二乘法拟合直线
这样实际计算时,我们只需要计算出
\[\begin{aligned} t1 = \sum x_i \newline t2 = \sum y_i \newline t3 = \sum x_iy_i \newline t4 = \sum x_i^2 \newline a = \frac { n*t3 - t1*t2} {n*t4 - t1^2} \newline b = \frac { t4*t2 - t1* t3 } {n*t4 - t1^2} \end{aligned} \]标签:直线,frac,epsilon,sum,ax,拟合,partial,aligned,二乘 来源: https://www.cnblogs.com/ghj1976/p/zui-xiao-er-cheng-zhi-xian-ni-he.html