最小二乘法

在项目工程中,经常需要使用观测数据去估计模型的参数,通过先验知识确定模型本身,再通过观测数据进行估计,得到模型参数。比如有一组观测数据 (x_1,y_1),(x_2,y_2),...,(x_i,y_i) 若xy之间存在线性关系,则可以确定模型为 y=ax+b 此时模型中存在2个参数,意味着我们只需要

在项目工程中,经常需要使用观测数据去估计模型的参数,通过先验知识确定模型本身,再通过观测数据进行估计,得到模型参数。比如有一组观测数据

(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那边去,博客页还是用来写日记好了

Comment