ML模型2:线性回归模型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a786150017/article/details/83062668

线性回归模型

1. 问题描述

假设有m个样本,n维特征。样本集记为 { ( x 1 ( 0 ) , x 2 ( 0 ) , . . . x n ( 0 ) , y 0 ) , ( x 1 ( 1 ) , x 2 ( 1 ) , . . . x n ( 1 ) , y 1 ) , . . . ( x 1 ( m ) , x 2 ( m ) , . . . x n ( m ) , y n ) } \left\{ {(x_1^{(0)},x_2^{(0)},...x_n^{(0)},{y_0}),(x_1^{(1)},x_2^{(1)},...x_n^{(1)},{y_1}),...(x_1^{(m)},x_2^{(m)},...x_n^{(m)},{y_n})} \right\}

问题:对于一个新的样本 ( x 1 ( k ) , x 2 ( k ) , . . . x n ( k ) ) (x_1^{(k)},x_2^{(k)},...x_n^{(k)}) ,它对应的 y k {y_k} 是多少呢?

若y是连续值-回归问题-线性回归模型,y是离散值-分类问题-逻辑回归模型。
样本特征是1维时-简单线性回归;样本特征是多维时-多元线性回归 → 线性表示的是直线/平面/…

2. 模型描述

待估计的模型 h θ ( x 1 , x 2 , . . . x n ) = θ 0 + θ 1 x 1 + . . . + θ n x n {h_\theta }({x_1},{x_2},...{x_n}) = {\theta _0} + {\theta _1}{x_1} + ... + {\theta _n}{x_n}
此处, θ i {\theta _i} 为模型参数, x i {x_i} 为每个样本的特征值。为简化问题,引入特征 x 0 = 1 {x_0} = 1 ,则

h θ ( x 1 , x 2 , . . . x n ) = i = 0 n θ i x i {h_\theta }(x_1, x_2,...x_n) = \sum\limits_{i = 0}^n {{\theta _i}} {x_i}
矩阵形式
h θ ( X ) = X θ {h_{\bf{\theta }}}({\bf{X}}) = {\bf{X\theta }}

其中
[ x 1 ( 0 ) x 2 ( 0 ) . . . x n ( 0 ) x 1 ( 1 ) x 2 ( 1 ) . . . x n ( 1 ) . . . . . . . . . . . . x 1 ( m ) x 2 ( m ) . . . x n ( m ) ] \begin{bmatrix} x_1^{\left( 0 \right)} & x_2^{\left( 0 \right)} & ... & x_n^{\left( 0 \right)} \\ x_1^{\left( 1 \right)} & x_2^{\left( 1 \right)} & ... & x_n^{\left( 1 \right)} \\ ... & ... & ... & ... \\ x_1^{\left( m \right)} & x_2^{\left( m \right)} & ... & x_n^{\left( m \right)} \end{bmatrix}
θ = ( θ 0 , θ 1 , . . . , θ n ) T \theta = {({\theta _0},{\theta _1},...,{\theta _n})^T}

3. 模型求解

损失函数 - 均方误差(Q1. 为什么选均方误差?
J ( θ 0 , θ 1 . . . , θ n ) = i = 0 m ( h θ ( x 0 , x 1 , . . . x n ) y i ) 2 J({\theta _0},{\theta _1}...,{\theta _n}) = \sum\limits_{i = 0}^m {({h_\theta }(} {x_0},{x_1},...{x_n}) - {y_i}{)^2}
矩阵形式
J ( θ ) = 1 2 ( X θ Y ) T ( X θ Y ) J({\bf{\theta }}) = {1 \over 2}{({\bf{X\theta }} - {\bf{Y}})^T}({\bf{X\theta }} - {\bf{Y}})
模型求解 - 如何求得参数 θ \theta 的值?

最小二乘法对应有两种:线性和非线性。线性最小二乘的解是closed-form (见3.1),而非线性最小二乘没有closed-form,通常用迭代法求解 (见3.2)。

正规方程法通常用来求解线性最小二乘问题。梯度下降法是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。高斯-牛顿法是另一种经常用于求解非线性最小二乘的迭代法)。

显然线性回归的拟合函数是线性的,所以可以用两种方法求解:正规方程法,迭代法。

3.1 正规方程法 - 线性最小二乘

求解过程

损失函数为
J ( θ ) = 1 2 ( X θ Y ) T ( X θ Y ) J({\bf{\theta }}) = {1 \over 2}{({\bf{X\theta }} - {\bf{Y}})^T}({\bf{X\theta }} - {\bf{Y}})
根据最小二乘法的原理,损失函数对θ向量求导取0。结果如下式:
θ J ( θ ) = X T ( X θ Y ) = 0 {\partial \over {\partial {\bf{\theta }}}}J({\bf{\theta }}) = {{\bf{X}}^T}({\bf{X\theta }} - {\bf{Y}}) = 0
此处用到以下两个矩阵求导公式:

X ( A X ) = A T {\partial \over {\partial X}}\left( {AX} \right) = {A^T}

X ( X T A X ) = 2 A X , A {\partial \over {\partial X}}\left( {{X^T}AX} \right) = 2AX, A为对称阵

对等式整理如下:
X T X θ = X T Y {{\bf{X}}^T}{\bf{X}}\theta {\rm{ = }}{{\bf{X}}^T}{\bf{Y}}
两边同时左乘 ( X T X ) 1 {\left( {{{\bf{X}}^T}{\bf{X}}} \right)^{{\rm{ - }}1}} ,得到
θ = ( X T X ) 1 X T Y \theta {\rm{ = }}{\left( {{{\bf{X}}^T}{\bf{X}}} \right)^{{\rm{ - }}1}}{{\bf{X}}^T}{\bf{Y}}

分析

求逆操作 - 求逆十分耗时(假设 X T X {{\bf{X}}^T}{\bf{X}} 尺寸n x n,特征数n超过1w时建议用迭代法),此外 X T X {{\bf{X}}^T}{\bf{X}} 的逆矩阵可能不存在
应用场景 - 拟合函数是线性时才可以用

3.2 梯度下降法

迭代法 - 在每一步update未知量逐渐逼近解,可以用于各种各样的问题(包括最小二乘),比如求的不是误差的最小平方和而是最小立方和。

求解过程

输入:损失函数 J ( θ ) = 1 2 ( X θ Y ) T ( X θ Y ) J({\bf{\theta }}) = {1 \over 2}{({\bf{X\theta }} - {\bf{Y}})^T}({\bf{X\theta }} - {\bf{Y}}) ,初始值 θ \theta ,步长 α \alpha

损失函数的梯度:
θ J ( θ ) = X T ( X θ Y ) {\partial \over {\partial \theta }}J\left( \theta \right){\rm{ = }}{{\bf{X}}^T}({\bf{X\theta }} - {\bf{Y}})
更新方程:
θ = θ α θ J ( θ ) = θ α X T ( X θ Y ) \theta {\rm{ = }}\theta -\alpha {\partial \over {\partial {\bf{\theta }}}}J({\bf{\theta }}){\rm{ = }}\theta -\alpha {{\bf{X}}^T}({\bf{X\theta }} - {\bf{Y}})
直到 Δ θ \Delta \theta 小于阈值 ε \varepsilon
Δ θ = θ J ( θ ) < ε \Delta \theta {\rm{ = }}{\partial \over {\partial \theta }}J\left( \theta \right) < \varepsilon

分析

梯度下降法VS最小二乘法

  • 梯度下降法是迭代求解,最小二乘法是计算解析解
  • 梯度下降法需要选择步长和初始值,最小二乘法不需要
  • 样本量小且存在解析解,选择最小二乘法

梯度下降法VS牛顿法

  • 两者都是迭代法
  • 梯度下降法等效一阶泰勒展开,牛顿法等效二阶泰勒展开(Q2.为什么梯度反方向是函数值局部下降最快的方向?)
  • 牛顿法收敛更快(Q3. 为什么?

4. 线性回归模型-优缺点分析

优点:简单易用,易理解;

缺点:对非线性的数据拟合不好

5. code

算法调优 - 初始值选择,步长选择

import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt

# 1) 读取数据
# 从datasets导入数据
diabetes = datasets.load_diabetes()
# 只取第三列数据使用
diabetes_X = diabetes.data[:, np.newaxis, 2]
diabetes_X.shape	# (442, 1)

#2) 划分训练集和测试集
# Split the data into training/testing sets
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
# Split the targets into training/testing sets
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]

#3) 运行线性模型
regr = linear_model.LinearRegression()
regr.fit(diabetes_X_train, diabetes_y_train)

#4) 模型系数结果:
print('Coefficients-w: ', regr.coef_)
print('Interception-b:', regr.intercept_)

#5) 评价指标 - 均方差(Mean Squared Error, MSE)/ 均方根差(Root Mean Squared Error, RMSE)
diabetes_y_pred = regr.predict(diabetes_X_test)
# The mean squared error
print("Mean squared error: %.2f"% mean_squared_error(diabetes_y_test, diabetes_y_pred))
print("Root mean squared error: %.2f"% np.sqrt(mean_squared_error(diabetes_y_test, diabetes_y_pred)))

#6) 画出观察结果
# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test,  color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)

plt.xticks(())
plt.yticks(())
plt.show()

输出为

# 模型系数结果:
Coefficients-w: [938.23786125]
Interception-b: 152.91886182616167

# 评价指标
Mean squared error: 2548.07
Root mean squared error: 50.48

# 画出观察结果
在这里插入图片描述

6. 广义线性模型

输出和输入不是线性关系时,比如lnY和X满足线性关系,则模型如下:
ln Y = X θ \ln Y = X\theta
称为对数线性回归。
更一般的,考虑单调可微函数 g ( . ) g\left( . \right) ,令
Y = g 1 ( X θ ) g ( Y ) = X θ Y = {g^{ - 1}}\left( {X\theta } \right) \Rightarrow g\left( Y \right) = X\theta
这样得到的模型称为"广义线性模型"。显然,对数线性回归是 g ( . ) = ln ( . ) g\left( . \right) = \ln \left( . \right) 的特例。而逻辑回归是广义线性模型下 g ( . ) = s i g m o i d ( . ) g\left( . \right) = sigmoid\left( . \right) 的特例。

7. 拓展 - 其他知识点

优化方法 - 梯度下降法(批量梯度下降/随机梯度下降/小批量梯度下降)、动量法、Adam等
正则项 - L1和L2区别、防止过拟合的方法?

Q&A

Q1. 为什么选均方误差?

  1. 为了回归分析,通常需要对随机误差项的概率分布做一些假设。误差服从高斯分布[PDF的指数项上包含差值平方],不考虑方差,然后利用最大似然估计,可以推出损失函数的表达式。(可以了解下高斯-马尔可夫定理)
  2. 最小二乘法的思想 - 选择未知参数,使得理论值与观测值之差的平方和达到最小(二乘就是平方的意思)

Q2.为什么梯度反方向是函数值局部下降最快的方向?

以一个二元函数为例 f ( x , y ) f\left( {x,y} \right)
1 - 梯度函数在各坐标轴方向上的变化率,比如梯度 f ( x 0 , y 0 ) \nabla f\left( {{x_0},{y_0}} \right) 是函数在 ( x 0 , y 0 ) \left( {{x_0},{y_0}} \right) 上关于x轴和y轴的变化率
f ( x , y ) = ( f x ( x , y ) f y ( x , y ) ) \nabla f\left( {x,y} \right) = \begin{pmatrix} {{f_x}\left( {x,y} \right)} \\ {{f_y}\left( {x,y} \right)} \end{pmatrix}
2 - 对于一个任意单位方向 u = ( cos α , sin α ) T u = {\left( {\cos \alpha ,\sin \alpha } \right)^T} ,假设 α \alpha 是u和x轴的夹角,那么函数 f ( x , y ) f\left( {x,y} \right) 在u这个方向上的变化率为
f x ( x , y ) cos α + f y ( x , y ) sin α = f ( x , y ) T ( cos α sin α ) = f ( x , y ) T u f_x(x,y) \cos \alpha + f_y(x,y) \sin \alpha=\nabla f(x,y)^T\begin{pmatrix}\cos \alpha\\ \sin \alpha\end{pmatrix}=\nabla f(x,y)^Tu
也就是两个向量的点积。
3 - 我们知道向量点积的结果和向量本身的大小以及两者夹角相关,假设 f ( x 0 , y 0 ) \nabla f\left( {{x_0},{y_0}} \right) 和u的夹角为θ,那么函数 f ( x , y ) f\left( {x,y} \right) 在u这个方向上的变化率可以写成
f ( x , y ) T u = f ( x , y ) 2 u 2 cos θ = f ( x , y ) 2 cos θ \nabla f(x,y)^Tu=\|\nabla f(x,y)\|_2 \|u\|_2 \cos \theta=\|\nabla f(x,y)\|_2\cos \theta
4 - cos θ {\cos \theta } 的取值范围为[−1,1]。
cos θ = 1 \cos \theta = 1 时,函数变化率最大(上升最快),此时u和梯度 f ( x 0 , y 0 ) \nabla f\left( {{x_0},{y_0}} \right) 同方向;
cos θ = 1 \cos \theta = -1 时,函数变化率最小(下降最快),此时u是梯度 f ( x 0 , y 0 ) \nabla f\left( {{x_0},{y_0}} \right) 的反方向。
5 - 推广到n元函数,函数f在单位方向u的变化率为
f T u \nabla f^T u
假设 f ( x , y ) \nabla f(x,y) 和u的夹角为 θ θ ,同样函数f在u这个方向上的变化率可以写成
f T u = f 2 u 2 cos θ = f 2 cos θ \nabla f^Tu=\|\nabla f\|_2\|u\|_2 \cos \theta=\|\nabla f\|_2\cos \theta
变化率由 cos θ \cos \theta 决定。u和梯度 f ( x , y ) \nabla f(x,y) 同方向,上升最快;u和梯度 f ( x , y ) \nabla f(x,y) 反方向,下降最快。

Q3. 为什么牛顿法收敛更快?

通俗解释- 比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。
Wiki解释- 几何上来说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面。通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。

Ref
线性回归原理小结
为什么线性回归模型中要假设随机误差等方差并且服从正态分布?
线性模型与高斯-马尔科夫定理
为什么梯度反方向是函数值局部下降最快的方向?
知乎 - 最优化问题中,牛顿法为什么比梯度下降法求解需要的迭代次数更少?
sklearn官方文档

猜你喜欢

转载自blog.csdn.net/a786150017/article/details/83062668