机器学习——线性回归

目录

1、最小二乘法及其几何意义

2、最小二乘法-概率视角-高斯噪声-MLE(极大似然估计)

3、正则化-岭回归

4、正则化-岭回归-概率角度-高斯噪声高斯先验


这一阵子重新回顾了机器学习的几个基础模型和一些重要的概念。古人云:“温故而知新,可以为师矣”。且笔者自身在学习方面又有一些较大的问题,即当时沾沾自喜感觉自己学的挺快,掌握的也挺好,随之过几天重新思考同样问题的时候却又忘得一干二净,不得已又只能重新再看一遍。几番如此,学习进度踌躇不前,真是令人不堪其忧,所以特在此处总结几日所学和几夜所想,让自己彻彻底底的“慢”下来。师傅领进门,修行靠个人,废话不多说,正片开始。

假设有N个样本点D = \left \{ \left ( x_{1}, y_{1}\right )\left ( x_{2}, y_{2} \right ), ...,\left (x_{N}, y_{N} \right )\right \},其中x_{i} \in \mathbb{R}^{p},y_{i}\in\mathbb{R},i=1,2,...N

其中X=\left ( x_{1} \ x_{2} \ ...\ x_{N}\right )^{T}= \left( \begin{matrix} x_{11} & x_{12} & ... & x_{1p} \\ x_{21} & x_{22} & ... & x_{2p} \\ \vdots & \vdots & & \vdots \\ x_{N1} & x_{N2} & ... & x_{Np} \\ \end{matrix} \right )_{N\times p}Y =\left( \begin{matrix} y_{1} \\ y_{2} \\ \vdots \\ y_{N} \\ \end{matrix} \right )_{N \times 1}

具体拟合示意图如下所示:

机器学习——线性回归_第1张图片 图1. 线性回归拟合示例

1、最小二乘法及其几何意义

图1中红线代表拟合的直线:f(w) = w^{T}x+b

现通过最小二乘估计计算f(w)Y之间的预测误差L(w)

机器学习——线性回归_第2张图片

L(w)从连加形式写成矩阵形式,即:

\\L(w)=\left( w^{T}x_{1}-y_{1} \quad w^{T}x_{1}-y_{1} \quad \cdots \quad w^{T}x_{N}-y_{N}\right ) \left( \begin{matrix} w^{T}x_{1}-y_{1} \\ w^{T}x_{2}-y_{2}\\ \vdots \\ w^{T}x_{N}-y_{N} \end{matrix}\right )\\\\=\left( w^{T}X^{T}-Y^{T}\right )\left(Xw-Y \right )

其中Xw-Yw^{T}X^{T}-Y^{T}的转置,因此

L\left(w \right )=w^{T}X^{T}Xw-w^{T}X^{T}Y-Y^{T}Xw+Y^{T}Y,因为w^{T}X^{T}YY^{T}Xw均为一维实数,所以

L\left(w \right )=w^{T}X^{T}Xw-2w^{T}X^{T}Y+Y^{T}Y,为了让L(w)达到最小值,即\hat{w}=argminL(w),现对L(w)求导

\frac{\partial L(w)}{\partial w}=2X^TXw-2X^TY=0,即可得出

w = (X^TX)^{-1}X^TY

以上是将误差分散到每个样本点,现有误差函数的几何解释:

机器学习——线性回归_第3张图片 图2. 几何角度求出w的估计值

f(w) = w^{T}x=x^T\betax可看成在同一平面上的p维向量(x_1 \ x_2 \ ... \ x_p),Y为图2中所示方向,图2中虚线为Y-X\beta,那么此时样本X所在的平面垂直虚线,即:

X^T(Y-X^T\beta )=0

\beta = (X^TX)^{-1}X^TY

上述表明可从两个角度求得w,从几何角度来看是将误差分散在p维向量上,从坐标轴中来看是将误差分散在各自的样本点上。

2、最小二乘法-概率视角-高斯噪声-MLE(极大似然估计)

假设数据的噪声服从高斯分布,\varepsilon \sim(0,\sigma^2),那么y|x;w\sim N(w^Tx,\sigma ^2),所以有P(y|x;w) = \frac{1}{\sqrt{2\pi}\sigma}exp\left \{ -\frac{(y-w^Tx)^2}{2\sigma^2} \right \}

噪声服从高斯分布的图形化解释如下图所示:

机器学习——线性回归_第4张图片 图3. 噪声服从高斯分布的图形化解释

通过极大似然估计定义如下函数:

\\L(w)=logP(Y|X;w)=log\prod _{i=1}^{N}P(y_i|x_i;w)=\sum _{i=1}^NlogP(y_i|x_i;w)\\ =\sum_{i=1}^{N}log\frac{1}{\sqrt{2\pi}\sigma} +log\ exp\left \{ -\frac{(y_i-w^Tx_i)^2}{2\sigma^2} \right \} \\=\sum_{i=1}^{N}log\frac{1}{\sqrt{2\pi}\sigma} -\frac{(y_i-w^Tx_i)^2}{2\sigma^2}

上式中log\frac{1}{\sqrt{2\pi}\sigma}与 w 无关,所以:

\\\hat{w}=\underset{w}{\arg\max}L(w) \\=\underset{w}{\arg\max}-\frac{(y_i-w^Tx_i)^2}{2\sigma^2}\\

=\underset{w}{\arg\min}(y_i-w^Tx_i)^2\Leftrightarrow L(w) = \sum^N_{i=1}\left \| w^Tx_i-y_i \right \|_2^2

通过上式,即可在概率视角推出最小二乘公式。

3、正则化-岭回归

通过上文我们有损失函数:\\ L(w) = \sum_{i=1}^{N}\left \| w^{T}x_{i}-y_{i} \right \|^{2},并有w = (X^TX)^{-1}X^TY,因为X_{N\times p},如果存在p远远大于N,那么X^TX将在数学上解释为不可逆,在线性拟合方面上来讲容易造成过拟合

为防止过拟合的发生,可以

  • 加数据
  • 特征选择/特征提取
  • 正则化

正则化框架表示为:\underset{w}{\arg\min}[L(w)+\lambda P(w) ],后一项称之为惩罚项penalty。

针对线性回归,有两种正则化方案:

  • L1:Lasso, \quad P(w) = \left \| w \right \|
  • L2: Ridge,\quad P(w) = \left \| w \right \|_2^2 = w^Tw ,L2也成为权值衰减。

加入 L2 正则化的损失函数定义如下:

\\ J(w) = \sum_{i=1}^{N}\left \| w^{T}x_{i}-y_{i} \right \|^{2}+\lambda w^Tw \\=\left( w^{T}X^{T}-Y^{T}\right )\left(Xw-Y \right )+\lambda w^Tw

J\left(w \right )=w^{T}X^{T}Xw-w^{T}X^{T}Y-Y^{T}Xw+Y^{T}Y +\lambda w^Tw,因为w^{T}X^{T}YY^{T}Xw 和 \lambda w^Tw均为一维实数,所以有:

J\left(w \right )=w^{T}(X^{T}X+\lambda I)w-2w^{T}X^{T}Y+Y^{T}Y,此时有 半正定矩阵X^TX 和 对角矩阵\lambda I 一定正定,所以X^{T}X+\lambda I可逆。

为了让J(w)达到最小值,即\hat{w}=\underset{w}{\arg\min} J(w),现对J(w)求导

\frac{\partial J(w)}{\partial w}=2(X^TX+\lambda I)w-2X^TY=0,即可得出

w = (X^TX+\lambda I)^{-1}X^TY

从直观上来说,可以达到抑制过拟合的效果。

4、正则化-岭回归-概率角度-高斯噪声高斯先验

同第2节类似,噪声服从高斯分布\varepsilon \sim(0,\sigma^2),那么y|x;w\sim N(w^Tx,\sigma ^2),所以有P(y|x;w) = \frac{1}{\sqrt{2\pi}\sigma}exp\left \{ -\frac{(y-w^Tx)^2}{2\sigma^2} \right \}

从贝叶斯角度分析,为简化推导,令w\sim N(0,\sigma ^2_0),所以有P(w) = \frac{1}{\sqrt{2\pi}\sigma_0}exp\left \{ -\frac{||w||^2}{2\sigma^2_0} \right \}(注意与 y 的方差不同)

根据贝叶斯公式,我们有:p(w|y) = \frac{p(y|w)\ p(w)}{p(y)},因为 p(y) 与估计\hat{w}无关,所以可省略,即求 p(y|w)\ p(w) 即可。

p(y|w)\ p(w)=\frac{1}{\sqrt{2\pi}\sigma} \frac{1}{\sqrt{2\pi}\sigma_0} exp\left \{ -\frac{(y-w^Tx)^2}{2\sigma^2} -\frac{(y-w^Tx)^2}{2\sigma^2} \right \}

设想我们通过最大后验估计MAP来估计 \hat{w}

\\\hat w =\underset{w}{\arg\max}\ p(w|y) \\ = \underset{w}{\arg\max}\ p(y|w)\ p(w),因为加入\log函数对求 \hat{w} 的没有影响,所以有:

\\\hat w = \underset{w}{\arg\max}\ \log [p(y|w)\ p(w)]

\\\hat w = \underset{w}{\arg\max}\ \log \frac{1}{\sqrt{2\pi}\sigma} \frac{1}{\sqrt{2\pi}\sigma_0}+ \log \exp\left \{ -\frac{(y-w^Tx)^2}{2\sigma^2} -\frac{\left \| w \right \|^2}{2\sigma^2} \right \},左式第一项与 \hat{w} 无关,所以省略,得:

\\\hat w = \underset{w}{\arg\max}\ \left \{ -\frac{(y-w^Tx)^2}{2\sigma^2} -\frac{||w||^2}{2\sigma^2} \right \},第一项和第二项同乘以 2\sigma^2 ,因为存在负号,所以 \arg\max 取反得:

\\\hat w = \underset{w}{\arg\min}\ \left \{ (y-w^Tx)^2+\frac{\sigma_0^2}{\sigma^2}||w||^2 \right \},加上 \sum_{i=1}^N,所以最终 \hat{w} 得最大后验估计为:

\\\hat w = \underset{w}{\arg\min}\ \sum_{i=1}^N\left \{ (y-w^Tx)^2+\frac{\sigma_0^2}{\sigma^2}||w||^2 \right \},即有

J(w) = \sum_{i=1}^N\left \{ (y-w^Tx)^2+\frac{\sigma_0^2}{\sigma^2}||w||^2 \right \},对比第3节得岭回归损失函数定义:\\ J(w) = \sum_{i=1}^{N}\left \| w^{T}x_{i}-y_{i} \right \|^{2}+\lambda w^Tw,可发现两式一致,\lambda = \frac{\sigma^2_0}{\sigma^2}均为惩罚项系数。

上述推导完美诠释了正则化从概率角度与本身定义之间的联系,也进一步表明了频率派贝叶斯派之间的殊途同归。

为更加清楚的说明本文各小节之间的联系,现附上最小二乘估计和极大似然关系图:

机器学习——线性回归_第5张图片 图4. 最小二乘估计与极大似然估计

 

拟合示意图python代码:

#%%
import matplotlib


import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
import pandas as pd

# Load CSV and columns
df = pd.read_csv("Housing.csv")

Y = df['price']
X = df['lotsize']

X=X.values.reshape(len(X),1)
Y=Y.values.reshape(len(Y),1)

# Split the data into training/testing sets
X_train = X[:-250]
X_test = X[-250:]

# Split the targets into training/testing sets
Y_train = Y[:-250]
Y_test = Y[-250:]

# Create linear regression object
regr = linear_model.LinearRegression()

# Train the model using the training sets
regr.fit(X_train, Y_train)

# Plot outputs
plt.scatter(X_test, Y_test,  color='black')
plt.title('Test Data')
plt.xlabel('Size')
plt.ylabel('Price')
plt.xticks(())
plt.yticks(())

# Plot outputs
plt.plot(X_test, regr.predict(X_test), color='red',linewidth=3)

plt.show()
#%%
# 画出训练集的拟合曲线,第一种方法predict
# Plot outputs
plt.scatter(X_train, Y_train,  color='black')
plt.title('Train Data')
plt.xlabel('Size')
plt.ylabel('Price')
plt.xticks(())
plt.yticks(())

# Plot outputs
plt.plot(X_train, regr.predict(X_train), color='red',linewidth=3)

plt.show()

#%%
# 画出训练集的拟合曲线,第二种方法coef_*x+intercept_ 
# Plot outputs
plt.scatter(X_train, Y_train,  color='black')
plt.title('Test Data')
plt.xlabel('Size')
plt.ylabel('Price')
plt.xticks(())
plt.yticks(())

# Plot outputs
plt.plot(X_train, regr.coef_*X_train+regr.intercept_, color='red',linewidth=3)

plt.show()

#%%
# 查看coef_*x+intercept_的值和regr.predict()的值是否相等,相减为0
regr.coef_*X_train+regr.intercept_ - regr.predict(X_train)

代码涉及数据集下载链接:https://vincentarelbundock.github.io/Rdatasets/csv/Ecdat/Housing.csv

参考资料:

  1. 机器学习-白板手推系列
  2. python tutorials: Linear Regression

你可能感兴趣的:(机器学习)