1 - 线性回归问题
1.1 - 问题的提出
在银行发放信用卡时,我们希望算法可以给出针对用户信用卡额度的预测,即当我们收集到用户的一些信息(如下),那么我们如何决定发放给该用户的信用额度呢?
key | value |
---|---|
age | 23 |
annual salary | NTD 1,000,000 |
year in job | 0.5 year |
current debt | 200,000 |
1.2 - 线性回归
这个问题要求我们的模型可以给出实数范围内的预测结果。同样的从最简单的假设出发,对于每一个用户,
x
=
(
x
0
,
x
1
,
x
2
,
⋯
,
x
d
)
x = (x_0 , x_1, x_2, \cdots, x_d)
x=(x0,x1,x2,⋯,xd),利用特征的加权和估计额度。我们希望在已经观测到的资料上用户特征的加权和可以很好的拟合用户的额度。
y
=
∑
i
=
0
d
w
i
x
i
y = \sum_{i=0}^dw_ix_i
y=i=0∑dwixi
这样得到了线性回归的假设函数为:
h
(
x
)
=
w
T
x
h(x) = w^Tx
h(x)=wTx
和之前用于分类的一点点不同在于加权和不需要再进行一个sign运算来决定是+1还是-1。加权的结果直接就是我们给出的预测值。
1.3 - 线性假设的直观认识
如果 x x x是一维的,就是要找出一条直线来最好的拟合平面上的点;如果 x x x是二维的,就是要找三维空间的一个平面来最好的拟合这些空间中的数据点。所谓最好的拟合, 就是要使得图中的所有的红线(误差 r e s i d u a l s residuals residuals,拟合之后还时存在的差异)的总长最小。
linear regression: find lines/hyperplanes with small residuals. \text{linear regression: find lines/hyperplanes with small residuals.} linear regression: find lines/hyperplanes with small residuals.
1.4 - 损失函数
为了达到最好的拟合效果,我们就需要给定一个衡量residuals大小的方法,最常用的衡量错误的方法是平方误差:
e
r
r
(
y
^
,
y
)
=
(
y
^
−
y
)
2
err(\hat{y}, y) = (\hat{y} - y)^2
err(y^,y)=(y^−y)2
E
i
n
(
w
)
=
1
N
∑
n
=
1
N
(
h
(
x
n
)
−
y
n
)
2
(1)
E_{in}(w) = \frac1N\sum_{n=1}^N(h(x_n)-y_n)^2 \tag 1
Ein(w)=N1n=1∑N(h(xn)−yn)2(1)
损失函数越小,就代表模型拟合的越好(暂时认为这么说是对的)。 **现在我们的目标就是要最小化 E i n ( w ) E_{in}(w) Ein(w) **
2 - 线性回归算法
通过上一小节的分析,我们现在的目标就是要把
E
i
n
E_{in}
Ein做的越小越好,也就是要求一个好的
w
w
w来使得
E
i
n
E_{in}
Ein变小。
为了计算和表示的方便,我们将
E
i
n
(
w
)
E_{in}(w)
Ein(w)的计算公式
(
1
)
(1)
(1)表示为向量的形式。
E
i
n
(
w
)
=
1
N
∑
n
=
1
N
(
w
T
x
n
−
y
n
)
2
=
1
N
∑
n
=
1
N
(
x
n
T
w
−
y
n
)
2
=
1
N
∥
x
1
T
w
−
y
1
x
2
T
w
−
y
2
⋯
x
N
T
w
−
y
N
∥
2
=
1
N
∥
[
x
1
T
x
2
T
⋯
x
N
T
]
w
−
[
y
1
y
2
⋯
y
N
]
∥
2
=
1
N
∣
∣
X
⏟
N
×
(
d
+
1
)
w
⏟
(
d
+
1
)
×
1
−
y
⏟
N
×
1
∣
∣
2
\begin{aligned} & E_{in}(w) = \frac1N\sum_{n=1}^N(w^Tx_n-y_n)^2 = \frac1N\sum_{n=1}^N(x_n^Tw-y_n)^2 \\ & = \frac1N \begin{Vmatrix} x_1^Tw-y_1 \\ x_2^Tw-y_2 \\ \cdots \\ x_N^Tw-y_N \\ \end{Vmatrix} ^2 \\ & = \frac1N \begin{Vmatrix} \left[ \begin{array}{c} x_1^T \\ x_2^T \\ \cdots \\ x_N^T \\ \end{array} \right] w- \left[ \begin{array}{c} y_1 \\ y_2 \\ \cdots \\ y_N \\ \end{array} \right] \end{Vmatrix} ^2 \\ & = \frac{1}{N} ||\underbrace{X}_{N\times{(d+1)}} \underbrace{w}_{(d+1)\times1} - \underbrace{y}_{N\times1}||^2 \end{aligned}
Ein(w)=N1n=1∑N(wTxn−yn)2=N1n=1∑N(xnTw−yn)2=N1∥∥∥∥∥∥∥∥x1Tw−y1x2Tw−y2⋯xNTw−yN∥∥∥∥∥∥∥∥2=N1∥∥∥∥∥∥∥∥⎣⎢⎢⎡x1Tx2T⋯xNT⎦⎥⎥⎤w−⎣⎢⎢⎡y1y2⋯yN⎦⎥⎥⎤∥∥∥∥∥∥∥∥2=N1∣∣N×(d+1)
X(d+1)×1
w−N×1
y∣∣2
现在我们的目标变为求最优的
w
w
w最小化
E
i
n
E_{in}
Ein :
m i n w E i n ( w ) = 1 N ∣ ∣ X w − y ∣ ∣ 2 \mathop {min} \limits_{w} \quad E_{in}(w) = \frac1N||Xw-y ||^2 wminEin(w)=N1∣∣Xw−y∣∣2
关于这个 E i n ( w ) E_{in}(w) Ein(w):
- E i n ( w ) E_{in}(w) Ein(w): 连续,可微分,凸函数(函数的曲线像山谷一样)。
- 凸函数:在函数的最低点(谷底,函数取最小值的地方)的梯度(沿各个变量的方向的导数都)为 0 0 0。
如果要求得 E i n E_{in} Ein的最小值, 就要满足 ▽ E i n ( w ) = 0 \bigtriangledown E_{in}(w) = 0 ▽Ein(w)=0,这是一个我们能求得最小值的方法。
task:find w L I N such that ▽ E i n ( w ) = 0 \text{task:find } w_{LIN} \text{ such that } \bigtriangledown E_{in}(w) = 0 task:find wLIN such that ▽Ein(w)=0
也就是说能使得 E i n ( w ) E_{in}(w) Ein(w)的梯度为 0 0 0的 w w w就是我们模型的最佳的参数 w L I N w_{LIN} wLIN(在这个点上 E i n E_{in} Ein沿各个方向上的偏微分都是0)。
▽ E i n ( w ) = [ α E i n α w 0 ( w ) α E i n α w 1 ( w ) ⋯ α E i n α w d ( w ) ] = [ 0 0 ⋯ 0 ] \begin{aligned} \bigtriangledown E_{in}(w)= \left[ \begin{array}{c} \frac {\alpha E_{in}}{\alpha w_0}(w) \\ \frac {\alpha E_{in}}{\alpha w_1}(w) \\ \cdots \\ \frac {\alpha E_{in}}{\alpha w_d}(w) \\ \end{array} \right] =\left[ \begin{array}{c} 0 \\ 0 \\ \cdots \\ 0 \\ \end{array} \right] \end{aligned} ▽Ein(w)=⎣⎢⎢⎡αw0αEin(w)αw1αEin(w)⋯αwdαEin(w)⎦⎥⎥⎤=⎣⎢⎢⎡00⋯0⎦⎥⎥⎤
所以现在的目标是要求解一个 w l i n w_{lin} wlin使得 ▽ E i n ( w l i n ) = 0 \bigtriangledown E_{in}(w_{lin})=0 ▽Ein(wlin)=0
2.1 - 求梯度
要找使得
E
i
n
E_{in}
Ein梯度为
0
0
0的
w
l
i
n
w_{lin}
wlin,那么第一步我们要考虑的是如何求梯度。
E
i
n
(
w
)
=
1
N
∣
∣
X
w
−
y
∣
∣
2
=
1
N
(
w
T
X
T
X
⏟
a
w
−
2
w
T
X
T
y
⏟
b
+
y
T
y
⏟
c
)
E_{in}(w) = \frac1N||Xw-y||^2=\frac1N(w^T\underbrace{X^TX}_{a}w - 2w^T\underbrace{X^Ty}_{b}+\underbrace{y^Ty}_{c})
Ein(w)=N1∣∣Xw−y∣∣2=N1(wTa
XTXw−2wTb
XTy+c
yTy)
如何求
▽
E
i
n
(
w
)
\triangledown E_{in}(w)
▽Ein(w):
- 当
w
w
w是一维的时候:
E i n ( w ) = 1 N ( a w 2 − 2 b w + c ) E_{in}(w) = \frac{1}{N}(aw^2-2bw+c) Ein(w)=N1(aw2−2bw+c) ⟶ \longrightarrow ⟶ ▽ E i n ( w ) = 1 N ( 2 a w − 2 b ) \triangledown E_{in}(w)=\frac1N(2aw-2b) ▽Ein(w)=N1(2aw−2b) - 当
w
w
w是向量的时候:
E i n ( w ) = 1 N ( w T A w − 2 w T b + c ) E_{in}(w) = \frac{1}{N}(w^TAw-2w^Tb+c) Ein(w)=N1(wTAw−2wTb+c) ⟶ \longrightarrow ⟶ ▽ E i n ( w ) = 1 N ( 2 A w − 2 b ) \triangledown E_{in}(w)=\frac1N(2Aw-2b) ▽Ein(w)=N1(2Aw−2b)
这样我们就得到了线性回归的损失函数
E
i
n
E_{in}
Ein的梯度是:
▽
E
i
n
(
w
)
=
2
N
(
X
T
X
w
−
X
T
y
)
\triangledown E_{in}(w)=\frac2N(X^TXw-X^Ty)
▽Ein(w)=N2(XTXw−XTy)
2.2 - 得到最佳的权重
现在我们已经求出了梯度的表达式,接下来要做的就是求得使得梯度为0的
w
l
i
n
w_{lin}
wlin。
task: find
w
l
i
n
w_{lin}
wlin such that
2
N
(
X
T
X
w
−
X
T
y
)
=
▽
E
i
n
(
w
)
=
0
\frac2N(X^TXw-X^Ty)=\bigtriangledown E_{in}(w)=0
N2(XTXw−XTy)=▽Ein(w)=0
▽
E
i
n
(
w
)
=
0
⟶
2
N
(
X
T
X
w
−
X
T
y
)
=
0
⟶
w
l
i
n
=
(
X
T
X
)
−
1
X
T
⏟
X
†
y
⟶
w
l
i
n
=
X
†
y
\begin{aligned} & \bigtriangledown E_{in}(w)=0 \\ & \longrightarrow \frac2N(X^TXw-X^Ty)=0 \\ & \longrightarrow w_{lin} =\underbrace{ (X^TX)^{-1}X^T}_{X^{\dagger}}\ y \\ & \longrightarrow w_{lin} = X^{\dagger}y \end{aligned}
▽Ein(w)=0⟶N2(XTXw−XTy)=0⟶wlin=X†
(XTX)−1XT y⟶wlin=X†y
其中
X
†
为
X
的
p
s
e
u
d
o
X^{\dagger}为X的pseudo
X†为X的pseudo-
i
n
v
e
r
s
e
inverse
inverse
2.3 - 线性回归模型
- 从数据 D D D中, 构造数据矩阵 X X X和输出向量 y y y
X N × ( d + 1 ) = [ x 1 T x 2 T ⋯ x N T ] y = [ y 1 y 2 ⋯ y N ] \begin{aligned} X_{N\times(d+1)}=\left[ \begin{array}{c} x_1^T \\ x_2^T \\ \cdots \\ x_N^T \\ \end{array} \right] \qquad y=\left[ \begin{array}{c} y_1 \\ y_2 \\ \cdots \\ y_N \\ \end{array} \right] \end{aligned} XN×(d+1)=⎣⎢⎢⎡x1Tx2T⋯xNT⎦⎥⎥⎤y=⎣⎢⎢⎡y1y2⋯yN⎦⎥⎥⎤- 计算伪逆 X † : ( d + 1 ) × N X^{\dagger}:(d+1)\times N X†:(d+1)×N
- 返回权重 w l i n = X † y w_{lin}=X^{\dagger}y wlin=X†y
- h = X X † y h = XX^{\dagger}y h=XX†y
所以只要有一个很好的可以求解伪逆的算法包,我们就可以很容易的求得线性回归模型的最佳参数,从而得到一个线性回归模型 y ^ = X X † y \hat{y} = XX^{\dagger}y y^=XX†y。, 我们把这样求得的线性模型的参数称为 analytic solution \text{analytic solution} analytic solution或者是 closed-form solution \text{closed-form solution} closed-form solution。
3 - 线性回归用于二分类
3.1 - 线性回归vs线性分类
我们了解了linear regression,现在来看看线性回归和之前我们介绍的线性分类有什么不同。
- 线性分类
y = { + 1 , − 1 } h ( x ) = s i g n ( w T x ) e r r ( y , y ^ ) = ∣ [ y ≠ y ^ ] ∣ \begin{aligned} y & = {\{+1, -1\}} \\ h(x) & = sign(w^Tx) \\ err(y, \hat y) & = |[y \ne \hat y]| \end{aligned} yh(x)err(y,y^)={+1,−1}=sign(wTx)=∣[y=y^]∣
想要最小化 e r r ( y , y ^ ) err(y, \hat y) err(y,y^)(划分错误的点最少)是一个 N P NP NP难问题。 - 线性回归
y ∈ R h ( x ) = w T x e r r ( y , y ^ ) = ( y − y ^ ) 2 \begin{aligned} y & \in R \\ h(x) & = w^Tx \\ err(y, \hat y) & = (y - \hat y)^2 \end{aligned} yh(x)err(y,y^)∈R=wTx=(y−y^)2
有解析解, 非常容易求解。
由于线性回归有这么容易求解的方法,而
{
+
1
,
−
1
}
∈
R
\{+1, -1\} \in R
{+1,−1}∈R, 那么我们是不是可以使用线性回归来做分类呢?说不定线性回归算法通过一番计算,得到的线性回归模型可以在样本的label为1的时候,返回一个大于0的数; 在样本的label为-1的时候,返回一个小于0的数。
我们只需要在意识上将用于标识正例和负例的
+
1
+1
+1和
−
1
-1
−1当做是我们想要拟合的数值就好了。怎么从数学的角度证明这个想法的可行性呢?
3.2 - 两种损失函数的关系
l i n e a r r e g r e s s i o n linear\ regression linear regression和 l i n e a r c l a s s i f i c a t i o n linear\ classification linear classification最大的差别就是他们的 e r r o r f u n c t i o n error\ function error function
-
0/1 error function
\text{0/1 error function}
0/1 error function
e r r 0 / 1 ( y , y ^ ) = ∣ [ s i g n ( w T x ) ≠ y ] ∣ err_{0/1}(y, \hat y) = |[sign(w^Tx) \ne y]| err0/1(y,y^)=∣[sign(wTx)=y]∣ -
square error function
\text{square error function}
square error function
e r r s q r ( y , y ^ ) = ( w T x − y ) 2 err_{sqr}(y, \hat y) = (w^Tx - y)^2 errsqr(y,y^)=(wTx−y)2
左图是
y
=
1
y=1
y=1的情况下
e
r
r
err
err作为
w
T
x
w^Tx
wTx的函数;右图是
y
=
−
1
y=-1
y=−1的情况下
e
r
r
err
err作为
w
T
x
w^Tx
wTx的函数。从这个“图形化的证明”可以看到不管
w
T
x
w^Tx
wTx的值是什么,
e
r
r
s
q
r
err_{sqr}
errsqr都是大于
e
r
r
0
/
1
err_{0/1}
err0/1的。也就是在同一个
w
T
x
w^Tx
wTx下, 平方的错误是大于0/1的错误的。
e
r
r
0
/
1
≤
e
r
r
s
q
r
err_{0/1} \le err_{sqr}
err0/1≤errsqr
这能说明什么呢?
根据VC维的理论有:
c l a s s i f i c a t i o n E o u t ( w ) ≤ c l a s s i f i c a t i o n E i n ( w ) + ◯ ≤ r e g r e s s i o n E i n ( w ) + ◯ \begin{aligned} classification\ E_{out}(w) & \le classification\ E_{in}(w) + \sqrt\bigcirc \\ & \le regression\ E_{in}(w) + \sqrt\bigcirc\\ \end{aligned} classification Eout(w)≤classification Ein(w)+◯≤regression Ein(w)+◯
通过上面的这个不等式可以看出,如果我们可以将
r
e
g
r
e
s
s
i
o
n
E
i
n
(
w
)
regression\ E_{in}(w)
regression Ein(w)做的很小,那么在一定的程度上保证了
c
l
a
s
s
i
f
i
c
a
t
i
o
n
E
o
u
t
(
w
)
classification\ E_{out}(w)
classification Eout(w)也会很小。
所以这就从理论上解释了为什么线性回归可以用来做分类。**虽然对于线性分类来说线性回归只是在不断的优化(最小化)它的上限。但是优化它的上限是很容易做到的。 **
这就是
l
i
n
e
a
r
r
e
g
r
e
s
s
i
o
n
f
o
r
c
l
a
s
s
i
f
i
c
a
t
i
o
n
linear\ regression\ for\ classification
linear regression for classification,所以当使用
l
i
n
e
a
r
r
e
g
r
e
s
s
i
o
n
linear\ regression
linear regression计算出来的权重
w
w
w不仅仅可以用于
r
e
g
r
e
s
s
i
o
n
regression
regression,也可以用于
b
i
n
a
r
y
c
l
a
s
s
i
f
i
c
a
t
i
o
n
binary\ classification
binary classification。在很多情况下表现还是不错的。
具体的使用方法是:
一般的做法当我们需要进行二分类的时候,我们可以使用 linear regression \text{linear regression} linear regression的结果当做是 PLA 算 法 或 者 是 \text{PLA}算法或者是 PLA算法或者是\text{Pocket} 算 法 的 初 始 的 算法的初始的 算法的初始的w_0 。 这 样 可 能 会 加 速 。这样可能会加速 。这样可能会加速\text{PLA}算法或者 Pocket \text{Pocket} Pocket算法的速度。这是一种常见的把 linear regression \text{linear regression} linear regression使用在资料分类的方式。