线性回归
给定有由 d d 个属性的描述的示例 ,其中 xi x i 是 x x 在第 个属性上的取值,线性模型是图学一个通过属性的线性组合来进行预测的函数,即: f(x)=w1x1+w2x2+...+wdxd+b f ( x ) = w 1 x 1 + w 2 x 2 + . . . + w d x d + b ,向量的表示: f(x)=wTx+b f ( x ) = w T x + b ,其中 w=(w1;w2;...;wd) w = ( w 1 ; w 2 ; . . . ; w d ) 。 w w 和学到之后,模型就得以确定。
1. 线性回归算法
给定数据集
D={(x1,y1),(x2,y2),...,(xm,ym)}
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
,其中
xi=(xi1;xi2;...xid),yi∈R
x
i
=
(
x
i
1
;
x
i
2
;
.
.
.
x
i
d
)
,
y
i
∈
R
线性回归是图学习一个线性的模型来尽可能准确的预测实际值
y
y
。
为了使得尽可能的接近
yi
y
i
,则需要求解出合理的
w和b
w
和
b
,为了便于计算实际值与预测值之间的偏差,利用均方误差定义一个偏差,目的是使得偏差最小。设
L=∑mi=0[f(xi)−yi]2
L
=
∑
i
=
0
m
[
f
(
x
i
)
−
y
i
]
2
,当
L
L
取得最小的时候,所对应的即为当前线性回归的参数。即
(w∗,b∗)=argw,bmin∑mi=0[f(xi)−yi]2
(
w
∗
,
b
∗
)
=
a
r
g
w
,
b
m
i
n
∑
i
=
0
m
[
f
(
x
i
)
−
y
i
]
2
均方误差对应最常用的欧式距离,具有很好的物理意义,基于均方误差最小化来进行模型求解的方法称为“最小二乘法”
实质:找到一条直线来拟合所有的样本点,使得样本点与预测点之间的欧式距离的和最小。
由上分析可知
(w∗,b∗)=argw,bmin∑mi=0[f(xi)−yi]2
(
w
∗
,
b
∗
)
=
a
r
g
w
,
b
m
i
n
∑
i
=
0
m
[
f
(
x
i
)
−
y
i
]
2
=argw,bmin∑mi=0[yi−wxi−b]2 = a r g w , b m i n ∑ i = 0 m [ y i − w x i − b ] 2
求解 w,b w , b 使得 L L 最小化的过程称为线性回归的最小二乘“参数估计”。可以通过将分别对 w和b w 和 b 求导,得到:
∂L∂w=2(w∑mi=1x2i−∑mi=1(yi−b)xi) ∂ L ∂ w = 2 ( w ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i )
∂L∂b=2(mb−∑mi=1(yi−wxi)) ∂ L ∂ b = 2 ( m b − ∑ i = 1 m ( y i − w x i ) )
令导数等于0,即可求得 w,b w , b 的解析解
w=∑mi=1yi(xi−x¯)∑mi=1x2i−1m(∑mi=1xi)2 w = ∑ i = 1 m y i ( x i − x ¯ ) ∑ i = 1 m x i 2 − 1 m ( ∑ i = 1 m x i ) 2
b=1m∑mi=1(yi−wxi) b = 1 m ∑ i = 1 m ( y i − w x i )
其中: x¯=1m∑mi=1xi x ¯ = 1 m ∑ i = 1 m x i 为 x x 的均值。
为了便于描述,将上述用向量的形式表示,且由于是偏置量,可有 w w 表示,则令
X=⎡⎣⎢⎢⎢⎢x11x21:xm1x12x22:xm2……x1dx2d:xmd11:1⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢xT1 xT2 : xTm11:1⎤⎦⎥⎥⎥⎥ X = [ 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 1 ] 其中 xi=⎡⎣⎢⎢⎢⎢xi1 xi2 : xid⎤⎦⎥⎥⎥⎥ x i = [ x i 1 x i 2 : x i d ]
ŵ=⎡⎣⎢⎢⎢⎢⎢w1w2:wdb⎤⎦⎥⎥⎥⎥⎥ w ^ = [ w 1 w 2 : w d b ] ,其中b是标量
y=[y1,y2,...,ym]T y = [ y 1 , y 2 , . . . , y m ] T
则 L=(y−xŵ)T(y−xŵ) L = ( y − x w ^ ) T ( y − x w ^ ) ,对 ŵ w ^ 求导可得: ∂L∂ŵ=2XT(Xŵ−y) ∂ L ∂ w ^ = 2 X T ( X w ^ − y ) 。
- 当 XTX X T X 满秩时,则 ŵ∗=(XTX)−1XTy w ^ ∗ = ( X T X ) − 1 X T y ,则 f(x)=x̂Ti(XTX)−1XTy f ( x ) = x ^ i T ( X T X ) − 1 X T y 。
一般情况 XTX X T X 是不满秩的,则可能会求解出多个 ŵ w ^ ,为了选择一个合适的解,将由算法的归纳偏好决定,常见的做法是引入正则化项。
当特征数目超过样本数目的时候,则可能出现不满秩的情况。
最小二乘法的实现代码(python):
import numpy as np
import matplotlib.pyplot as plt
def loadData(filepath):
data0 = []
data1 = []
data = []
label = []
f = open(filepath)
for line in f:
line = line[:-1]
line = line.split("\t")
#print line[0]
data0.append(float(line[0]))
data1.append(float(line[1]))
label.append(float(line[2][:-1]))
data.append(data0)
data.append(data1)
return data,label
def draw(x,y,w):
xmat = np.mat(x).T
ymat = np.mat(y).T
xx = xmat.copy()
xx.sort(0)
yy = xx*w
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(xmat[:,1].flatten().A[0],ymat[:,0].flatten().A[0])
ax.plot(xx[:,1],yy)
plt.show()
def Regression(x,y):
x = np.mat(x).T
y = np.mat(y).T
if np.linalg.det( x.T * x ) == 0:
print "cannot do inverse"
return
w = (x.T * x).I * x.T * y
return w
filepath = "ex0.txt"
x,y = loadData(filepath)
w = Regression(x,y) # w[0,0] == b;w[1,0] == w
draw(x,y,w)
结果如下所示:
对于一个给定的数据集,在此数据集上建立线性模型,为了更好的判断线性模型的好坏程度,引入一个对模型好坏的评价指标——相关系数。我们可以通过计算预测值与实际值的相关系数,来判断模型的好坏程度。在python中可以直接使用 corrcoef(y_estimate,y_true) 函数来计算预测值与真实值的相关性。
2、局部加权线性回归
线性回归可能会出现的一个问题就是欠拟合的现象,因为它求的是具有最小均方误差的无偏估计,为了减少欠拟合所造成的预测误差,可以通过引入一些误差降低预测的均方误差,局部加权线性回归就是这样的方法(LWLR)。该算法求解出的 ŵ w ^ 的形式如下所示:
ŵ=(XTWX)−1XTWy w ^ = ( X T W X ) − 1 X T W y , 其中 W W 是一个矩阵,表示每个数据点赋予的权重。
给待预测点附近的每一个点都赋予一定的权重,然后在这个子集上基于最小均方差来进行普通的回归。
局部加权线性回归也存在着问题,增加了计算量,因为对每个点的预测都需要用到整个数据集。
3、岭回归
为了解决 不可逆时,最小二乘法失效的问题,引入岭回归。
岭回归就是在矩阵 XTX X T X 加上一个 λI λ I ( I I 是单位矩阵),从而使矩阵非奇异,进而能够对其求逆,为定义的一个值。则回归系数计算公式变为:
ŵ=(XTX+λI)−1XTy w ^ = ( X T X + λ I ) − 1 X T y
通过一如 λ λ 来限制了所有的 w w 的和,通过引入该惩罚项,能够减少不中要的参数,这个技术在统计学上也叫做衰减。
的求解:通过使得预测误差最小化来取得 λ λ 的值, λ λ 为一个超参数,通过比较不同的 λ λ 时,测试集上的表现来判断 λ λ 的值。
注:为了使用岭回归和缩减技术,需要对特征作标准化处理,具体做法:所有特征减去各自的均值,并除以方差。
4、前行逐步回归
前行逐步回归属于一种贪心算法,,每一步都尽可能的减小误差,通过每个特征来更新 w w ,通过比较偏差判断更新情况。
总结
- 线性回归:最小二乘法,只适用于可逆的情况,使用场合有限;
- 局部加权线性回归:解决了足校二乘法中的欠拟合的问题,但是计算量大,每次都需要计算所有样本点;
- 岭回归:解决了 XTX X T X 不可逆的情况的求解;
- 前向逐步回归:计算简单,通过初始化权值,然后逐步改变权值,达到最优。
参考文献
- 机器学习-西瓜书
- 机器学习实战