版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a786150017/article/details/83062668
线性回归模型
1. 问题描述
假设有m个样本,n维特征。样本集记为
{(x1(0),x2(0),...xn(0),y0),(x1(1),x2(1),...xn(1),y1),...(x1(m),x2(m),...xn(m),yn)}
问题:对于一个新的样本
(x1(k),x2(k),...xn(k)),它对应的
yk是多少呢?
若y是连续值-回归问题-线性回归模型,y是离散值-分类问题-逻辑回归模型。
样本特征是1维时-简单线性回归;样本特征是多维时-多元线性回归 → 线性表示的是直线/平面/…
2. 模型描述
待估计的模型为
hθ(x1,x2,...xn)=θ0+θ1x1+...+θnxn
此处,
θi为模型参数,
xi为每个样本的特征值。为简化问题,引入特征
x0=1,则
hθ(x1,x2,...xn)=i=0∑nθixi
矩阵形式
hθ(X)=Xθ
其中
⎣⎢⎢⎢⎡x1(0)x1(1)...x1(m)x2(0)x2(1)...x2(m)............xn(0)xn(1)...xn(m)⎦⎥⎥⎥⎤
θ=(θ0,θ1,...,θn)T
3. 模型求解
损失函数 - 均方误差(Q1. 为什么选均方误差?)
J(θ0,θ1...,θn)=i=0∑m(hθ(x0,x1,...xn)−yi)2
矩阵形式
J(θ)=21(Xθ−Y)T(Xθ−Y)
模型求解 - 如何求得参数
θ的值?
最小二乘法对应有两种:线性和非线性。线性最小二乘的解是closed-form (见3.1),而非线性最小二乘没有closed-form,通常用迭代法求解 (见3.2)。
正规方程法通常用来求解线性最小二乘问题。梯度下降法是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。高斯-牛顿法是另一种经常用于求解非线性最小二乘的迭代法)。
显然线性回归的拟合函数是线性的,所以可以用两种方法求解:正规方程法,迭代法。
3.1 正规方程法 - 线性最小二乘
求解过程
损失函数为
J(θ)=21(Xθ−Y)T(Xθ−Y)
根据最小二乘法的原理,损失函数对θ向量求导取0。结果如下式:
∂θ∂J(θ)=XT(Xθ−Y)=0
此处用到以下两个矩阵求导公式:
∂X∂(AX)=AT
∂X∂(XTAX)=2AX,A为对称阵
对等式整理如下:
XTXθ=XTY
两边同时左乘
(XTX)−1,得到
θ=(XTX)−1XTY
分析
求逆操作 - 求逆十分耗时(假设
XTX尺寸n x n,特征数n超过1w时建议用迭代法),此外
XTX的逆矩阵可能不存在
应用场景 - 拟合函数是线性时才可以用
3.2 梯度下降法
迭代法 - 在每一步update未知量逐渐逼近解,可以用于各种各样的问题(包括最小二乘),比如求的不是误差的最小平方和而是最小立方和。
求解过程
输入:损失函数
J(θ)=21(Xθ−Y)T(Xθ−Y),初始值
θ,步长
α
损失函数的梯度:
∂θ∂J(θ)=XT(Xθ−Y)
更新方程:
θ=θ−α∂θ∂J(θ)=θ−αXT(Xθ−Y)
直到
Δθ小于阈值
ε
Δθ=∂θ∂J(θ)<ε
分析
梯度下降法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
diabetes = datasets.load_diabetes()
diabetes_X = diabetes.data[:, np.newaxis, 2]
diabetes_X.shape
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
regr = linear_model.LinearRegression()
regr.fit(diabetes_X_train, diabetes_y_train)
print('Coefficients-w: ', regr.coef_)
print('Interception-b:', regr.intercept_)
diabetes_y_pred = regr.predict(diabetes_X_test)
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)))
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满足线性关系,则模型如下:
lnY=Xθ
称为对数线性回归。
更一般的,考虑单调可微函数
g(.),令
Y=g−1(Xθ)⇒g(Y)=Xθ
这样得到的模型称为"广义线性模型"。显然,对数线性回归是
g(.)=ln(.)的特例。而逻辑回归是广义线性模型下
g(.)=sigmoid(.)的特例。
7. 拓展 - 其他知识点
优化方法 - 梯度下降法(批量梯度下降/随机梯度下降/小批量梯度下降)、动量法、Adam等
正则项 - L1和L2区别、防止过拟合的方法?
Q&A
Q1. 为什么选均方误差?
- 为了回归分析,通常需要对随机误差项的概率分布做一些假设。误差服从高斯分布[PDF的指数项上包含差值平方],不考虑方差,然后利用最大似然估计,可以推出损失函数的表达式。(可以了解下高斯-马尔可夫定理)
- 最小二乘法的思想 - 选择未知参数,使得理论值与观测值之差的平方和达到最小(二乘就是平方的意思)
Q2.为什么梯度反方向是函数值局部下降最快的方向?
以一个二元函数为例
f(x,y),
1 - 梯度是函数在各坐标轴方向上的变化率,比如梯度
∇f(x0,y0)是函数在
(x0,y0)上关于x轴和y轴的变化率
∇f(x,y)=(fx(x,y)fy(x,y))
2 - 对于一个任意单位方向
u=(cosα,sinα)T,假设
α 是u和x轴的夹角,那么函数
f(x,y)在u这个方向上的变化率为
fx(x,y)cosα+fy(x,y)sinα=∇f(x,y)T(cosαsinα)=∇f(x,y)Tu
也就是两个向量的点积。
3 - 我们知道向量点积的结果和向量本身的大小以及两者夹角相关,假设
∇f(x0,y0)和u的夹角为θ,那么函数
f(x,y)在u这个方向上的变化率可以写成
∇f(x,y)Tu=∥∇f(x,y)∥2∥u∥2cosθ=∥∇f(x,y)∥2cosθ
4 -
cosθ 的取值范围为[−1,1]。
当
cosθ=1时,函数变化率最大(上升最快),此时u和梯度
∇f(x0,y0)同方向;
当
cosθ=−1时,函数变化率最小(下降最快),此时u是梯度
∇f(x0,y0)的反方向。
5 - 推广到n元函数,函数f在单位方向u的变化率为
∇fTu
假设
∇f(x,y)和u的夹角为
θ,同样函数f在u这个方向上的变化率可以写成
∇fTu=∥∇f∥2∥u∥2cosθ=∥∇f∥2cosθ
变化率由
cosθ决定。u和梯度
∇f(x,y)同方向,上升最快;u和梯度
∇f(x,y)反方向,下降最快。
Q3. 为什么牛顿法收敛更快?
通俗解释- 比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。
Wiki解释- 几何上来说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面。通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
Ref
线性回归原理小结
为什么线性回归模型中要假设随机误差等方差并且服从正态分布?
线性模型与高斯-马尔科夫定理
为什么梯度反方向是函数值局部下降最快的方向?
知乎 - 最优化问题中,牛顿法为什么比梯度下降法求解需要的迭代次数更少?
sklearn官方文档