经验误差与过拟合
经验误差
“错误率”(error rate)
E
=
a
/
m
E = a/m
E=a/m
“精度”(accruacy)
A
c
c
u
r
a
c
y
=
1
−
a
/
m
Accuracy = 1-a/m
Accuracy=1−a/m
m
:
样
本
数
;
a
:
样
本
分
类
错
误
数
m:样本数;a:样本分类错误数
m:样本数;a:样本分类错误数
更一般的,我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差”(training error)或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalization error)。
过拟合
过拟合(overfitting)——当学习器学习的过于复杂,把训练集自身的特征当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能的下降。
与过拟合相对应的是欠拟合(underfitting),这是指对训练样本的一般性质尚未学好。
过拟合产生的原因:
- 学习能力过于强大,把训练样本所包含的不太一般的特性学到了。
过拟合是无法彻底避免的,我们能做的是“缓解”,或者说减小风险。
关于这一点,可大致这样理解:机器学习面临的问题通常是NP难甚至更难,而有效的学习算法必然是在多项式时间内运行完成,若可彻底避免过拟合,则通过经验误差最小化就能获最优解,这就意味着我们构造性的证明了“P=NP”;因此,只要相信“P
≠
\ne
̸=NP”,过拟合就不可避免。
欠拟合产生的原因:
- 欠拟合通过由于学习能力低下造成的。
评估方法
留出法
“留出法”(hold-out)直接将数据集 D D D划分为两个互斥的集合,其中一个集合作为训练集 S S S,另一个作为测试集 T T T,即 D = S ∪ T , S ∩ T = ∅ D = S \cup T, S \cap T = \varnothing D=S∪T,S∩T=∅。在 S S S上训练处模型后,用 T T T来评估其测试误差,作为对泛化误差的估计。
需要注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”(stratified sampling)。例如通过对 D D D进行分层采样而获得含70%样本的训练集 S S S和含30%样本的测试集 T T T,若 D D D包含500个正例、500个反例,则分层采样得到的 S S S应包含350个正例、350个反例,而 T T T则包含150个正例和150个反例;若 S 、 T S、T S、T中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。
单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平局值作为留出法的评估结果。例如进行100次随机划分,每次产生一个训练/测试集用于实验评估,100次后就得到100个结果,而留出法返回的则是这100个结果的平均。
此外,我们希望评估是用 D D D训练出的模型的性能,但留出法需要划分出训练/测试集,这就会导致一个窘境:若令训练集 S S S包含绝大多数样本,则训练出的模型可能更接近于用 D D D训练出的模型,但由于 T T T比较小,评估结果可能不够稳定准确;若令测试集 T T T多包含一些样本,则训练集 S S S与 D D D差别更大了,被评估的模型与用 D D D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity)。这个问题没有完美的解决方案,常见的做法是将大约2/3~4/5的样本用于训练,剩余的样本用于测试。
交叉验证法
“交叉验证法”(cross validation)先将数据集 D D D划分为 k k k个大小相似的互斥子集,即 D = D 1 ∪ D 2 ∪ … ∪ D k , D i ∩ D j = ∅ ( i ≠ j ) D = D_1 \cup D_2 \cup \ldots \cup D_k, D_i \cap D_j = \varnothing (i \neq j) D=D1∪D2∪…∪Dk,Di∩Dj=∅(i̸=j)。每个子集 D i D_i Di都尽可能保持数据分布的一致性,即从 D D D中通过分层采样得到。然后,每次用 k − 1 k-1 k−1个子集的并集作为训练集,余下的那个子集作为测试集;这样就获得 k k k组训练/测试集,从而可以进行 k k k次训练和测试,最终返回的是这 k k k个测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k k k的取值,为强调这一点,通常把交叉验证法称为“ k k k折交叉验证”( k − f o l d k-fold k−fold cross validation)。 k k k最常用的取值是10,此时称为10折交叉验证;其他常用的 k k k值有5、20等。
查准率与查全率
查准率
P
P
P
P
=
T
P
T
P
+
F
P
P= \frac{TP}{TP+FP}
P=TP+FPTP
查全率
R
R
R
R
=
T
P
T
P
+
F
N
R = \frac{TP}{TP+FN}
R=TP+FNTP
注:
T
P
TP
TP:真正例
F
P
FP
FP:假正例
F
N
FN
FN:假反例
T
N
TN
TN:真反例
查准率与查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
F
1
F1
F1度量:
F
1
=
2
×
P
×
R
P
+
R
=
2
×
T
P
样
例
总
数
+
T
P
−
T
N
F1 = \frac{2 \times P \times R}{P + R} = \frac{2 \times TP}{样例总数+TP-TN}
F1=P+R2×P×R=样例总数+TP−TN2×TP
ROC和AUC
ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了“ROC曲线”。ROC曲线的纵轴是“真正例率”(True Positive Rate,简称TPR),横轴是“假正例率”(False Positive Rate,简称FPR),两者分别定义为
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
AUC(Area Under ROC Curve),表示ROC曲线下各部分的面积。