最小二乘法就是机器学习的开始,设这个最简单的式子是:
y
=
w
x
+
b
y=wx+b
y=wx+b
平方损失函数为:
L
=
1
2
∑
i
=
1
n
(
t
i
−
y
i
)
2
L=\frac{1}{2}\sum_{i=1}^n(t_i-y_i)^2
L=21i=1∑n(ti−yi)2
之所以有
1
2
\frac{1}{2}
21是因为在接下来化简过程中会非常漂亮(仅限于高数,矩阵不算),其中
t
i
t_i
ti是已测数据的结果集,现成的。那么如何降低损失函数呢?就是求导让其对
w
w
w求导等于0,那就是整个损失函数的最低点(损失函数是下凸函数):
L
=
1
2
∑
i
=
1
n
(
t
i
−
y
i
)
2
=
1
2
∑
i
=
1
n
(
t
i
−
(
w
x
i
+
b
)
)
2
=
1
2
∑
i
=
1
n
(
t
i
2
+
w
2
x
i
2
+
b
2
−
2
t
i
w
x
i
−
2
t
i
b
+
2
w
x
i
b
)
L =\frac{1}{2} \sum_{i=1}^n(t_i-y_i)^2\\ =\frac{1}{2} \sum_{i=1}^n(t_i-(wx_i+b))^2\\ =\frac{1}{2} \sum_{i=1}^n(t_i^2+w^2x_i^2+b^2-2t_iwx_i-2t_ib+2wx_ib)
L=21i=1∑n(ti−yi)2=21i=1∑n(ti−(wxi+b))2=21i=1∑n(ti2+w2xi2+b2−2tiwxi−2tib+2wxib)
ϑ L ϑ w = ∑ i = 1 n ( w x i 2 − t i x i + x i b ) \frac{\vartheta L}{\vartheta w}=\sum_{i=1}^n(wx_i^2-t_ix_i+x_ib) ϑwϑL=i=1∑n(wxi2−tixi+xib)
ϑ
L
ϑ
b
=
∑
i
=
1
n
(
b
−
t
i
+
w
x
i
)
\frac{\vartheta L}{\vartheta b}=\sum_{i=1}^n(b-t_i+wx_i)
ϑbϑL=i=1∑n(b−ti+wxi)
接下来让偏导等于0,求出
w
,
b
w,b
w,b:
∑
i
=
1
n
(
w
x
i
2
−
t
i
x
i
+
x
i
b
)
=
0
w
∑
i
=
1
n
x
i
=
∑
i
=
1
n
(
t
i
−
b
)
w
=
∑
i
=
1
n
(
t
i
−
b
)
∑
i
=
1
n
x
i
\sum_{i=1}^n(wx_i^2-t_ix_i+x_ib)=0\\ w\sum^n_{i=1}x_i=\sum_{i=1}^n(t_i-b)\\ w=\frac{\sum_{i=1}^n(t_i-b)}{\sum^n_{i=1}x_i}
i=1∑n(wxi2−tixi+xib)=0wi=1∑nxi=i=1∑n(ti−b)w=∑i=1nxi∑i=1n(ti−b)
∑ i = 1 n ( b − t i + w x i ) = 0 n b = ∑ i = 1 n ( t i − w x i ) b = ∑ i = 1 n ( t i − w x i ) n \sum_{i=1}^n(b-t_i+wx_i)=0\\ nb=\sum^n_{i=1}(t_i-wx_i)\\ b=\frac{\sum^n_{i=1}(t_i-wx_i)}{n} i=1∑n(b−ti+wxi)=0nb=i=1∑n(ti−wxi)b=n∑i=1n(ti−wxi)
就这样算出来了。注意
w
w
w中有
b
b
b,
b
b
b中有
w
w
w。用均值取代掉
∑
\sum
∑:
w
=
t
‾
−
b
x
‾
w=\frac{\overline{t}-b}{\overline{x}}
w=xt−b
b = t ‾ − w x ‾ b=\overline{t}-w\overline{x} b=t−wx
相互带入,完全一样的:
w
0
x
‾
+
b
0
=
t
‾
w_0\overline{x}+b_0=\overline{t}
w0x+b0=t
意料之外,情理之中,表示数据集均值在这条直线上,接下来用这个式子带入上面的偏导式,消
b
0
b_0
b0(b最小值的时候),这样就会出现
w
0
w_0
w0了。
ϑ
L
ϑ
w
=
∑
i
=
1
n
(
w
x
i
2
−
t
i
x
i
+
x
i
b
0
)
=
∑
i
=
1
n
(
w
x
i
2
−
t
i
x
i
+
x
i
(
t
‾
−
w
0
x
‾
)
)
=
w
∑
i
=
1
n
x
i
2
−
∑
i
=
1
n
t
i
x
i
+
(
t
‾
−
w
0
x
‾
)
∑
i
=
1
n
x
i
=
w
0
n
x
2
‾
−
n
t
x
‾
+
(
t
‾
−
w
0
x
‾
)
n
x
‾
=
0
w
0
=
t
x
‾
−
t
‾
x
‾
x
2
‾
−
x
‾
2
\frac{\vartheta L}{\vartheta w}=\sum_{i=1}^n(wx_i^2-t_ix_i+x_ib_0)\\ =\sum_{i=1}^n(wx_i^2-t_ix_i+x_i(\overline{t}-w_0\overline{x}))\\ =w\sum^n_{i=1}x_i^2-\sum^n_{i=1}t_ix_i+(\overline{t}-w_0\overline{x})\sum_{i=1}^nx_i\\ =w_0n\overline{x^2}-n\overline{tx}+(\overline{t}-w_0\overline{x})n\overline{x}=0\\ w_0=\frac{\overline{tx}-\overline{t}\overline{x}}{\overline{x^2}-\overline{x}^2}
ϑwϑL=i=1∑n(wxi2−tixi+xib0)=i=1∑n(wxi2−tixi+xi(t−w0x))=wi=1∑nxi2−i=1∑ntixi+(t−w0x)i=1∑nxi=w0nx2−ntx+(t−w0x)nx=0w0=x2−x2tx−tx
更一般的,大家都这么写:
w
=
1
n
∑
i
=
1
n
x
i
t
i
−
t
‾
x
‾
1
n
∑
i
=
1
n
x
i
2
−
x
‾
x
‾
w=\frac{\frac{1}{n}\sum_{i=1}^nx_it_i-\overline{t}\overline{x}}{\frac{1}{n}\sum^n_{i=1}x^2_i-\overline{x}\overline{x}}
w=n1∑i=1nxi2−xxn1∑i=1nxiti−tx
b b b直接用 w w w推出,自此最小二乘法推导完毕。
接下来用线代推,用线代推不仅更简洁,更重要的一点是,它支持多
w
w
w,也就是多元超平面,这个是高数方法永远也解决不了的了(它会得出n个等式)。
f
=
w
n
∗
1
x
n
∗
1
+
b
n
∗
1
f=\textbf{w}_{n*1}\textbf{x}_{n*1}+\textbf{b}_{n*1}
f=wn∗1xn∗1+bn∗1
设一共n组数据,每组数据有k个参数。
这里进行了一个整理,把
b
b
b添加进
w
w
w里了,具体见下:
w
=
(
b
w
)
,
x
=
(
1
x
)
\textbf{w} = \begin{pmatrix} b \\ w \end{pmatrix} , \textbf{x} = \begin{pmatrix} 1 \\ x \end{pmatrix}
w=(bw),x=(1x)
这样
w
T
x
=
b
+
w
x
\textbf{w}^T\textbf{x}=b+wx
wTx=b+wx,按照这个角度来说,b用
w
0
w_0
w0来表示比较合适了,接下来的参数为
w
1
,
w
2
.
.
.
w_1,w_2...
w1,w2...,而变量也是从1
,
x
1
,
x
2
.
.
.
,x_1,x_2...
,x1,x2...特别完美,实际上的矩阵就是n+1的,参数矩阵第一个是
w
0
w_0
w0,变量矩阵第一个是
1
1
1,直接
wx
\textbf{wx}
wx得出解,下面都是多变量多参数的了。
损失函数为
L
=
∑
i
=
1
n
(
t
i
−
w
T
x
i
)
2
L=\sum^n_{i=1}(t_i-\textbf{w}^T\textbf{x}_i)^2
L=i=1∑n(ti−wTxi)2
取代
∑
\sum
∑,变成如下的:
L
=
(
t
−
Xw
)
T
(
t
−
Xw
)
L=(\textbf{t}-\textbf{X}\textbf{w})^T(\textbf{t}-\textbf{X}\textbf{w})
L=(t−Xw)T(t−Xw)
L = w T X T Xw − 2 w T X T t + t T t L=\textbf{w}^T\textbf{X}^T\textbf{Xw}-2\textbf{w}^T\textbf{X}^T\textbf{t}+\textbf{t}^T\textbf{t} L=wTXTXw−2wTXTt+tTt
注意此时的
X
\textbf X
X是
n
∗
k
n*k
n∗k的矩阵,包含所有的数据了(但
x
\textbf x
x是
k
∗
1
k*1
k∗1矩阵),这里
w
\textbf w
w是
k
∗
1
k*1
k∗1矩阵,只有这样
Xw
\textbf{Xw}
Xw才是
n
∗
1
n*1
n∗1的矩阵,是所有的解,转置相乘恰好就是平方差的形式。
接下来自然是求导了:
ϑ
L
ϑ
w
=
(
ϑ
L
ϑ
w
0
ϑ
L
ϑ
w
1
⋮
ϑ
L
ϑ
w
k
)
\frac{\vartheta L}{\vartheta \textbf{w}}= \begin{pmatrix} \frac{\vartheta L}{\vartheta w_0} \\ \frac{\vartheta L}{\vartheta w_1} \\ \vdots \\ \frac{\vartheta L}{\vartheta w_k} \end{pmatrix}
ϑwϑL=⎝⎜⎜⎜⎛ϑw0ϑLϑw1ϑL⋮ϑwkϑL⎠⎟⎟⎟⎞
ϑ L ϑ w = 2 X T Xw − 2 X T t = 0 \frac{\vartheta L}{\vartheta \textbf{w}}=2\textbf{X}^T\textbf{X}\textbf{w}-2\textbf{X}^T\textbf{t}=0 ϑwϑL=2XTXw−2XTt=0
这里的矩阵求导是固定式子(这里是对
w
w
w求导),
(
w
T
x
)
′
=
x
,
(
x
T
w
)
′
=
x
,
(
w
T
w
)
′
=
2
w
,
(
w
T
C
w
)
′
=
2
C
w
(w^Tx)'=x,(x^Tw)'=x,(w^Tw)'=2w,(w^TCw)'=2Cw
(wTx)′=x,(xTw)′=x,(wTw)′=2w,(wTCw)′=2Cw(跟普通函数求导差不多)。
X
T
Xw
=
X
T
t
\textbf{X}^T\textbf{X}\textbf{w}=\textbf{X}^T\textbf{t}
XTXw=XTt
w = ( X T X ) − 1 X T t \textbf{w}=(\textbf{X}^T\textbf{X})^{-1}\textbf{X}^T\textbf{t} w=(XTX)−1XTt
这就是 w \textbf w w的最小值,注意是所有的(包括 w , b w,b w,b),矩阵最小二乘法完毕。
这样求得的式子是线性的,有时候平方式子可能更拟合(这是很有可能的),即
f
=
w
0
+
w
1
x
+
w
2
x
2
f=w_0+w_1x+w_2x^2
f=w0+w1x+w2x2,这样参数就会是超过两个。但是,越高阶,其实就没有多少作用了,它会在有数据的地方过拟合,没数据的地方偏十万八千里。
如何验证模型的最优复杂度?就是用验证集测,得出最好的。
当数据集特别小,以至于分出一个验证集太奢侈,那么就将数据集分成k份,每次取一份作为验证集,其他作为测试集,一圈下来取平均值(交叉验证)。当k=n时,也就是验证集就一个数据,这叫留一交叉验证LOOCV。
那么什么是模型复杂度?就是
w
w
w尽可能的小和少:
∑
i
=
0
k
w
i
2
\sum^k_{i=0}w_i^2
i=0∑kwi2
那么损失函数就变成了:
L
′
=
L
+
λ
w
T
w
L'=L+\lambda \textbf w^T\textbf w
L′=L+λwTw
L ( w ) = ( t − Xw ) T ( t − Xw ) + λ w T w L(\textbf w)=(\textbf t-\textbf X\textbf w)^T(\textbf t-\textbf X\textbf w)+\lambda \textbf w^T\textbf w L(w)=(t−Xw)T(t−Xw)+λwTw
ϑ L ϑ w = 2 X T Xw − 2 X T t + 2 λ w = 0 \frac{\vartheta L}{\vartheta \textbf{w}}=2\textbf{X}^T\textbf{X}\textbf{w}-2\textbf{X}^T\textbf{t}+2\lambda\textbf w=0 ϑwϑL=2XTXw−2XTt+2λw=0
w
=
(
X
T
X
+
λ
E
)
−
1
X
T
t
\textbf w=(\textbf{X}^T\textbf{X}+\lambda\textbf{E})^{-1}\textbf{X}^T\textbf{t}
w=(XTX+λE)−1XTt
λ
\lambda
λ值太小,函数就可能太过复杂(后面项就没多大用了),值太大,又不利于逼近数据(太简化了)。 这就叫正则化误差,正则化最小二乘法。也叫结构误差,这个以后讲。如何确定
λ
\lambda
λ(超参数)选什么好呢?交叉验证。
岭回归: 以损失部分信息(说明加入正则化项确实有深刻的缺点)、降低精度(加入正则化项)为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。实际上也是新瓶装旧酒,都一样的。
为了保证回归系数
w
\textbf w
w可求,岭回归模型在目标函数上加了一个L2范数的惩罚项
J
(
w
)
=
∑
(
y
−
Xw
)
2
+
λ
∣
∣
w
∣
∣
2
2
=
∑
(
y
−
Xw
)
2
+
∑
λ
w
2
J(\textbf w)=\sum(y-\textbf X\textbf w)^2+\lambda||\textbf w||^2_2\\ =\sum(y-\textbf X\textbf w)^2+\sum\lambda \textbf w^2
J(w)=∑(y−Xw)2+λ∣∣w∣∣22=∑(y−Xw)2+∑λw2
w = ( X T X + λ I ) − 1 X T y \textbf w=(\textbf X^T\textbf X+\lambda\textbf I)^{-1}\textbf X^Ty w=(XTX+λI)−1XTy
单位矩阵 I I I的对角线上全是1,像一条山岭一样,这也是岭回归名称的由来。
每日小常识
0-1损失函数
L
(
Y
,
f
(
X
)
)
=
{
1
Y
≠
f
(
X
)
0
Y
=
f
(
X
)
L(Y,f(X))=\left\{\begin{array}{l} 1 &Y\neq f(X)\\ 0 &Y=f(X) \end{array}\right.
L(Y,f(X))={10Y=f(X)Y=f(X)
特点是比较严格,直接分类,但它是一个非凸函数,不太适用。
绝对值损失函数
L
(
Y
,
f
(
x
)
)
=
∣
Y
−
f
(
x
)
∣
L(Y,f(x))=|Y-f(x)|
L(Y,f(x))=∣Y−f(x)∣
log对数损失函数
L
(
Y
,
P
(
Y
∣
X
)
)
=
−
l
o
g
P
(
Y
∣
X
)
L(Y,P(Y|X))=-logP(Y|X)
L(Y,P(Y∣X))=−logP(Y∣X)
log对数损失函数能非常好的表征概率分布,如果需要知道结果属于每个类别的置信度,那它非常合适。但健壮性不强,对噪声敏感。
大名鼎鼎的平方损失函数
L
(
Y
∣
f
(
X
)
)
=
∑
N
(
Y
−
f
(
X
)
)
2
L(Y|f(X))=\sum_N(Y-f(X))^2
L(Y∣f(X))=N∑(Y−f(X))2
不解释
指数损失函数
L
(
Y
∣
f
(
X
)
)
=
e
−
y
f
(
x
)
L(Y|f(X))=e^{-yf(x)}
L(Y∣f(X))=e−yf(x)
对噪声非常敏感
Hinge损失函数
L
(
y
,
f
(
x
)
)
=
m
a
x
(
0
,
1
−
y
f
(
x
)
)
L(y,f(x))=max(0,1-yf(x))
L(y,f(x))=max(0,1−yf(x))
SVM就用这个损失函数
交叉熵损失函数
这个后面讲,值得注意的是对数损失函数和交叉熵损失函数是等价的。