在项目工程中,经常需要使用观测数据去估计模型的参数,通过先验知识确定模型本身,再通过观测数据进行估计,得到模型参数。比如有一组观测数据
(x_1,y_1),(x_2,y_2),...,(x_i,y_i)
若xy之间存在线性关系,则可以确定模型为
y=ax+b
此时模型中存在2个参数,意味着我们只需要最少2组观测数据就可以确定模型参数,既联立二元一次方程组就可以求解出唯一确定解。
但是在实际应用中,观测往往存在误差,使得观测数据与真实模型之间存在一定的偏差,所以我们总会做多次观测,在n组观测数据中,由于误差的存在,我们不可能找到一个直线穿过所有的观测点(方程组无解),但我们希望找到一条直线,综合性地接近所有观测数据,使得整体的误差最小。这种求解最优近似解的过程就是最小二乘法的基本思路
一般来说,我们认为观测值的误差服从均值为0的正态分布。假设一个模型的参数为$\theta=(a,b)$, 观测数据为
x_i观测样本为y_i若不考虑误差,则模型的输出值为y=f_\theta(x),观测值的误差记为\epsilon_i,并且符合正态分布,\epsilon_i\sim N(0,\sigma^2),那么观测值的分布可以记为
y_i=f_\theta(x_i)+\epsilon_i\\
y_i\sim N(f_\theta(x_i),\sigma^2)
用最大似然估计的方法,求解出模型参数\theta,使得观测数据y_i的似然函数最大,其中每个样本y_i的概率为
p(y_i|x_i,\theta)=\frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{(y_i-f_\theta(x_i))^2}{2\sigma^2}\right)
则似然函数
L(\theta)=\prod_{i=1}^n p(y_i|x_i,\theta)
对似然函数取对数,将连乘变成求和,得到
\begin{aligned}
\mathrm{J}\left(\theta\right)& =\log(\mathrm{L}(\theta)) \\
&\mathrm{=\sum_{i=1}^m\log p\left(y_i\mid x_i;\theta\right)} \\
&=\sum_{\mathrm{i}=1}^\mathrm{m}\left(\log\frac1{\sqrt{2\pi} \mathrm{\sigma}}\exp\left(-\frac{\left(\mathrm{y}_\mathrm{i} - \mathrm{f}_\mathrm{\theta}\left(\mathrm{x}_\mathrm{i}\right)\right)^2}{2\sigma^2}\right)\right) \\
&=-\frac1{2\sigma^2}\sum_{\mathrm{i}=1}^\mathrm{m}\left(\mathrm{y}_\mathrm{i}-\mathrm{f}_0\left(\mathrm{x}_\mathrm{i}\right)\right)^2-\mathrm{m}\ln\sigma\sqrt{2\pi}
\end{aligned}
去掉常数项,得到
\begin{aligned}
\mathrm{J}\left(\theta\right) \approx-\frac1{2\sigma^2}\sum_{\mathrm{i}=1}^\mathrm{m}\left(\mathrm{y}_\mathrm{i}-\mathrm{f}_0\left(\mathrm{x}_\mathrm{i}\right)\right)^2
\end{aligned}
极大化似然函数等价于最小化目标函数
\arg\max_{\theta}\mathrm{J}(\theta)\Leftrightarrow\arg\min_{\theta}\sum_{{\mathrm{i}=1}}^{{\mathrm{m}}}\left(\mathrm{y}_{{\mathrm{i}}}-\mathrm{f}_{\theta}\left(\mathrm{x}_{{\mathrm{i}}}\right)\right)^{2}
证明 误差的平方和 是合理的拟合标准,最小二乘法的目标函数就是求解使得误差的平方和最小
\mathrm{L=\sum_{i=1}^{n}\left(y_{i}-f(x)\right)^{2}}
线性回归
假设有m个样本,每个样本具有n-1维特征:h_\theta(x_1,x_2,...,x_n) = \theta_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_{n-1}x_{n-1}
\begin{aligned}
&\mathrm{h_{1}=\theta_{0}+\theta_{1}x_{1,1}+\theta_{2}x_{1,2}+\ldots+\theta_{n-1}x_{1,n-1}} \\
&\mathrm{h_2 = \theta_0 + \theta_1 x_{2,1} + \theta_2 x_{2,2} + \ldots + \theta_{n-1} x_{2,n-1}} \\
&: \\
&\mathrm{h_m = \theta_0 + \theta_1 x_{m,1} + \theta_2 x_{m,2} + \ldots + \theta_{n-1} x_{m,n-1}}
\end{aligned}
用矩阵描述上述方程表述为h=X\theta,其中X为m\*n的样本特征矩阵,\theta为n*1的回归系数,h为m*1的观测向量
\begin{bmatrix}
h_{1} \\
h_{2} \\
\vdots \\
h_{m}
\end{bmatrix} = \begin{bmatrix}
1 & x_{1,1} & x_{1,2} & \ldots & x_{1,n-1} \\
1 & x_{2,1} & x_{2,2} & \ldots & x_{2,n-1} \\
\vdots & \ddots & \vdots \\
1 & x_{m,1} & x_{m,2} & \ldots & x_{m,n-1}
\end{bmatrix} \begin{bmatrix}
\theta_{0} \\
\theta_{1} \\
\theta_{2} \\
\vdots \\
\theta_{n-1}
\end{bmatrix}
其目标函数可以表示为
\mathcal{J}(\theta)=\|\mathbf{h}-\mathbf{Y}\|^{2}=\|\mathbf{X}\theta-\mathbf{Y}\|^{2}=(\mathbf{X}\theta-\mathbf{Y})^{{\mathrm{T}}}(\mathbf{X}\theta-\mathbf{Y})
对其化简,并使其导数等于0
\begin{aligned}\mathrm{J}\left(\theta\right)&=\theta^{\mathrm{T}}\mathrm{X}^{\mathrm{T}}\mathrm{X}\theta-\theta^{\mathrm{T}}\mathrm{X}^{\mathrm{T}}\mathrm{Y}-\mathrm{Y}^{\mathrm{T}}\mathrm{X}\theta+\mathrm{Y}^{\mathrm{T}}\mathrm{Y}\\\\\\\\&\frac{\partial}{\partial\theta}\mathrm{J}\left(\theta\right)=2\mathrm{X}^{\mathrm{T}}\mathrm{X}\theta-2\mathrm{X}^{\mathrm{T}}\mathrm{Y}=0\end{aligned}
就可以求得$\theta$的解析解,即
\theta=\left(\mathrm{X}^\mathrm{T}\mathrm{X}\right)^{-1}\mathrm{X}^\mathrm{T}\mathrm{Y}
另外吐槽一嘴,Halo对于Markdown文章的支持真的是灾难性的,特别是公式多的地方还得一个个改,真的吐了,怎么会有支持Markdown编辑插件但是发布出去不支持Markdown下的公式渲染的,后面可能会把这些笔记整理到doc那边去,博客页还是用来写日记好了