损失函数,风险函数,误差,模型选择方法
损失函数
监督学习问题是在假设空间 F \mathcal F F 中选取模型 f f f 作为决策函数,对于给定的输入 X X X,由 f ( X ) f(X) f(X) 给出相应的输出 Y Y Y,这个输出的预测值 f ( X ) f(X) f(X) 与真实值 Y Y Y 可能一致也可能不一致,用一个损失函数或代价函数来度量预测错误的程度。损失函数是 f ( X ) f(X) f(X) 和 Y Y Y 的非负实值函数,记作 L ( Y , f ( X ) ) L(Y,f(X)) L(Y,f(X))。
常用的损失函数有以下几种:
0-1 损失函数
L ( Y , f ( X ) ) = { 1 ,        Y ≠ f ( X ) 0 ,        Y = f ( X ) L(Y,f(X))= \begin{cases} 1,\;\;\; Y\ne f(X) \\ 0,\;\;\; Y=f(X) \end{cases} L(Y,f(X))={1,Y̸=f(X)0,Y=f(X)
平方损失函数
L ( Y , f ( X ) ) = ( Y − f ( X ) ) 2 L(Y,f(X))=(Y-f(X))^2 L(Y,f(X))=(Y−f(X))2
绝对损失函数
L ( Y , f ( X ) ) = ∣ Y − f ( X ) ∣ L(Y,f(X))=|Y-f(X)| L(Y,f(X))=∣Y−f(X)∣
对数损失函数(对数似然损失函数)
L
(
Y
,
f
(
X
)
)
=
−
log
P
(
Y
∣
X
)
L(Y,f(X))=-\log P(Y|X)
L(Y,f(X))=−logP(Y∣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_{\mathcal{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这是理论上模型
f
(
X
)
f(X)
f(X) 关于联合分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y) 的平均意义下的损失,称为风险函数或期望损失。学习的目标就是选择期望风险最小的模型。
风险函数
经验风险
给定一个训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}
T={(x1,y1),(x2,y2),...,(xN,yN)}模型
f
(
X
)
f(X)
f(X) 关于训练数据集的平均损失称为经验风险或经验损失,记作
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}^NL(y_i,f(x_i))
Remp(f)=N1i=1∑NL(yi,f(xi))期望风险
R
e
x
p
(
f
)
R_{exp}(f)
Rexp(f) 是模型关于联合分布的期望损失,经验风险
R
e
m
p
(
f
)
R_{emp}(f)
Remp(f) 是模型关于训练样本集的平均损失。根据大数定律,当样本容量
N
N
N 趋于无穷时,经验风险
R
e
m
p
(
f
)
R_{emp}(f)
Remp(f) 趋于期望风险
R
e
x
p
(
f
)
R_{exp}(f)
Rexp(f)。
结构风险
结构风险在经验风险上加上表示模型复杂度的正则项或罚项。在假设空间、损失函数以及训练数据集确定的情况下,结构风险的定义是:
R
s
m
(
f
)
=
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
)
R_{sm}(f)=\frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f))
Rsm(f)=N1i=1∑NL(yi,f(xi))+λJ(f))其中
J
(
f
)
J(f)
J(f) 为模型的复杂度,是定义在假设空间
F
\mathcal F
F 上的泛函。模型越复杂,
J
(
f
)
J(f)
J(f) 越大。
风险最小化
经验风险最小化
经验风险最小化的策略认为,经验风险最小的模型是最优模型:
min
f
∈
F
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
\min_{f\in \mathcal F} \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))
f∈FminN1i=1∑NL(yi,f(xi))其中,
F
\mathcal F
F 是假设空间。
当样本容量足够大时,经验风险最小化能保证有很好的学习效果,在现实中被广泛采用。当模型是条件概率分布,损失函数是对数损失函数时,经验风险最小化就等价于极大似然估计。
但是,当样本容量很小时,经验风险最小化学习的效果容易“过拟合”,因此为了防止出现过拟合现象,提出了结构风险最小化。
结构风险最小化
结构风险最小化等价于正则化,认为结构风险最小的模型是最优的模型。所以求最优模型就是求解最优化问题:
min
f
∈
F
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
)
\min_{f\in \mathcal F} \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f))
f∈FminN1i=1∑NL(yi,f(xi))+λJ(f))当模型是条件概率分布、损失函数是对数损失函数、模型复杂度由模型的先验概率表示时,结构风险最小化就等价于最大后验概率估计。
误差
训练误差
假设学习到的模型是
Y
=
f
^
(
X
)
Y=\hat f(X)
Y=f^(X),训练误差是模型
Y
=
f
^
(
X
)
Y=\hat f(X)
Y=f^(X) 关于训练数据集的平均损失:
R
e
x
p
(
f
^
)
=
1
N
∑
i
=
1
N
L
(
y
i
,
f
^
(
x
i
)
)
R_{exp}(\hat f)=\frac{1}{N}\sum_{i=1}^NL(y_i,\hat f(x_i))
Rexp(f^)=N1i=1∑NL(yi,f^(xi))其中
N
N
N 是训练样本容量。
测试误差
测试误差是模型
Y
=
f
^
(
X
)
Y=\hat f(X)
Y=f^(X) 关于测试数据集的平均损失:
e
t
e
s
t
=
1
N
′
∑
i
=
1
N
′
L
(
y
i
,
f
^
(
x
i
)
)
e_{test}=\frac{1}{N^{'}}\sum_{i=1}^{N^{'}} L(y_i,\hat f(x_i))
etest=N′1i=1∑N′L(yi,f^(xi))其中
N
′
N^{'}
N′ 是测试样本容量。
训练误差的大小,对判断给定的问题是不是一个容易学习的问题是有意义的,但本质上不重要。测试误差反映了学习方法对未知的测试数据集的预测能力,是学习中的重要概念。显然,测试误差小的方法具有更好的预测能力,通常将学习方法对未知数据的预测能力称为泛化能力。
过拟合
如果一味追求提高对训练数据的预测能力,所选模型的复杂度则往往会比真模型更高,这种现象称为过拟合。过拟合是指学习时选择的模型所包含的参数过多,以致于出现这一模型对已知数据预测很好,但对未知数据预测差的现象。
当模型复杂度增大时,训练误差会逐渐减小并趋于0;而测试误差会先减小,达到最小值后又增大。
模型选择方法
正则化
正则化是结构风险最小化策略的实现,在经验风险上加入一个正则化项或罚项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。正则化一般具有如下形式:
min
f
∈
F
1
N
∑
i
=
1
N
L
(
y
i
,
f
(
x
i
)
)
+
λ
J
(
f
)
)
\min_{f\in \mathcal F} \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i))+\lambda J(f))
f∈FminN1i=1∑NL(yi,f(xi))+λJ(f))第2项正则化项可以取不同的形式,例如可以是参数向量的
L
2
L_2
L2 范数、
L
1
L_1
L1 范数:
L
(
w
)
=
1
N
∑
i
=
1
N
(
f
(
x
i
;
w
)
−
y
i
)
2
+
λ
2
∥
w
∥
2
L
(
w
)
=
1
N
∑
i
=
1
N
(
f
(
x
i
;
w
)
−
y
i
)
2
+
λ
∥
w
∥
1
L(w)=\frac{1}{N}\sum_{i=1}^N(f(x_i;w)-y_i)^2+\frac{\lambda}{2} \lVert w \rVert ^2 \\ L(w)=\frac{1}{N}\sum_{i=1}^N(f(x_i;w)-y_i)^2+\lambda\lVert w \rVert _1
L(w)=N1i=1∑N(f(xi;w)−yi)2+2λ∥w∥2L(w)=N1i=1∑N(f(xi;w)−yi)2+λ∥w∥1正则化符合奥卡姆剃刀原理:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型。
交叉验证
交叉验证的基本想法是重复地使用数据,把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复地进行训练、测试以及模型选择。简单交叉验证改变的是训练环境, S \bf\mathcal S S 折交叉验证和留一交叉验证改变的是训练数据。
简单交叉验证
简单交叉验证方法是:首先随机地将已给数据分为训练集和测试集(例如70%train+30%test)然后用训练集在各种条件下训练出不同模型,再测试集上评价各个模型的测试误差,最后选择测试误差最小的模型。
S 折交叉验证
应用最多的是 S \mathcal S S 折交叉验证:首先随机地将已给数据切分为 S \mathcal S S 互不相交的大小相同的子集;然后利用 S − 1 \mathcal S-1 S−1 个子集的数据训练模型,利用余下的子集测试模型;将这一过程对可能的 S \mathcal S S 种选择重复进行;最后选出 S \mathcal S S 次评测中平均误差最小的模型。
留一交叉验证
S \mathcal S S 折交叉验证的特殊情况,当 S = N \mathcal S=N S=N 时, N N N 是给定数据集的容量,留一交叉验证往往在数据缺乏的情况下使用。
参考文献
[1] 李航. 统计学习方法. 清华大学出版社. 2012