— 本博客内容主要来自周志华著《机器学习》及网上相关资源,用于个人的学习记录,禁止转载。
1.方差-偏差均衡
机器学习的目标是学得的模型能够很好地应用于”新样本“,而不是仅仅在训练样本上工作的很好。学习得到的模型应用于新样本的能力,称为”泛化”(generalization)能力。尽管训练集通常只是样本空间的一个很小的采样,我们人希望它能够很好地反映整个样本空间的特性,否则就很难期望在训练集上学得的模型能够在整个样本空间工作的很好。
这里要理解,采样得到的样本(每一条数据),本身就是一个变量的值,而这个变量在样本空间本身是有分布的。我们采样得到的样本越多,越有可能获得更多关于这个分布的信息。模型在整个样本空间的错误率是无法得到的(分布未知),我们使用测试集只能近似评估。除了通过实验评估泛化误差,我们还可以理论上将其分解为 偏差、方差与噪音。
偏差:度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;
方差:度量了同样大小的训练集的变动所导致的学习性能的变化,刻画了数据扰动造成的影响;
噪声:表达了在当前任务上,任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度(这里的难度可以理解为学习算法把有用的信号和无用的噪声分离的难度)。
综合来看,泛化性能是由学习算法的能力、数据的充分性及学习任务本身的难度共同决定的。
一般来说,偏差和方差是有冲突的,训练不足时,学习器的拟合能力不够强,偏差此时主导了错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,方差逐渐主导了泛化错误率。
设有测试样本
x
x
x,令
y
D
y_D
yD为
x
x
x在数据集中的标记,
y
y
y为真实的标记(这里有“噪音”使得
y
D
≠
y
y_D\ne y
yD̸=y),
f
(
x
∣
D
)
f(x|D)
f(x∣D)为训练集D上学得的模型在
x
x
x上的预测输出,期望预测为
f
‾
(
x
)
=
E
D
[
f
(
x
;
D
)
]
\overline{f}(x)=\text{E}_D[f(x;D)]
f(x)=ED[f(x;D)],这里注意求是在训练集D上的期望,训练集本质是有样本组成的,样本是有分布的,只不过未知。也就是,虽然训练集都是来自同一个分布,但训练的模型还是会不同,用方差(variance)衡量为
v
a
r
(
x
)
=
E
D
[
(
f
(
x
;
D
)
−
f
‾
(
x
)
)
2
]
var(x)=\text{E}_D[(f(x;D)-\overline{f}(x))^2]
var(x)=ED[(f(x;D)−f(x))2]
期望输出和真实标记的差别为偏差(bias)
b
i
a
s
(
x
)
=
(
f
‾
(
x
)
−
y
)
2
bias^(x)=(\overline{f}(x)-y)^2
bias(x)=(f(x)−y)2
假设噪声期望值为零,记噪音为
ϵ
2
=
E
D
[
(
y
D
−
y
)
2
]
\epsilon^2=\text{E}_D[(y_D-y)^2]
ϵ2=ED[(yD−y)2], 那么可以将算法的期望泛化误差分解为:
E
(
f
;
D
)
=
E
D
[
(
f
(
x
;
D
)
−
y
D
)
2
]
=
b
i
a
s
2
(
x
)
+
v
a
r
(
x
)
+
ϵ
2
\text{E}(f;D)=\text{E}_D[(f(x;D)-y_D)^2]=bias^2(x)+var(x)+\epsilon^2
E(f;D)=ED[(f(x;D)−yD)2]=bias2(x)+var(x)+ϵ2
2.过拟合
训练到一定的程度后,学习器的泛化性能反而下降,这就是所谓的过拟合(overfitting)。很多因素导致过拟合,通常是因为学习器学习能力过于强大,以至于把训练样本所包含的不太一般的特性(对于预测没有帮助)都学会了。不同的学习模型有各自解决过拟合的方法。这里应该注意,过拟合是无法彻底避免的,只能够缓解。
3.评估方法
如何使用测试集更好的评估模型的泛化误差,这是个很重要的问题。
3.1 留出法
留出法(hold-out):直接将数据集划分为两个互斥的集合,分为训练集和测试集。需要注意,为了避免在数据划分的时候引入额外的偏差,需要保持样本的类别比例相似,可以理解为“分层抽样”。通常划分比例为,训练集占2/3-4/5。
3.2 交叉验证法
交叉验证法(cross validation):先将数据集D通过分层抽样划分为 k k k个大小相似的互斥子集,每次用 k − 1 k-1 k−1子集做为训练集,余下的作为测试集,这样获得 k k k组训练/测试集,最终 k k k个测试结果的均值。 k k k的取值十分重要,通常取为10。
如数据集D包含 m m m个样本,令 k = m k=m k=m,就得到了交叉验证法的特例,留一法。留一法不受随机样本划分方式的影响,被实际评估的模型与期望评估的用D训练出的模型很相似。但是当数据比较大时,训练量是无法忍受的。
3.3自助法
自助法为了解决实际评估的模型所用的训练集比D小,因训练样本规模不同而导致的估计偏差,采用了自助采样法:每次随机从D中挑选一个样本,将其拷贝放入 D ′ D' D′,然后再放回,使得该样本下次采样仍然可能被抽到,这个过程重复 m m m次,得到包含 m m m各样本的数据集 D ′ D' D′。根据概率,数据集D中会有36.8%的样本始终不被抽到,而在 D ′ D' D′中不出现,这样我们使用 D ′ D' D′作为训练集,余下的始终未抽到的作为测试集(约1/3),这样的测试结果称为“包外估计”(out-of-bag estimate)。
优点: 适用于数据集较小、难以划分的情况,此外从初试数据集中产生多个不同的训练集,这对于集成学习有好处。
缺陷: 自助产生的数据集改变了初始数据集的分布,引入了估计偏差。所以在数据量足够时,不使用。
4.性能度量
对模型的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,即性能度量。要注意,模型的好坏是相对的,标准不仅取决于算法和数据,还决定于具体的任务需求。
回归任务中最常用的就是均方误差,而分类任务中常用的性能度量则比较复杂。
最基本的是错误率(error rate)和精度(accuracy),这是最常用的,分别为分类错误的样本数占样本总数的比例和分类正确的占的比例。此外常用的还有准确率(precision)和召回率(recall)。下面引用某知乎大神(莫烦的一条答案:
我开了条汽车生产线. "有故障"比较少, 所以是 Positive (真有故障). 正常是 Negative (没故障).有一天,由于客人的投诉,我需要召回有故障的车,注意是我认为有故障的车,不一定是真的有故障。
准确率理解为在 “我觉得故障” 的车中有多少 "真故障"TP/(TP+FP).
召回率理解为 召回 / 真故障 = TP / (TP+FN).
这里注意,准确率和召回率是一对矛盾的度量,以西瓜为例,如果把所有的西瓜都选为好瓜,那么显然真正的好瓜都包含了,这样召回率很高,但是准确率很低;反之,选的瓜很少,那么可能达到很高的准确率,但是好瓜召回率很低。因而,我们把学习器的预测结果进行排序,排在前面的认为是正例,后面的认为是负例。按此顺序逐个把样本作为正例进行预测(相当于不断移动阈值),那么可以计算当前的准确率和召回率。作出一条P-R曲线,只有当一条曲线完全包住另外一条时,才能说这条曲线代表的模型优于另外一个,例如A,B优于C,但是A和B之间没有绝对的优劣。
平衡点: 当准确率=召回率时,得到的取值,通常用来比较两个学习器。
F1度量: F 1 = 2 × P r e c i s i o n × R e c a l l P r e s i o n + R e c a l l F1=\frac{2\times Precision \times Recall}{Presion+Recall} F1=Presion+Recall2×Precision×Recall
F β F_{\beta} Fβ度量: F β = ( 1 + β 2 ) × P r e c i s i o n × R e c a l l β 2 × P r e s i o n + R e c a l l F_{\beta}=\frac{(1+\beta^2)\times Precision \times Recall}{\beta^2\times Presion+Recall} Fβ=β2×Presion+Recall(1+β2)×Precision×Recall使用 β \beta β度量准确率和召回率的相对重要性,当 β > 1 \beta>1 β>1时,召回率更重要,反之,准确率更重要。
另外还有根据"真正例率"(TPR)和"假正例率"(FPR)做出的ROC曲线,横轴为FPR,纵轴为TPR,定义分别为: T P R = T P T P + F N , F P R = F P T N + F P TPR=\frac{TP}{TP+FN}, FPR=\frac{FP}{TN+FP} TPR=TP+FNTP,FPR=TN+FPFP。此处的例率可以理解为“正”样本中的正/负样本占各自总的百分比。点(0,1)对应将所有的正样本排在所有的负样本之前的理想模型。如果一个学习器的ROC曲线被另一个学习器的完全包住,那么可以断言后者的性能优于前者,若两个发生交叉,则一般通过比较ROC曲线下面积,即AUC(Area Under ROC Curve)进行比较,形式化地看,AUC考虑的是样本预测的排序质量。