一、偏差与方差
设测试样本为 x \bf x x, y D y_D yD为 x \bf x x在数据集中的标签, y y y为 x \bf x x的真实标签, f f f为训练集 D D D上学习得到的模型, f ( x ; D ) f({\bf x};D) f(x;D)为 f f f在 x \bf x x上的预测输出。
1、期望预测
f ‾ ( x ) = E D [ f ( x ; D ) ] \overline{f}({\bf x})=\mathbb{E}_{D}[f({\bf x} ; D)] f(x)=ED[f(x;D)]
2、方差
使用样本数目相同的不同训练集产生的方差:
var ( x ) = E D [ ( f ( x ; D ) − f ‾ ( x ) ) 2 ] \operatorname{var}(\boldsymbol{x})=\mathbb{E}_{D}\left[(f(\boldsymbol{x} ; D)-\overline{f}(\boldsymbol{x}))^{2}\right] var(x)=ED[(f(x;D)−f(x))2]
3、噪声
ε 2 = E D [ ( y D − y ) 2 ] \varepsilon^{2}=\mathbb{E}_{D}\left[\left(y_{D}-y\right)^{2}\right] ε2=ED[(yD−y)2]
4、偏差
期望输出与真是标签的差别为偏差:
bias 2 ( x ) = ( f ‾ ( x ) − y ) 2 \operatorname{bias}^{2}(\boldsymbol{x})=(\overline{f}(\boldsymbol{x})-y)^{2} bias2(x)=(f(x)−y)2
5、期望泛化误差分解
期望泛化误差分解,假定噪声期望为0,即 E D [ y D − y ] = 0 \mathbb{E}_{D}\left[y_{D}-y\right]=0 ED[yD−y]=0:
E ( f ; D ) = bias 2 ( x ) + var ( x ) + ε 2 E(f ; D)=\operatorname{bias}^{2}(\boldsymbol{x})+\operatorname{var}(\boldsymbol{x})+\varepsilon^{2} E(f;D)=bias2(x)+var(x)+ε2
泛化误差 = 偏差 + 方差 + 噪声
- 偏差度量了算法的期望预测与真是结果的偏离程度,刻画了算法本身的拟合能力。
- 方差度量了通用大小的训练集的变动所导致的学习性能的变化,刻画了数据扰动所造成的影响。
- 噪声表达了在当前任务上任何算法所能达到的期望泛化误差的下界,刻画了学习问题本身的难度。
- 偏差-方差分解说明,泛化性能是由算法的能力、数据的充分性和任务本身难度决定的。
6、过拟合与欠拟合
-
上图中,训练的初始阶段,算法的学习拟合能力不强,训练数据的扰动不足以使学习器产生显著变化,偏差主导泛化错误率,此时算法欠拟合
-
随着训练程度的增加,算法的拟合能力增强,以至于在训练后期数据的细微扰动都被学习到,方差主导了泛化错误率,此时算法过拟合
8、进一步理解
偏差可以理解为训练集的表现,方差可以理解为验证集的表现。训练集的误差大(欠拟合)则偏差高,训练集的误差低但验证集误差大(欠拟合)则方差高。假设练集和验证集来自相同分布,举例说明:
0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
训练集误差 | 1% | 15% | 15% | 0.5% |
测试集误差 | 12% | 16% | 30% | 1% |
过拟合,高偏差 | 欠拟合, 高偏差 | 高偏差、方差 | 低偏差低方差 ,适度拟合 |
-
降低过拟合风险的方法:
- 获得更多的数据集
- 降低模型复杂度
- 正则化方法
- 集成学习
-
降低欠拟合风险的方法:
- 添加新的特征
- 增加模型的复杂度
- 减小正则化系数
二、评估方法
假设有包含 m m m个样本的数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } D=\left\{\left(\bf{x}_{1}, y_{1}\right),\left(\bf{x}_{2}, y_{2}\right), \ldots, \left(\bf{x}_{m}, y_{m}\right)\right\} D={(x1,y1),(x2,y2),…,(xm,ym)},需要从中产生训练集 T T T和测试集 S S S
1、留出法(hold-out)
将 D D D划分为两个互斥的集合,训练集 T T T和测试集 S S S。
- 要尽可能保持数据分布的一致性。
- 单次使用留出法估计的结果不可靠,一般采用若干次随机划分,重复进行多次后取平均值
2、k折交叉验证
以3-折交叉验证为例:
为例建学校因样本划分不同而引入的差别,k折交叉验证通常需要随机使用不同的划分重复P次,最终估计结果是P次k折交叉验证结果的均值。
3、自助法
数据集 D D D中一共有 m m m个样本,每次从中随机选一个复制到 D ′ D^{\prime} D′中(相当于有放回采样),重复 m m m次。这样最后得到一个有 m m m个样本的数据集 D ′ D^{\prime} D′。这样一部分样本在 D ′ D^{\prime} D′中会出现多次,一部分样本则不会出现。假设样本在 m m m次采样中不被采到的概率为 ( 1 − 1 m ) m \left(1-\frac{1}{m}\right)^{m} (1−m1)m,取极限:
lim m ↦ ∞ ( 1 − 1 m ) m ↦ 1 e ≈ 0.368 \lim _{m \mapsto \infty}\left(1-\frac{1}{m}\right)^{m} \mapsto \frac{1}{e} \approx 0.368 m↦∞lim(1−m1)m↦e1≈0.368
约有36.8%的样本未在 D ′ D^{\prime} D′中。我们用 D ′ D^{\prime} D′作为训练集, D \ D ′ D \backslash D^{\prime} D\D′作为测试集,这样约有1/3没在训练集中出现过的样本作为测试集,这样的测试称为包外估计(out-of-bag)
自助法在数据集较小时很有用。但自助法产生的数据集改变了出事数据集的分布,会引入估计偏差。
三、性能度量
1、混淆矩阵
对于二分类问题,可以将真实标签和预测值得组合划分为真正例(TP),假正例(FP),真反例(TN),假反例(FN)。令TP、FP、TN、FN分别表示对于的样本数目,显然有TP+FP+TN+FN=样本总数。则混淆矩阵表示如下:
2、准确率、精度、召回率
- 准确率(accuracy):
a c c = T P + T N T P + T N + F P + F N acc=\frac{TP+TN}{TP+TN+FP+FN} acc=TP+TN+FP+FNTP+TN
- 精度(precision,也叫查准率):
P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
- 召回率(recall,也加查全率):
R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
精度与召回率是一堆相互矛盾的指标,P高则R偏低,R 高则P偏低
3、 F 1 F_{1} F1 分数
F 1 F_{1} F1分数综合了精度与召回率:
F 1 = 2 × P × R P + R F_{1}=\frac{2 \times P \times R}{P+R} F1=P+R2×P×R
F 1 F_{1} F1分数有更加一般的形式:
F β = 1 1 + β ( 1 P + β 2 R ) F_{\beta}=\frac{1}{1+\beta} \left(\frac{1}{P} + \frac{\beta^{2}}{R} \right) Fβ=1+β1(P1+Rβ2)
β > 1 \beta > 1 β>1时召回率的影响更大, β < 1 \beta < 1 β<1时精度的影响更大。
4、macro与micro
对于多分类问题,每两两类别的组合都对应一个混淆矩阵,我们希望在n个二分类的混淆矩阵上综合考察精度和召回率。
- 先在个混淆矩阵上分别计算P和R,再计算平均值,得到宏查准率(macro-P)、宏查全率(macro-R)、宏 F 1 F_{1} F1(macro- F 1 F_{1} F1)
m
a
c
r
o
P
=
1
n
∑
i
=
1
n
P
i
macro P=\frac{1}{n}\sum_{i=1}^n P_{i}
macroP=n1i=1∑nPi
m
a
c
r
o
R
=
1
n
∑
i
=
1
n
R
i
macro R=\frac{1}{n}\sum_{i=1}^n R_{i}
macroR=n1i=1∑nRi
m
a
c
r
o
F
1
=
2
×
m
a
c
r
o
P
×
m
a
c
r
o
R
m
a
c
r
o
P
+
m
a
c
r
o
R
macro F_{1}=\frac{2 \times macroP \times macroR}{macroP + macroR}
macroF1=macroP+macroR2×macroP×macroR
- 还可以将各混淆矩阵的对应缘故进行平均,得到 T P TP TP、 F P FP FP、 T N TN TN、 F N FN FN的平均值 T P ‾ \overline {TP} TP、 F P ‾ \overline {FP} FP、 T N ‾ \overline {TN} TN、 F N ‾ \overline {FN} FN,最后得到微查准率(micro-P)、微查全率(micro-R)、微 F 1 F_{1} F1(micro-F1)
m
i
c
r
o
P
=
T
P
‾
T
P
‾
+
F
P
‾
micro P=\frac{\overline {TP}}{\overline {TP} + \overline {FP}}
microP=TP+FPTP
m
i
c
r
o
R
=
T
P
‾
T
P
‾
+
F
N
‾
micro R=\frac{\overline {TP}}{\overline {TP} + \overline {FN}}
microR=TP+FNTP
m
i
c
r
o
F
1
=
2
×
m
i
c
r
o
P
×
m
i
c
r
o
R
m
i
c
r
o
P
+
m
i
c
r
o
R
micro F_{1}=\frac{2 \times microP \times microR}{microP + microR}
microF1=microP+microR2×microP×microR
5、P-R曲线
P-R曲线的横轴是召回率,纵轴是精度。机器学习算法可以一般可以输出属于某个类别的概率,P-R曲线上的某一点表示,在某个概率阈值下,大于该阈值的结果判定为正样本,小于该阈值判定为负样本,此时返回结果对应的召回率和精度。整条P-R曲线就是通过将阈值从高到低移动而形成的。
若一个模型的P-R曲线被另一个完全包住,则后者优于前者。若曲线交叉,则看recall=precision的取值,即平衡点,大的则性能优。
6、ROC曲线
ROC曲线全称“受试者工作特征(Receiver operating characteristic)”。绘制方法与P-R曲线一样,不同的是,ROC曲线的纵轴是真正例率(TPR),横轴是假正例率(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
ROC曲线还有另外一种绘制方法:假定正样本有P个,负样本有N个,把横轴刻度间隔设为 1 N \frac{1}{N} N1,纵轴刻度间隔设为 1 P \frac{1}{P} P1,再根据模型输出的预测概率对样本从高到低排序,以此遍历样本,从零点开始,每遇到一个正样本就沿纵轴方向绘制一个间隔,每遇到一个负样本就沿横轴方向绘制一个间隔,直到(1, 1)这个点。
若一个模型的ROC曲线被另一个完全包住,则后者优于前者。若有交叉,则用ROC曲线下面积AUC(Aera Under ROC
Curve)表示:
A U C = 1 2 ∑ i = 1 m − 1 ( x i + 1 − x i ) ( y i + y i + 1 ) AUC=\frac{1}{2} \sum_{i=1}^{m-1} \left( x_{i+1} - x_{i}\right) \left(y_{i} + y_{i+1} \right) AUC=21i=1∑m−1(xi+1−xi)(yi+yi+1)
ROC曲线中可能出现斜线,所以应该用梯形面积公式。
参考资料
- 周志华《机器学习》
- 《百面机器学习》
- https://github.com/datawhalechina/pumpkin-book
ok - https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html#sphx-glr-auto-examples-model-selection-plot-roc-py
更多文章请浏览作者个人网站5663015.github.io
添加作者微信,一起交流学习,微信号:wuan3076
您的打赏是我进步的动力~