线性回归(Linear Regression)
之前并未做过笔记,所以这篇文章是对线性模型的回顾,对应:
- 第一周:(06)1.6 线性回归模型
- 第一周:(07)1.6 线性回归模型-优化算法
- 第一周:(08)1.6 线性回归模型-模型选择
- 《机器学习》(西瓜书):第3章 线性模型 - 3.1 基本形式
- 《机器学习》(西瓜书):第3章 线性模型 - 3.2 线性回归
- sklearn官方文档
1 线性模型(Linear Models)
给定由d个属性描述的示例
x=(x1,x2,⋯,xd)
x
=
(
x
1
,
x
2
,
⋯
,
x
d
)
,其中
xi
x
i
是
x
x
在第i个属性上的取值,线性模型试图学得一个通过属性的线性组合来进行预测的函数,即:
其中, ω=(ω0,ω1,ω2,⋯,ωd) ω = ( ω 0 , ω 1 , ω 2 , ⋯ , ω d ) 。
注意,在sklearn
中,
ω=(ω1,ω2,⋯,ωd)
ω
=
(
ω
1
,
ω
2
,
⋯
,
ω
d
)
用coef_
表示,而
ω0
ω
0
用intercept_
表示。
sklearn官方文档原文
y^(ω,x)=ω0+ω1x1+ω2x2+⋯+ωpxp y ^ ( ω , x ) = ω 0 + ω 1 x 1 + ω 2 x 2 + ⋯ + ω p x p
Across the module, we designate the vector ω=(ω1,ω2,⋯,ωp) ω = ( ω 1 , ω 2 , ⋯ , ω p ) ascoef_
and ω0 ω 0 asintercept_
.
在sklearn
中,线性模型来自同一个模块,且使用方法一样,伪代码:
# 导入模块
from sklearn import linear_model
# 使用流程
## 1 新建模型
model = linear_model.线性模型(线性模型参数)
## 2 训练模型
model.fit(X_train)
## 3 预测结果
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
2 线性回归(Linear Regression)与最小二乘法(Ordinary Least Squares)
给定数据集 D={(x1,y1),(x2,y2),⋯,(xm,ym)} D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m ) } ,其中 xi=(xi1,xi2,⋯,xid)T,yi∈R x i = ( x i 1 , x i 2 , ⋯ , x i d ) T , y i ∈ R 。
“线性回归”(linear regression)试图学得一个线性模型以尽可能准确地预测输出标记:
为了确定其中的 ω ω 与 b b ,我们将使用回归任务最常用的性能度量方法“均方误差”来衡量 f(x) f ( x ) 与 y y 之间的差别,我们试图让它最小。
而均方误差的几何意义对应了“欧氏距离”(Euclidean distance)。
2.1 最小二乘法(Ordinary Least Squares)
基于均方误差最小化来进行模型求解的方法称为“最小二乘法”(Ordinary Least Squares)。
假设
d=1
d
=
1
,即
x={xi}
x
=
{
x
i
}
,则线性回归的试图学得:
均方误差最小化:
最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。所以,为了使上式最小,分别对 ω,b ω , b 求导:
对 ω ω 求导详细过程:
∂E(ω,b)∂ω=∂(∑mi=1(yi−ωxi−b)2)∂ω=2(∑i=1m(yi−ωxi−b)(yi−ωxi−b)′)=2(∑i=1m(yi−ωxi−b)(−xi))=2(∑i=1m(ωx2i−yixi+bxi))=2(∑i=1m(ωx2i)−∑i=1m(yixi−bxi))=2(ω∑i=1mx2−∑i=1m(yi−b)xi) ∂ E ( ω , b ) ∂ ω = ∂ ( ∑ i = 1 m ( y i − ω x i − b ) 2 ) ∂ ω = 2 ( ∑ i = 1 m ( y i − ω x i − b ) ( y i − ω x i − b ) ′ ) = 2 ( ∑ i = 1 m ( y i − ω x i − b ) ( − x i ) ) = 2 ( ∑ i = 1 m ( ω x i 2 − y i x i + b x i ) ) = 2 ( ∑ i = 1 m ( ω x i 2 ) − ∑ i = 1 m ( y i x i − b x i ) ) = 2 ( ω ∑ i = 1 m x 2 − ∑ i = 1 m ( y i − b ) x i )对 b b 求导详细过程:
∂E(ω,b)∂b=∂(∑mi=1(yi−ωxi−b)2)∂b=2(∑i=1m(yi−ωxi−b)(yi−ωxi−b)′)=2(∑i=1m(yi−ωxi−b)(−1))=2(∑i=1m(ωxi−yi+b))=2(∑i=1mb+∑i=1m(ωxi−yi))=2(mb−∑i=1m(yi−ωxi)) ∂ E ( ω , b ) ∂ b = ∂ ( ∑ i = 1 m ( y i − ω x i − b ) 2 ) ∂ b = 2 ( ∑ i = 1 m ( y i − ω x i − b ) ( y i − ω x i − b ) ′ ) = 2 ( ∑ i = 1 m ( y i − ω x i − b ) ( − 1 ) ) = 2 ( ∑ i = 1 m ( ω x i − y i + b ) ) = 2 ( ∑ i = 1 m b + ∑ i = 1 m ( ω x i − y i ) ) = 2 ( m b − ∑ i = 1 m ( y i − ω x i ) )
然后再令他们等于零,这样可以解得最优解的闭式(closed-form):
直接求解 ω ω (不使用克莱默法则)详细过程:
那么将b带入到第一个式子得:
2(ω∑i=1mx2−∑i=1m(yi−b)xi)ω∑i=1mx2ω∑i=1mx2ω∑i=1mx2ω∑i=1mx2ω∑i=1mx2ω∑i=1mx2−ωm(∑i=1mxi)2ω=0=∑i=1m(yi−b)xi=∑i=1m(yi−1m∑i=1m(yi−ωxi))xi=∑i=1m(yixi−xim∑i=1myi+ωxim∑i=1mxi)=∑i=1myixi−∑i=1m(xim∑i=1myi)+∑i=1m(ωxi⋅1m∑i=1mxi)=∑i=1myixi−∑i=1m(yi⋅1m∑i=1mxi)+ωm(∑i=1mxi)2=∑i=1myi(xi−1m∑i=1mxi)=∑mi=1yi(xi−1m∑mi=1xi)∑mi=1x2i−1m(∑mi=1xi)2,(1m∑i=imxi=x¯,均值是常数),(∑(a∑b)=∑∑(ab)) 2 ( ω ∑ i = 1 m x 2 − ∑ i = 1 m ( y i − b ) x i ) = 0 ω ∑ i = 1 m x 2 = ∑ i = 1 m ( y i − b ) x i ω ∑ i = 1 m x 2 = ∑ i = 1 m ( y i − 1 m ∑ i = 1 m ( y i − ω x i ) ) x i ω ∑ i = 1 m x 2 = ∑ i = 1 m ( y i x i − x i m ∑ i = 1 m y i + ω x i m ∑ i = 1 m x i ) ω ∑ i = 1 m x 2 = ∑ i = 1 m y i x i − ∑ i = 1 m ( x i m ∑ i = 1 m y i ) + ∑ i = 1 m ( ω x i ⋅ 1 m ∑ i = 1 m x i ) , ( 1 m ∑ i = i m x i = x ¯ , 均值是常数 ) ω ∑ i = 1 m x 2 = ∑ i = 1 m y i x i − ∑ i = 1 m ( y i ⋅ 1 m ∑ i = 1 m x i ) + ω m ( ∑ i = 1 m x i ) 2 , ( ∑ ( a ∑ b ) = ∑ ∑ ( a b ) ) ω ∑ i = 1 m x 2 − ω m ( ∑ i = 1 m x i ) 2 = ∑ i = 1 m y i ( x i − 1 m ∑ i = 1 m x i ) ω = ∑ i = 1 m y i ( x i − 1 m ∑ i = 1 m x i ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2
2.2 线性回归(Linear Regression)
放到一般情况,即
x=(x1,x2,⋯,xd)
x
=
(
x
1
,
x
2
,
⋯
,
x
d
)
,试图学得:
这称为“多元线性回归”(multivariate linear regression)。
我们将它适用于所有样本:
其中:
- y=(y1,y2,⋯,ym)T y = ( y 1 , y 2 , ⋯ , y m ) T
-
X=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢11⋮1x11x21⋮xm1x12x22⋮xm2⋯⋯⋱⋯x1dx2d⋮xmd⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢11⋮1xT1xT2⋮xTm⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥ X = [ 1 x 11 x 12 ⋯ x 1 d 1 x 21 x 22 ⋯ x 2 d ⋮ ⋮ ⋮ ⋱ ⋮ 1 x m 1 x m 2 ⋯ x m d ] = [ 1 x 1 T 1 x 2 T ⋮ ⋮ 1 x m T ]
- ω^=(ω;b) ω ^ = ( ω ; b )
和之前类似的,我们得到均方误差最小化:
对 ω^ ω ^ 求导得:
∂Eω^∂ω^=∂((y−Xω^)T(y−Xω^))∂ω^=2XT(Xω^−y) ∂ E ω ^ ∂ ω ^ = ∂ ( ( y − X ω ^ ) T ( y − X ω ^ ) ) ∂ ω ^ = 2 X T ( X ω ^ − y )
同样的令它等于零,这样可以解得最优解的闭式(closed-form):
则可得出多元最终模型:
几乎所有的任务中, XTX X T X 都不是满秩矩阵。此时可解出多个 Xi X i ,选择哪一个作为输出,将由学习算法决定,常见的是引入正则项(regularization)
正则项为空时,也可以称为最小二乘回归。
2.3 sklearn中的线性回归模型
在sklearn
中,导入线性回归:
# 线性回归
from sklearn.linear_model import LinearRegression
# 带交叉验证的线性回归
from sklearn.linear_model import LinearRegressionCV
# 使用和之前介绍的一样,以LinearRegression为例
LR = LinearRegression()
LR.fit(X_train)
y_test_pred = LR.predict(X_test)
3 带正则的线性回归(Linear Regression With Regularizer)
3.1 Lasso(L1正则)
它的目标函数为:
由于 λ||ω||1 λ | | ω | | 1 在 ωj=0 ω j = 0 时,不可w微,所以在梯度下降法进行优化求解时,需要使用次梯度。
在sklearn
中,导入Lasso:
# Lasso
from sklearn.linear_model import Lasso
# 带交叉验证的Lasso
from sklearn.linear_model import LassoCV
# 使用Lars算法的 Lasso
from sklearn.linear_model import LassoLars
# 使用Lars算法训练,带交叉验证的 Lasso
from sklearn.linear_model import LassoLarsCV
# 使用赤池或贝叶斯进行模型选择,使用Lars算法训练的 Lasso
from sklearn.linear_model import LassoLarsIC
# 使用方法同LinearRegression
# 其中 alpha 对应 公式中的 lambda
3.2 Ridge(岭回归)(L2正则)
又称为吉洪诺夫正则化方法(Tikhonov regularization),它的目标函数为:
在sklearn
中,导入Ridge:
# 岭回归
from sklearn.linear_model import Ridge
# 带交叉验证的岭回归
from sklearn.linear_model import RidgeCV
# 使用方法同LinearRegression
# 其中 alpha 对应 公式中的 lambda