李航《统计学习方法》第二版-第1章 统计学习及监督学习概论1.3-1.5 浅见
1.3 统计学习方法三要素
简单的可以表示为:
方
法
=
模
型
+
策
略
+
算
法
方法=模型+策略+算法
方法=模型+策略+算法
模型
模型就是我们要学习的条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X)或者是决策函数 Y = f ( X ) Y=f(X) Y=f(X),模型存在于假设空间,我们要找的就是最优的模型。
策略
那如何判断哪个模型最优呢,那就需要一个准则,也就是一种选择策略,比如要一个损失函数,希望这个函数越小越好,就像回归问题里的均方差目标函数,或者分类里的交叉熵函数。损失函数越小,模型越好,由于模型的输入输出
(
X
,
Y
)
(X,Y)
(X,Y)是随机变量,遵循联合分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y),因此损失的期望就定义为:
R
e
x
p
(
f
)
=
E
p
[
L
(
Y
,
f
(
X
)
)
]
=
∫
X
×
Y
L
(
y
,
f
(
x
)
)
P
(
x
,
y
)
d
x
d
y
R_{exp}(f)=E_p[L(Y,f(X))]=\int_{X \times Y}L(y,f(x))P(x,y)dxdy
Rexp(f)=Ep[L(Y,f(X))]=∫X×YL(y,f(x))P(x,y)dxdy。
理论上关于联合分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y)的平均意义希的损失,叫做风险函数或者期望损失。而我们训练集的平均损失函数成为经验风险或者经验损失,就是通过经验得来的,即做
R
e
m
p
R_{emp}
Remp:
R
e
m
p
(
f
)
=
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
R_{emp}(f)=\frac{1}{N}\sum_{i=1}^N L(y_i,f(x_i))
Remp(f)=N1i=1∑NL(yi,f(xi))
根据大数定律,当样本N无穷大时,经验风险趋向于期望风险,所以样本越大能越毕竟理论值。
同时样本太小的时候,可能会出现过拟合的情况,就是模型过于复杂了,训练集的效果很好,测试集就不怎么样。所以提出了结构风险最小化,其实就是加正则惩罚项,可以看成就是逼着他把模型变简单点。
结构风险定义:
R
s
r
m
(
f
)
=
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
R_{srm}(f)=\frac{1}{N}\sum_{i=1}^N L(y_i,f(x_i))+\lambda J(f)
Rsrm(f)=N1i=1∑NL(yi,f(xi))+λJ(f)
J
(
f
)
J(f)
J(f)表示模型的复杂度,
λ
\lambda
λ>=0表示惩罚系数,如果模型复杂,我就加大惩罚系数,因为我们希望结构风险越小越好,
λ
J
(
f
)
\lambda J(f)
λJ(f)当然也要越小越好,所以加大
λ
\lambda
λ必定减小
J
(
f
)
J(f)
J(f)。
J
(
f
)
J(f)
J(f)一般会用参数的范数表示,比如L1,L2范数,表示绝对值或者平方范数,具体后面正则化会讲到。
算法
算法就是根据策略来找出最优模型的一个方法,就是用上面方法来求解最优模型,不如最常见的梯度下降法。
1.4 模型评估与选择
一般来说,我们希望训练的误差和测试的误差一样小,但是很多情况下,训练误差比较下,测试误差比较大,这个就是因为模型过拟合了,就是过分的去拟合现有的数据,可能是因为训练数据太少,或者是模型建的太复杂,比如下图,最右边就是过拟合,模型可能是N次多项式:
上图,M是多项式阶数,就是几次多项式,蓝色的圈是样本,红色的线拟合了所有样本,明显过拟合了,正确的应该是绿色的线。
然后就可能会得到这样的误差图:
可以看到测试误差会随着模型复杂度先下降后上升,所以我们要防止这种过拟合的情况,下面介绍两种常用的方法:正则化和交叉验证。貌似还有个EarlyStopping方法,提前停止,好像是深度学习里的,原理就是在最低的误差就差不多该停止学习了。
1.5 正则化和交叉验证
正则化和范数
正则化就是刚才有提到过的,其实应该叫规范化,就是给参数定点规矩,做法是在损失函数上加个惩罚项,不能让他没有规矩,让经验风险和惩罚项同时小。一般的惩罚项有L2范数的平方:
1
λ
∣
∣
w
∣
∣
2
2
\frac{1}{\lambda}||w||_2^2
λ1∣∣w∣∣22,L1范数:
λ
∣
∣
w
∣
∣
1
\lambda ||w||_1
λ∣∣w∣∣1。来看看加上正则化之后的损失函数图:
椭圆一圈圈的代表着我们的损失函数的登高线,同一个颜色上的损失一样,左边图的菱形代表L1范数,右边圆形代表L2范数。
菱形和圆形的就是限定了w的活动范围,只能在图像上,必须要在这个上面求最小值,数学上可以证明交点是最优解。
λ \lambda λ的意义在于可以控制图形的大小,使得参数w尽可能的小,一般 λ \lambda λ>=0,但是不能太大, λ \lambda λ越大图形越小,越靠近原点参数越小,参数被限制在很小的范围内,模型可能过于简单,会欠拟合。当然 λ \lambda λ太小了,图形就越大,对参数w的取值范围就加大了,可能会覆盖到原来损失函数的最优解的地方,这样就等于没有限制,或者说w取值范围大了,限制就小了,因为等高线里损失一样,很可能选择参数大的地方,不知道这样理解对不对哈哈。
那范数到底是个什么东西呢,wiki中的定义:范数是具有“长度”概念的函数,用于衡量一个矢量的大小(测量矢量的测度),其实就是个长度的概念。数学表达式就是:
∣
∣
X
∣
∣
p
=
(
∑
i
=
1
N
∣
x
i
∣
p
)
1
p
||X||_p=(\sum_{i=1}^N |x_i|^p)^{\frac{1}{p}}
∣∣X∣∣p=(i=1∑N∣xi∣p)p1
p就是幂,Lp范数就是参数绝对值的p次方求和再开p次方。
L1范式:
∣
∣
X
∣
∣
1
=
∑
i
=
1
N
∣
x
i
∣
||X||_1=\sum_{i=1}^N |x_i|
∣∣X∣∣1=∑i=1N∣xi∣
L2范式:
∣
∣
X
∣
∣
1
=
∑
i
=
1
N
x
i
2
||X||_1=\sqrt {\sum_{i=1}^N x_i^2}
∣∣X∣∣1=∑i=1Nxi2
我画了几个看看,分别是L1,L1.5,L2,L100的二维的范数图:
L1的参数具有稀疏性,因为L1通常和损失函数交点在角上,上图有w1=0的特性,当然如果考虑高维,就可能有更多的参数是0,于是最后的参数w就是有很多0的稀疏参数了,其实也就是做了降维的工作,很多参数变0啦。但是L1的函数性质不好,有不可导点,所以更多是用L2。
L2可以进行损失函数导数计算,会发现参数w会有个衰减系数,这个就是L2的作用吧,将参数变小,防止过拟合,我是这么理解的,可能不太对哈哈。其实更直观的就是正则化让拟合的曲线更加平滑,要做到小而美,不要大而全。从数据学的角度来讲应该就是正则化使得多项式中很多高次幂的项系数很小,也可以理解为高次项的权重很小,那么对于整个曲线的作用就小,当然曲线不会很复杂啦,极端的就是0,没高此项,那可能就是简单的线性模型。
交叉验证
交叉验证就不多说了,就是给数据集分组,然后交叉循环的来训练,避免出现是为了迎合特点数据集的损失来训练的,分为简单交叉验证,S折交叉验证,留一交叉验证,具体想了解的可以查百度。
总结
介绍了统计三要素,也是做机器学习的步骤吧,自己理解下,基本就是这么个流程,难点当然就是损失函数的选择啦,算法基本上用梯度下降法。正则化简单理解成可以降低模型的复杂度,就是我们不需要能力那么强的模型,只要适度解决问题就行,也就是奥克姆剃刀定律的思想,如无必要勿增实体。
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,部分图片来自网络,侵删。