第二章 模型评估和选择
1 欠拟合和过拟合 偏差和方差
1.1 欠拟合和过拟合
欠拟合:算法学习能力太差,数据的一般特征都没有学会;
过拟合:算法学习能力太强,将数据自身特征当作一般特征;
1.2 偏差和方差
使用不同训练集产生的预测均值为:
f
‾
(
x
)
=
E
D
[
f
(
x
;
D
)
]
\overline f({\boldsymbol x}) = E_D[f({\boldsymbol x}; D)]
f(x)=ED[f(x;D)];其中,
f
(
x
;
D
)
f({\boldsymbol x}; D)
f(x;D)表示在数据集
D
D
D下训练得到
f
f
f对样本
x
{\boldsymbol x}
x的预测输出;
使用不同训练集产生的预测方差为:
v
a
r
(
x
)
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
var({\boldsymbol x}) = E_D[(f({\boldsymbol x}; D) - \overline f({\boldsymbol x}))^2]
var(x)=ED[(f(x;D)−f(x))2];
期望输出与真实标记之间的差别称为偏差:
b
i
a
s
2
(
x
)
=
(
f
‾
(
x
)
−
y
)
2
{bias^2}({\boldsymbol x}) = (\overline f({\boldsymbol x}) - y)^2
bias2(x)=(f(x)−y)2;其中
y
y
y是样本
x
{\boldsymbol x}
x的真实标记;
噪声为:
ϵ
2
=
E
D
[
(
y
D
−
y
)
2
]
\epsilon ^ 2 = E_D[(y_D - y)^2]
ϵ2=ED[(yD−y)2];其中
y
D
y_D
yD是样本
x
{\boldsymbol x}
x在数据集中的标记;
算法期望泛化误差为:
E
(
f
;
D
)
=
E
D
[
(
f
(
x
;
D
)
−
y
D
)
2
]
=
b
i
a
s
2
(
x
)
+
v
a
r
(
x
)
+
ϵ
2
E(f; D) = E_D[(f({\boldsymbol x}; D) - y_D)^2] = {bias^2}({\boldsymbol x}) + var({\boldsymbol x}) + \epsilon ^2
E(f;D)=ED[(f(x;D)−yD)2]=bias2(x)+var(x)+ϵ2;详细证明过程见周志华机器学习2.5 偏差与方差。
当模型欠拟合的时候,期望输出与真实标记之间差别较大,即偏差大;
当模型过拟合的时候,训练数据的轻微扰动对结果的影响较大,即方差大;
2 评估方法 性能度量
2.1 评估方法
在算法学习完成得到一个模型之后,我们需要测试评估模型的泛化误差。为此我们需要一个用于测试的数据集,称为测试集。从数据集 D D D中产生训练集 S S S和测试集 T T T用于训练和评估的方法有以下几种。
2.1.1 留出法
直接将数据集 D D D划分为两个互斥集合,一个作为训练集 S S S,一个作为测试集 T T T。一般将数据集的 2 3 \frac {2}{3} 32到 4 5 {\frac {4}{5}} 54的数据作为训练集,其余作为测试集。需要注意的是,数据集的划分要保持数据分布的一致性。比如说当数据集中有500正例500负例,700个数据作为训练集,300个数据作为测试集的时候,训练集中必须350正例350负例,测试集中必须150正例150负例。
2.2.2 交叉验证法
将数据集划分为k个大小相似的互斥子集,每次选择其中一个子集作为测试集,其余k-1个子集作为训练集。这样可以选择k次。极端情况是m个数据的数据集划分为m个互斥子集,这种方法称为留一法。
2.2.3 自助法
我们希望评估的是用数据集D训练出的模型。留出法和交叉验证法对D进行划分之后,实际用于训练的数据比数据集D要小。这样会引入训练样本规模不同导致的误差。留一法每次只用一个数据作为测试集,规模不同造成的影响较小,但是计算复杂度较高。可以使用自助法,既降低规模变化带来的影响,又减小计算复杂度。
设数据集D中含有m个数据,我们每次放回抽样,重复m次,得到一个含有m个数据的测试集S。因为是有放回抽样,所以抽样之后D中可能还有数据没有被抽中,数学证明,大概有36.8%数据没被抽中。将D-S即没有抽中的数据作为测试集。
2.2 性能度量
划分好数据集之后,开始对模型进行评估。以分类问题为例,常见的用于评估的性能指标如下。
2.2.1 错误率、精度
错误率:
E
(
f
;
D
)
=
1
m
∑
i
=
1
m
I
(
f
(
x
i
)
!
=
y
i
)
E(f; D) = \frac {1}{m} \sum _{i = 1}^m I(f({\boldsymbol x}_i) != y_i)
E(f;D)=m1∑i=1mI(f(xi)!=yi);表示预测结果错误的比率。
精度:
a
c
c
(
f
;
D
)
=
1
m
∑
i
=
1
m
I
(
f
(
x
i
)
=
=
y
i
)
=
1
−
E
(
f
;
D
)
acc(f; D) = \frac {1}{m} \sum _{i = 1}^m I(f({\boldsymbol x}_i) == y_i) = 1 - E(f; D)
acc(f;D)=m1∑i=1mI(f(xi)==yi)=1−E(f;D) ;表示预测结果正确的比率。
2.2.2 查准率、查全率
查准率:
P
=
T
P
T
P
+
F
P
P = \frac {TP}{TP + FP}
P=TP+FPTP;表示预测为正中真实为正的比率。
查全率:
R
=
T
P
T
P
+
F
N
R = \frac {TP}{TP + FN}
R=TP+FNTP;表示真实为正中预测为正的比率。
2.2.3 P-R曲线、BEP、F1
根据模型的预测结果对样例进行排序,选择一个阈值,认为概率超过这个阈值的样例是正例,低于这个阈值的样例是负例。
当阈值高时,预测为正的样例真实也为正,P=1,但是低于阈值的真实为正的样例预测为负,R较小。
当阈值低时,预测为正的样例可能真实为负,P较小,但是真实为正的样例都会被预测为正,R较大。
若一个模型的PR曲线完全包含另一个模型的PR曲线,则可断言前者优于后者。当曲线交叉时,可以比较PR曲线围成的面积。但是面积不好求,所以通过平衡点BEP来比较两个模型性能。
更常用的比较两个模型性能的指标是F1度量:
F
1
=
2
∗
P
∗
R
P
+
R
F1 = \frac {2 * P * R}{P + R}
F1=P+R2∗P∗R,当进行多次训练测试之后,得到多组混淆矩阵,则可以计算macro-F1和micro-F1。
2.2.4 ROC曲线、AUC
ROC曲线和PR曲线类似。ROC曲线纵坐标是真正例率
T
P
R
=
T
P
T
P
+
F
N
TPR = \frac {TP}{TP + FN}
TPR=TP+FNTP,表示真正例里预测为正的比率;横坐标是假正例率
F
P
R
=
F
P
T
N
+
F
P
FPR = \frac {FP}{TN + FP}
FPR=TN+FPFP,表示真负例里预测为正的比率。
当阈值高时,真实为正预测为正的比率较低,TPR较小,因为真实为正的样例有一些预测为负;真实为负预测为正的比率也低,FPR较小。
当阈值低时,真实为正预测为正的比率较高,TPR较大;真实为负预测为正的比率也较高,FPR较大。
所以ROC曲线如下图所示:
若一个模型的ROC曲线完全包含另一个模型的ROC曲线,则可断言前者优于后者。当曲线交叉时,可以比较ROC曲线面积围成的面积AUC。
3 比较检验
比较检验有多种方法,这里只记录假设检验方法,其他方法可参考周志华的《机器学习》这本书。
我们只知道模型的测试错误率而不知道模型的泛化错误率,但是可以根据测试错误率
ϵ
\epsilon
ϵ来推测泛化错误率
ϵ
‾
\overline\epsilon
ϵ。
4 参考文献
周志华 机器学习 清华大学出版社
谢文睿、秦州 机器学习公式详解 人民邮电出版社
部分图片源自网络,如有侵权联系删除