经验误差与过拟合
通常我们把分类错误的样本数占样本总数的比例称为"错误率" ,即如果在 m 个样本中有α个样本分类错误,则错误率
E
=
α
/
m
E=\alpha /m
E=α/m; 相应的,
1
−
α
/
m
1-\alpha /m
1−α/m 称为"精度",即"精度=1一错误率"。更一般地,我们把学习器的实际预测输出与样本的真实输出之间的差异称为"误差" , 学习器在训练集上的误差称为"训练误差"或"经验误差" ,在新样本上的误差称为"泛化误差" 。
当学习器把训练样本学得"太好"了的时候,很可能巳经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降这种现象在机器学习中称为"过拟合" . 与"过拟合"相对的是"欠拟合" ,这是指对训练样本的一般性质尚未学好。下图显示了关于过拟合与欠拟合的直观对比。
当学习能力过于强大时,容易产生过拟合,反之,学习能力低下时容易产生欠拟合。过拟合无法避免而欠拟合比较容易克服。
评估方法
留出法
定义:留出法是最简单的模型评估方法之一,它将原始数据集分为两部分:训练集和测试集。通常情况下,大约70%到80%的数据用于训练,剩下的20%到30%用于测试。
步骤:
1.随机地将数据划分为训练集和测试集。
2.使用训练集来训练模型。
3.使用测试集来评估模型的性能。
示例
以二分类任务为例,假定D包含1000个样本,将其划分为8包含700个样本, T包含300个样本,用 S进行训练后,如果模型在T上有90个样本分类错误,那么其错误率为 (90/300) x 100%=30%,相应的,精度为 1- 30% = 70%.。
优点:
1.简单易行。
2.如果数据集足够大,则能得到较为稳定的评估结果。
缺点:
1.如果数据集较小,那么划分可能会导致训练集和测试集分布不均,从而影响模型评估的准确性。
2.评估结果受到随机划分的影响较大。
交叉验证法
定义:交叉验证是一种更可靠的方法,它可以减少留出法中随机划分带来的偏差。最常见的形式是k折交叉验证。
步骤:
1.将数据集随机分成k个大小大致相等的互斥子集。
2.对于每一轮验证,选择一个子集作为测试集,其余的k-1个子集组成训练集。
3.训练模型并在测试集上评估其性能。
4.重复上述过程k次,每次选择不同的子集作为测试集。
5.最终模型性能由k轮验证结果的平均值给出。
交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,为强调这一点,通常把交叉验证法称为 " k折交叉验证"。下图是10折交叉验证
自助法
自助法是一种统计学中的重抽样技术,常用于估计统计量的标准误差和置信区间。
步骤:
1.从原始数据集中有放回地随机抽取相同大小的样本集合,形成一个自助样本集。
2.使用这个自助样本集来训练模型,并使用未被选中的样本来评估模型。
3.重复步骤1和2多次,得到多个模型的性能评估结果。
自助法在数据集较小、难以有效划分训练/测试集时很有用;但它比较耗时且结果可能受到初始数据集大小的影响。
调参与最终模型
定义:调参是指调整模型的超参数以优化模型性能的过程。最终模型则是指在确定最佳超参数后训练得到的最佳模型。
步骤:
1.选择超参数范围:定义要搜索的超参数及其取值范围。
2.使用网格搜索或随机搜索:尝试不同的超参数组合,使用交叉验证评估每个组合的性能。
3.选择最佳模型:根据交叉验证的结果选择性能最优的超参数组合。
4.训练最终模型:使用整个训练集和选定的最佳超参数来训练最终模型。
性能度量
对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量。下面介绍分类任务中常用的性能度量。
错误率与精度
错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。对于样例集D,分类错误率为
E
(
f
;
D
)
=
1
m
∑
i
=
1
m
I
(
f
(
x
i
)
≠
y
i
)
E\left( {f;D}\right) = \frac{1}{m}\mathop{\sum }\limits_{{i = 1}}^{m}\mathbb{I}\left( {f\left( {\mathbf{x}}_{i}\right) \neq {y}_{i}}\right)
E(f;D)=m1i=1∑mI(f(xi)=yi),精度则定义为
acc
(
f
;
D
)
=
1
m
∑
i
=
1
m
I
(
f
(
x
i
)
=
y
i
)
\operatorname{acc}\left( {f;D}\right) = \frac{1}{m}\mathop{\sum }\limits_{{i = 1}}^{m}\mathbb{I}\left( {f\left( {\mathbf{x}}_{i}\right) = {y}_{i}}\right)
acc(f;D)=m1i=1∑mI(f(xi)=yi)
=
1
−
E
(
f
;
D
)
.
= 1 - E\left( {f;D}\right) \text{.}
=1−E(f;D).
查准率、查全率与F1
查准率:模型预测为正例的样本中,实际为正例的比例。
查全率:实际为正例的样本中,被模型正确预测为正例的比例。
令 TP、 FP、 TN、 FN 分别表示其对应的样例数,则显然有TP+FP+TN+FN=样例总数.分类结果的"混淆矩阵" 如下表所示
查准率P与查全率R分别定义如下:
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
一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称 “P-R曲线"显示该曲线的图称为 “P-R图”。如下图所示
若一个学习器的P-R 曲线被另一个学习器的曲线完全"包住” , 则可断言后者的性能优于前者。比如学习器A与B的性能优于学习器C。其中平衡点是查准率=查全率时的取值。
F1度量:查准率和查全率的调和平均值,是二者平衡的度量。F1 度量·越高,说明模型在查准率和查全率方面的表现越均衡。
ROC与AUC
ROC 曲线:以查全率为横轴、查准率为纵轴绘制的曲线。
AUC:ROC 曲线下方的面积,范围在 0 到 1 之间,AUC 越接近 1 表示分类器性能越好。、
AUC可估算为
A
U
C
=
1
2
∑
i
=
1
m
−
1
(
x
i
+
1
−
x
i
)
⋅
(
y
i
+
y
i
+
1
)
.
\mathrm{{AUC}} = \frac{1}{2}\mathop{\sum }\limits_{{i = 1}}^{{m - 1}}\left( {{x}_{i + 1} - {x}_{i}}\right) \cdot \left( {{y}_{i} + {y}_{i + 1}}\right) .
AUC=21i=1∑m−1(xi+1−xi)⋅(yi+yi+1).
假设有以下预测概率与实际标签
实际标签:0,1,0,1,1,0,0,1
预测概率:0.1,0.4,0.35,0.8,0.6,0.2,0.1,0.9
使用下面代码可计算AUC和绘制ROC 曲线
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
y_true = [0, 1, 0, 1, 1, 0, 0, 1]
y_scores = [0.1, 0.4, 0.35, 0.8, 0.6, 0.2, 0.1, 0.9]
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
roc_auc = auc(fpr, tpr)
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange',
lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
运行结果如下:
代价敏感错误率与代价曲线
代价敏感错误率:考虑到不同类型的错误带来的代价不同,例如,在医疗诊断中误诊的成本远高于漏诊。
代价曲线:在不同的代价设置下,模型性能的变化情况。
比较检验
假设检验
假设检验是一种统计方法,用于判断两个或多个样本间的差异是否具有统计学上的显著性。通常涉及建立零假设
H
0
H_{0}
H0和备择假设
H
a
H_{a}
Ha
泛化错误率为E的学习器在一个样本上犯错的概率是
ϵ
\epsilon
ϵ;测试错误率
ϵ
^
\hat{\epsilon }
ϵ^意味着在m个测试样本中恰有
ϵ
^
×
m
\hat{\epsilon }\times m
ϵ^×m个被误分类.泛化错误率为
ϵ
\epsilon
ϵ的学习器被测得测试错误率为
ϵ
^
\hat{\epsilon }
ϵ^的概率:
P
(
ϵ
^
;
ϵ
)
=
(
m
ϵ
^
×
m
)
ϵ
ϵ
^
×
m
(
1
−
ϵ
)
m
−
ϵ
^
×
m
.
P\left( {\widehat{\epsilon };\epsilon }\right) = \left( \begin{matrix} m \\ \widehat{\epsilon } \times m \end{matrix}\right) {\epsilon }^{\widehat{\epsilon } \times m}{\left( 1 - \epsilon \right) }^{m - \widehat{\epsilon } \times m}.
P(ϵ
;ϵ)=(mϵ
×m)ϵϵ
×m(1−ϵ)m−ϵ
×m.
如下图所示,若
ϵ
\epsilon
ϵ=0.3,则10个样本中测得3个被误分类的概率最大。
交叉验证 t 检验
交叉验证 t 检验是一种用于比较两个模型性能的方法,它结合了交叉验证和t检验。首先对每个模型执行k折交叉验证,然后对每次交叉验证得到的结果进行配对样本t检验。
假设我们有两个分类器C1和C2,我们使用10折交叉验证来评估它们。对于每一折,我们记录两个分类器的准确率。之后,我们对这10组配对的准确率数据进行配对样本t检验,以确定两个分类器的性能是否有显著差异。