在矩阵运算的博文中,推导了局部加权线性回归,其实它是为了解决过拟合(over-fitting)和欠拟合(under-fitting)的问题.这里介绍另外一种线性回归解决该问题的方法——正则化的线性回归(Regularized linear regression)$ $

原理推导

首先看一下数据:
RLR_data.png

对于上面的数据,如果我们使用一条直线来拟合,那么肯定是欠拟合;但是如果我们使用高次方程,那么会不会出现过拟合的问题了?
假设方程为:

\[ h_{\theta}(x)=\theta_{0}+\theta_{1}x+\theta_{2}x^{2}+\theta_{3}x^{3}+\theta_{4}x^{4}+\theta_{5}x^{5} \]

按照最小二乘法,有:

\[ J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2} \]

那我们是怎么解决上述的过拟合问题了?
其实也很简单,就是在\(J(\theta)\)中加入正则化项:

\[ J(\theta)=\frac{1}{2m}[\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2}+\lambda \sum_{j=1}^{n}\theta_{j}^{2}] \]

不过值得注意的是正则化的\(\theta\)是从1开始而不是0
接下来还是要给出矩阵的表达式:

\[ \begin{align} &J(\theta)=\frac{1}{2m}[(X\theta-y)^{T}(X\theta-y)+\lambda \phi^{T}\phi]\\ 其中:\\ &\phi=\begin{bmatrix} 0\\ \theta_{1}\\ \theta_{2}\\ \theta_{3}\\ \theta_{4}\\ \theta_{5} \end{bmatrix}=\begin{bmatrix} 0& & & & \\ & 1& & & \\ & & 1& & \\ & & & 1& \\ & & & & 1 \end{bmatrix}*\begin{bmatrix} \theta_{0}\\ \theta_{1}\\ \theta_{2}\\ \theta_{3}\\ \theta_{4}\\ \theta_{5} \end{bmatrix}=\begin{bmatrix} 0& & & & \\ & 1& & & \\ & & 1& & \\ & & & 1& \\ & & & & 1 \end{bmatrix}*\theta\\ 令:\\ &A=\begin{bmatrix} 0& & & & \\ & 1& & & \\ & & 1& & \\ & & & 1& \\ & & & & 1 \end{bmatrix} \end{align} \]

综上:

\[ J(\theta)=\frac{1}{2m}[(X\theta-y)^{T}(X\theta-y)+\lambda\theta^{T}A\theta] \]

最后还是归结于求偏导数的问题:

\[ \begin{align} \frac{\partial J(\theta)}{\partial \theta}&=\frac{1}{2m}[2X^{T}X\theta-2X^{T}y+2\lambda A\theta]\\ \\ &=\frac{1}{m}[X^{T}X\theta-X^{T}y+\lambda A\theta]\\ \\ &=0 \end{align} \]

最后:

\[ \begin{align} \theta&=(X^{T}X+\lambda A)^{-1}X^{T}y\\ \\ &=(X^{T}X+\lambda \begin{bmatrix} 0 & & & & \\ & 1& & & \\ & & 1& & \\ & & & 1& \\ & & & & 1 \end{bmatrix})^{-1}X^{T}y \end{align} \]

代码实现

这里使用normal equation的实现方法,需要说明的是\(\lambda\)是很关键的

1
2
3
4
5
import numpy as np
def rlr(X,y,lambda):
A=np.eye(5)
A[0][0]=0
return np.linalg.inv(X.T.dot(X)+lambda*A).dot(X.T).dot(y)