写在前面:本文只是我自己的学习笔记,很多我认为基础的东西就不写了,当然很多高深的东西,我还不会也没办法写。很多词汇也没用标准的定义,不是我不知道标准定义是什么,而是我觉得那些翻译的词汇晦涩难懂,还是用通俗语言写出来更好!
0、算法简介
线性回归可以对连续型的数据做出预测,线性回归的预测一般是根据线性回归方程(regression equation)进行预测,一般线性回归方程如下写法:
y
=
w
1
∗
x
1
+
w
2
∗
x
2
+
.
.
.
+
w
n
∗
x
n
+
b
y = w_1*x_1+w_2*x_2+...+w_n*x_n+b
y=w1∗x1+w2∗x2+...+wn∗xn+b
这里,w1,w2,… wn 称为回归系数(regression weights)
b 称为截距(intercept),不过计算的时候可以把b写在w里面
线性回归意味着可以将输入的特征项分别乘以一些常数项,再将结果加起来得到结果值。
另一种称为非线性回归的算法,就不是特征项乘以常数后相加,而是相乘得到结果值。
线性回归的特点:
1、优点:结果易于理解,计算上不复杂
2、缺点:对非线性的数据拟合性不好
本文介绍普通线性回归、局部加权回归、岭回归、Lasso回归。
1、普通线性回归模型
1.1 理论知识
在实际问题中,我们会有一堆输入数据的特征值,可以存在矩阵大X中(每一行一个样本,每一列是一个特征值),对于每个样本我们也有其数值,可以存放在向量小y中(每一个值代表一个样本的数值),此时y=X*w(我们把每一个样本加一个特征,让其值是1,相当于大X多了一列,那么w也就多了一列,多出来的那列的数值就是b值,这样写起来比较方便),那么我们怎么通过已知的X,y求出w(包含b),以便我们知道一个新样本的特征值X,能预测出他的y值。
下面写一下求解w的方法:
1. 平方误差
我们已知的数值是y,预测出来的数值是y_,y和y_相差的越小,那么说明预测的结果越准确,如果把每一个样本的y和y_的误差简单相加,会使得正负值相互抵消,所以采用平方误差,这也是线性函数的损失函数cost:
(1)
c
o
s
t
=
∑
i
=
1
m
(
y
i
−
x
i
T
w
)
2
cost = \sum^{m}_{i=1}(y_i - x_i^Tw)^2 \tag 1
cost=i=1∑m(yi−xiTw)2(1)
m:样本个数; x:每个样本的所有特征向量
写成矩阵形式如下: (2) c o s t = ( y − X w ) 2 cost = (y-Xw)^2 \tag 2 cost=(y−Xw)2(2)
2. 普通最小二乘法(OLS-ordinary least squares)
已知数值和预测数值的误差越小,那么预测的结果就可靠,也就是说求得的w越准确。这里求最小的误差,当然误差是平方(也就是二乘),因此最小二乘法得名。
误差最小,也就是(1)、(2)式的数值最小,为了计算方便以及和实际运算一致,我们采用(2)式,(2)式中, y y y和 X X X是已知的,(2)式是关于 w w w的函数,因此可以对 w w w求导数,另其导数等于0,即可求出 w w w的最优解。
(2)式对
w
w
w求导数:
(3)
2
(
y
−
X
w
)
(
−
X
)
2(y-Xw)(-X) \tag 3
2(y−Xw)(−X)(3)
(3)式等于0,可得:
(4)
2
(
y
−
X
w
)
(
−
X
)
=
0
2(y-Xw)(-X) = 0 \tag 4
2(y−Xw)(−X)=0(4)
(4)式整理之后,可得:
(5)
X
w
=
y
Xw = y \tag 5
Xw=y(5)
(5)式左右都乘以
X
T
X^T
XT,因为
X
T
X
X^TX
XTX是方阵,方阵是矩阵可逆的充分不必要条件,如果
X
T
X
X^TX
XTX存在逆矩阵(不可逆的情况一会再讨论),则可以求出来
w
w
w的值:
(6)
w
^
=
(
X
T
X
)
−
1
X
T
y
\hat{w} = (X^TX)^{-1}X^Ty \tag 6
w^=(XTX)−1XTy(6)
这样通过最小二乘法,我们就求出来了 w w w的值,因此也就求出来了线性方程。
对于求出来的线性方程的评估,可以使用 R 2 R^2 R2和皮尔森相关系数,关于这两个系数的计算可以参考另一篇学习笔记 R 2 和 皮 尔 森 相 关 系 数 R^2和皮尔森相关系数 R2和皮尔森相关系数
2、局部加权回归模型(Locally Weighted Linear Regression)
下图数据来源于《机器学习实战》Ch08/ex0.txt,算法使用上述普通线性回归模型,红色的线是预测出来的线性回归方程,该方程的 R 2 = 0.97 R^2=0.97 R2=0.97,皮尔森相关系数0.99,整体来看这样的结果已经很好了,但是观察局部,就会发现,局部拟合的并不是很好,这也是线性回归出现的局部欠拟合现象。
为了解决这个问题,可以给每一个样本加权重,所有样本的权重就是一个n_samples维度的权值矩阵W,公式6就变成如下形式:
(7) w ^ = ( X T W X ) − 1 X T W y \hat{w} = (X^TWX)^{-1}X^TWy \tag 7 w^=(XTWX)−1XTWy(7)
LWLR是用核函数对距离预测点近的点赋予更高的权重,一般使用高斯核函数,高斯核对应的权重如下:
(8)
W
[
i
,
i
]
=
e
x
p
(
−
∥
x
i
−
x
∥
2
2
k
2
)
W[i,i] = exp(-\frac{\left\|x_i-x\right\|^2}{2k^2}) \tag 8
W[i,i]=exp(−2k2∥xi−x∥2)(8)
这就是局部加权线性回归,它是一个无参数估计,关键就是这个k值的选择,选择较小的k值,那么核较小,会出现过拟合的情况,如果核较大,会出现欠拟合的情况,如果k=1,则权重就没什么用了。下图是使用k=0.01和k=0.003进行拟合,可以看出k值选取的过小=0.003,会出现过拟合。
还有两篇文章写的很好,最线性回归做了一些补充,列在这里:
3、岭回归模型(Ridge Regression)
当样本的特征比样本数量还多,则输入的矩阵
X
X
X不再是满秩矩阵,则它的逆矩阵就不会存在。这时候引入岭回归,岭回归就是在矩阵
X
T
X
X^TX
XTX上加一个
λ
I
\lambda I
λI,从而使矩阵非奇异,那么岭回归的系数计算公式将变成:
(9)
w
^
=
(
X
T
X
+
λ
I
)
−
1
X
T
y
\hat{w} = (X^TX+\lambda I)^{-1}X^Ty \tag 9
w^=(XTX+λI)−1XTy(9)
这里通过引入
λ
\lambda
λ来限制系数
w
w
w的数值,这就相当于普通最小二乘法加一个限制:
∑
k
=
1
n
w
k
2
<
λ
\sum_{k=1}^{n}w_k^2 < \lambda
k=1∑nwk2<λ
岭回归属于L2正则化,会缩减系数,但是不会把系数缩减到零。
岭回归
λ
\lambda
λ的选择,可以给定很多数值,通过岭际线来选择,选择平滑的那部分的
λ
\lambda
λ数值。
4、Lasso回归模型(Lasso Regression)
Lasso回归也会限制系数 w w w的数值,他对应的约束条件是:
∑ k = 1 n ∣ w k ∣ ≤ λ \sum_{k=1}^{n}|w_k| \leq \lambda k=1∑n∣wk∣≤λ
Lasso回归属于L1正则化,会把系数缩减到零,会产生稀疏的系数矩阵。Lasso回归计算复杂,需要使用二次规划算法。
5、前向逐步回归模型
前向逐步回归算法可以得到与lasso回归差不多的效果,但是算法会更简单一些。
代码实战
代码会上传到github
后续待更新
推荐学习
-
使用 sklearn.preprocessing.PolynomialFeatures 模块 生成多项式特征 模拟 欠拟合和过拟合: