读西瓜书笔记(二)模型评估与选择
(一)误差与过拟合
1.经验误差(empirical error)/训练误差(training error)与泛化误差(generalization error)
- 错误率(error rate): 通常我们把分类错误的样本数占样本总数的比例称为“错误率"。
- 精度(accuracy): 精度 = 1 - 错误率。即如果我们在m个样本中有a个样本分类错误,则错误率为E = a / m;相应的,1 - a / m 称为精度。
- 误差(error): 我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”。
- 训练误差(training error)/训练误差(training error): 学习器在训练集上的误差称为“训练误差”/“经验误差”
- 泛化误差(generalization error): 学习器在新样本上的误差称为“泛化误差”。
2.过拟合(overfitting)与欠拟合(underfitting)
- 过拟合(overfitting): 当学习器把训练样本学的“太好了”,对训练样本过度学习导致把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样会导致泛化能力降低(也就是学习器/模型在训练集上的精度很好,但是在验证集上的精度不好),这种现象在机器学习中的称为“过拟合”
- 欠拟合(underfitting): 对训练样本的一般性质尚未学好称为“欠拟合”。
- 过拟合是机器学习面临的关键障碍,各类学习算法都必然带有一些针对过拟合的措施;
- 过拟合是无法彻底避免的,我们所能做的只是缓解过拟合,或者说是减少其风险。机器学习面临的问题通常是NP难甚至更难,而有效的学习方法必然是在多项式时间内运行完成的,而经验差最小化就是得到最优解,这意味着我们构造性的证明了"NP = P",因此只要相信"NP != P"过拟合就不可避免。
(二)模型评估(Model Evaluation)
1.测试集(testing set)
- 测试集(testing set): 通常,我们可通过实验测验来对学习器的泛化误差进行评估并进而做出选择,为此,需要一个“测试集”来测试学习器对新样本的判别能力。然后以测试集上的“测试误差”(testing error)作为泛化误差的近似。
- 通常我们假设测试样本也是从样本真实分布中独立同分布采样而得到。但需要注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现,未在训练过程中使用过。
- 训练集用于模型的训练,而测试集用于评估模型的性能。(即模型的泛化能力)一般来说,训练模型时,测试集从头到尾都不会参加模型的训练。
注:我们只在模型的参数调整好了,整个模型训练好了之后在测试集上进行评估测试模型的近似泛化误差以及性能。 在训练过程中我们还要对模型进行选择和参数(超参数)调优,如果在模型选择的过程中,我们始终用测试集来评价模型性能进行参数调优,这实际上也将测试集变相地转为了训练集,这时候选择的最优模型很可能是过拟合的。所以我们要引入一个验证集(validation set)其作用是在训练的过程中进行模型选择和参数(超参数)调优,减缓训练时的过拟合。
(三)模型选择(Model Selection)
注:有资料把选择参数这一步称为模型选择,也有不少资料把选择何种模型算法称为模型选择。
- 参数(超参数(hyper parameters))选择:: 在训练模型这一步,我们非常关心如何选择参数来提高模型的预测能力,因为对于同一种机器学习算法,如果选择不同的参数(超参数),模型的性能会有很大差别。
1.验证集(validation set)
- 验证集(validation set): 模型评估与选择中用于评估测试的数据集(基于验证集上的性能来进行模型选择和调参)常称为“验证集”
- 测试集(testing set)和验证集(validation set)的比较和区别
机器学习大致过程
-
有了模型评估(Model Evaluation)和模型选择(Model Selection)以及训练集(training set)、验证集(validation set)、测试集(testing set)的概念,可以大致归纳出机器学习的过程步骤:
- 将整个数据集按照正确的划分方式划分成训练集、验证集、测试集。
- 选取一个模型选择方法(如Hold-out Method),首先确定一个学习算法,然后确定模型的超参数集。
- 将模型用于训练集上训练,确定模型函数中的参数集。
- 将此时完整的模型用于验证集上进行性能评估。
- 重复2、3、4步骤,根据在验证集上的性能评估结果,得到效果最好的学习算法以及确定了其模型的超参数集。
- 此时,模型选择(Model Selection)已经完成,确定了最优的学习算法以及其超参数组合,把训练集和验证集合并,然后把模型置于合并后的训练集上训练,确定模型中的函数等参数,得到最优函数。
- 把训练好的模型用于测试集上进行模型评估(Model Evaluation)。
- 在整个数据集上训练最终模型,得到一个在未见数据集或未来数据集上能够更好地泛化的模型。
(四)Hold-out Method(留出法)
- 注: Hold-out Method是将整个数据集仅分出一部分作为训练集训练模型,另外的部分作为验证集和测试集,当在模型评估时我们用训练集训练,测试集来评估;而当用留出法做模型选择时,我们用训练集训练,验证集来调整参数(超参数)或者选择算法模型。(下面是有关Hold-out Method在模型评估(Model Evaluation)和模型选择(Model Selection)中的详细用法)
1.Hold-out Method for Model Evaluation(Hold-out Method用于模型评估)
- 留出法(Hold-out Method): 直接将数据集D划分成两个互斥的集合,其中一个为训练集S,另一个作为测试集T,这称为“留出法”。
- 需注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,若S,T中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异产生偏差。
- 分层采样(stratified sampling): 在对数据集进行划分的时候,保留类别比例的采样方式称为“分层采样”。若对数据集D(包含500个正例,500个反例)则分层采样的到的训练集S(70%)应为350个正例,350个反例,测试集(30%)应为150个正例,150个反例。
- 一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
- 划分比例: 若训练集S包含大多数样本则模型可能更接近于用整个数据集D训练出的样本,而因为测试集T太小,评估结果会不稳定不准确。反之,若测试集T很大,则训练集S训练出来的模型丧失了真实性。常见的做法是将大约2/3 ~ 4/5的样本用于训练,剩余样本呢用于测试。
- 用Hold-out Method在模型评估时的步骤:
- 将数据集分为训练集和测试集两部分(一般的比例时70-30%)
- 在训练集上训练模型,在训练之前要选择固定的一些模型超参数设置。
- 把训练好的模型在测试集上评估(测试)
- 在整个数据集上训练最终模型,得到一个在未见数据集或未来数据集上能够更好地泛化的模型。
注:此过程用于基于将数据集分割为训练数据集和测试数据集并使用固定的超参数集的模型评估。下面阐述的就是确定模型的超参数。
2.Hold-out method for Model Selection(Hold-out Method用于模型选择)
Hold-out Method也可用于模型选择或超参数调谐 。事实上,有时模型选择过程被称为超参数调优。在模型选择的hold-out方法中,将数据集分为训练集(training set)、验证集(validation set)和测试集(testing set)。如下图:
- 用Hold-out Method在模型选择时的步骤:
- 把数据集分成训练集、验证集和测试集。
- 训练不同的模型用不同的机器学习算法(如logistic regression, random forest, XGBoost)。
- 对于用不同算法训练的模型,调整超参数,得到不同的模型。对于步骤2中提到的每个算法,改变超参数设置,并配备多个模型。
- 在验证集上测试每个模型(属于每个算法)的性能。
- 从验证数据集中测试的模型中选择最优的模型。对于特定的算法,最优模型将具有最优的超参数设置。
- 在测试数据集中测试最优模型的性能。
用Hold-out Method的整个训练的过程如下图:
(五)Cross-Validation(交叉验证)/ k-fold Cross-Validation(K折交叉验证) & Nested Cross-Validation(嵌套交叉验证)
1.k-fold Cross—Validation for Model Evaluation(k-fold Cross-Validation用于模型评估)
- 交叉验证法(cross validation)/k折交叉验证(k-fold cross validation):将数据集D划分成k个大小相似的互斥子集,每个子集Di都尽量保持数据分布的一致性,即从D中通过分层采样得到,然后每次用k - 1个子集的并集作为训练集,余下的那个自己作为测试集,这样可以获得k组训练/测试集,从而进行k次训练测试,最终结果为k次训练测试的均值,这称为“k交叉折验证法”
- 与留出法相似,将数据集划分为k个子集有多种划分方式,为了减小样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的结果是这p次k折交叉验证结果的均值。例如有10折10折交叉验证。
2.k-fold Cross-Validation for Model Selection(k-fold Cross-Validation用于模型选择)
和在Hold-out Method中讲述的一样,对于一个模型我们在训练的时候需要参数调优,那么k-fold Cross-Validation 也是一种很好的参数调优方法,在上述k-fold Cross-Validation用于模型评估的基础上,进一步对训练集进行划分成k(此处的k未必要等于模型评估时的k)个大小相似的互斥子集,每次用k - 1个子集用于训练,一个作为验证集,这样得到k组训练/验证集,从而进行k次训练验证,根据结果模型选择和进行超参数调整。
3.Nested Cross Validation(嵌套交叉验证)
根据上述的k-fold Cross-Validation在模型评估和模型选择的用法,可以在学习中嵌套使用两者。如下图所示:
- 上述图片中训练模型采用内环使用2-fold cross-validation(2折交叉验证)选取最优模型和超参数后,外环使用5-fold cross-validation(5折交叉验证)的方法得到近似的泛化误差来评估模型的性能。我们把这称为nested 5×2 cross-validation(嵌套5 * 2交叉验证)。
(六)Bootstrap sampling(自助采样法)
Bootstrap sampling(自助抽样法)在数据集较小,难以划分训练/测试集时很有用;此外自助法能从数据集中产生多个不同的训练集,这对集成学习等方法有很大好处。但是。自助抽样法产生的数据集改变了初始数据集的分布,这会引入估计偏差。
- Booststrap Sampling(自助抽样法): 给定包含m个样本的数据集 ,每次随机从D中挑选一个样本,将其拷贝放入D’,然 后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到。重复执行m次,就可以得到了包含m个样本的数据集 。可以得知在m次采样中,样本始终不被采到的概率为(1 - 1 / m) ^ m;
- 通过自助采样,初始数据约有36.8%的样本未出现在采样数据集D'中,于是我们可以把数据集D'用作训练集,D \ D'(注:\是集合运算,即属于D且不属于D',D - D')用作测试集。
- 这样,实际评估的模型与期望评估的模型都是使用m个训练样本,而我们仍有约1 / 3的、没在训练集中出现的样本用于测试。这样的测试结果称为“包外估计”(out-of-bag estimate)
(七)性能度量(performance measure)
1.回归问题
- 回归问题最常用的性能度量是“均方误差”(mean squared error)。
- 给定D = {(x1, y1), (x2, y2),……,(xm, ym)},其中yi是示例xi的真实标记;要评估学习器f的性能,要把学习器预测结果和f(x)与真实标记y比较:
E
(
f
;
D
)
=
1
m
∑
n
=
1
m
(
f
(
x
i
)
?
y
i
)
2
E(f;D) = \frac{1}{m}\sum_{n=1}^{m}{(f(x_i) - y_i)^2}
E(f;D)=m1?n=1∑m?(f(xi?)?yi?)2
- 更一般的,对于数据分布D概率密度函数P(·),均方误差可描述为:
E
(
f
;
D
)
=
∫
x
?
D
(
f
(
x
)
?
y
)
2
p
(
x
)
d
x
E(f;D) = \int_{x-D}^{}{(f(x) - y)^2p(x)}dx
E(f;D)=∫x?D?(f(x)?y)2p(x)dx
2.分类问题
- 错误率: 分类错误的样本数占样本总数的比例。对于样例集D,错误率定义为:
3.true positive(真正例)& false positive(假正例)& true negative (真反例)& false negative(假反例)
- True Positive (TP): True positive represents the value of correct predictions of positives out of actual positive cases.
- False Positive (FP): False positive represents the value of incorrect positive predictions.
- True Negative (TN): True negative represents the value of correct predictions of negatives out of actual negative cases.
- False Negative (FN): False negative represents the value of incorrect negative predictions.
- confusion matrix(混淆举证)分类结果的混淆举证如下图:
4.Precision Score(查准率/准确率)& Recall Score(查全率/召回率)& F1-score
- Precision(P): Model precision score represents the model’s ability to correctly predict the positives out of all the positive prediction it made. Precision score is a useful measure of success of prediction when the classes are very imbalanced. Mathematically, it represents the ratio of true positive to the sum of true positive and false positive.
- 查准率:在模型预测为positive(正)的样本中其中的正样本(真实的正样本)所占的比例。用书上的例子更容易理解:挑出来的瓜中好瓜所占的比例。
- 在类别的数量不均衡的情况下,查准率是评估模型性能的一个很有用的标准。
P
=
T
P
(
T
P
+
F
P
)
P = \frac{TP}{(TP + FP)}
P=(TP+FP)TP?
- Recall: Model recall score represents the model’s ability to correctly predict the positives out of actual positives. This is unlike precision which measures as to how many predictions made by models are actually positive out of all positive predictions made. Recall score is a useful measure of success of prediction when the classes are very imbalanced.
- 查全率: 在所有正样本中被模型预测为正的样本数所占的比例。用书上的例子即:所有好瓜中被挑出来的瓜所占的比例。
- 同查准率一样,查全率在类别的数量不均衡的情况下,也是评估模型性能的一个很有用的标准。
P
=
T
P
(
T
P
+
F
N
)
P = \frac{TP}{(TP + FN)}
P=(TP+FN)TP?
注:上述的例子都是二分类问题,所以只有正例和反例之分,理所当然的就只有唯一的P和R。而在多分类问题中,并没有所谓的正例和反例,precision和recall也不是只有一个,而是每一个类别都对应这一个precision(P)和recall(R)。而至于要得到多分类问题的整体的P和R,可以用后面所讲的macro和micro方法。
- P-R曲线:在很多情况下,我们可以根据学习器预测的结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后面的则是学习器认为“最不可能”的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的precision(P)和recall(R),并以precision(P)作为纵轴,recall(R)作为横轴作图,就得到P—R曲线。
-
如何根据P-R曲线评估模型的性能:
- 很显然如果在P-R曲线图中,一个曲线完全“包住”另一个曲线,则可以断言前者的性能优于后者。如上图,很容易判断A > C, B > C.但是对于A和B而言我们并不好做出这样的断言。
- 如果在P-R曲线中,两个曲线出现了交叉,如A曲线和B曲线,我们要衡量出A和B的性能,有一种办法就是用Break-Even Point(BEP)来衡量,它考察的是Precision和Recall相等时的值,基于这一点可以看出A > B。
- F1-score:上述的BEP过于简化,更常用的是F1-score:
F
1
=
2
×
P
×
R
P
+
R
=
2
×
T
P
样
例
总
数
+
T
P
?
T
N
=
2
×
T
P
2
×
T
P
+
F
P
+
F
N
F1 = \frac{2\times P \times R}{P + R} = \frac{2 \times TP}{样例总数 + TP - TN} = \frac{2 \times TP}{2 \times TP + FP + FN}
F1=P+R2×P×R?=样例总数+TP?TN2×TP?=2×TP+FP+FN2×TP?
F1-score是precision(P)和recall(R)的二数调和平均数:
F
1
=
2
1
P
+
1
R
F1 = \frac{2}{\frac{1}{P} + \frac{1}{R}}
F1=P1?+R1?2?
- Fβ-score: 在一些应用中,对precision-score和recall-score的重视程度有所不同,这时F1-score的一般形式——Fβ能表达出对precision-Score/recall-score的不同偏好,Fβ定义为:
F
β
=
(
1
+
β
2
)
×
P
×
R
(
β
2
×
P
)
+
R
(
β
>
0
)
Fβ = \frac{(1 + β^2)\times P \times R}{(β^2 \times P) + R} (β > 0)
Fβ=(β2×P)+R(1+β2)×P×R?(β>0)
β > 1时recall(R)有更大影响。
β < 1时precision(P)有大影响。
- macro- 和 micro-
上述提到的precision和recall和F1等有关的例子都是单个二分类问题,但是很多时候我们hi多次训练/测试,或者是在多个数据集上训练/测试,这时候,我们会得到多个混淆矩阵,多个P和R和F1。我们这里开始考虑多分类问题,多分类问题的precision和recall和F1该如何计算。如下图的例子为多分类问题的(confusion martix)混淆矩阵:
-
多分类问题的TP,TN,FP,FN,precision,recall,F1-score
- 如上图的例子,为三分类问题,有Apple、Orange、Mango这三种,此时二分类中的正例和反例,但是,我们可以针对每一类分出“正例”和“反例”,针对Apple,Apple为正例,而Orange和Mango为反例,然后分别计算每一类的数据。
- 对于Apple的TP、TN、FP、FN:
- TP = 7
- TN = (2+3+2+1) = 8
- FP = (8+9) = 17
- FN = (1+3) = 4
- 对于Applede的Precision、Recall、F1-score
- Precision = 7/(7+17) = 0.29
- Recall = 7/(7+4) = 0.64
- F1-score = 0.40
- 多分类问题可以按照上面同样的方法计算每一类的相应数据,可以得到下图所示的表格
按照上面所说,多个confusion matrix(混淆矩阵)和多分类问题的confusion matrix会得出多个precision、recall、F1,那我们如何综合考察precision和recall呢?
- macro:一种直接的办法是在个confusion matrix上分别计算出precision和recall,记为(P1, R1),(P2, R2)……(Pn, Rn),然后再计算平均值,这样得到“macro-P(宏查准率)、macro-R(宏查全率)、macro-F1(宏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}
macro?p=n1?i=1∑n?Pi?
m
a
c
r
o
?
R
=
1
n
∑
i
=
1
n
R
i
macro-R = \frac{1}{n}\sum_{i=1}^{n}{R_i}
macro?R=n1?i=1∑n?Ri?
m
a
c
r
o
?
F
1
=
1
n
∑
i
=
1
n
F
1
i
=
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-F1 = \frac{1}{n}\sum_{i=1}^{n}{F1_i} = \frac{2 \times macro-P \times macro-R}{macro-P + macro-R}
macro?F1=n1?i=1∑n?F1i?=macro?P+macro?R2×macro?P×macro?R?
- micro: 还可以将各confusion martix的对应元素进行平均,得到TP、FP、TN、FN的平均值,再基于这些平均值计算出micro-P(微查准率)、micro-R(微查全率)、micro-F1(微F)。
m
i
c
r
o
?
P
=
T
P
 ̄
T
P
 ̄
+
F
P
 ̄
micro-P = \frac{\overline{TP}}{\overline{TP} + \overline{FP}}
micro?P=TP+FPTP?
m
i
c
r
o
?
R
=
T
P
 ̄
T
P
 ̄
+
F
N
 ̄
micro-R = \frac{\overline{TP}}{\overline{TP} + \overline{FN}}
micro?R=TP+FNTP?
m
i
c
r
o
?
F
1
=
2
×
T
P
 ̄
2
×
T
P
 ̄
+
F
P
 ̄
+
F
N
 ̄
=
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-F1 = \frac{2 \times\overline{TP}}{2\times\overline{TP} + \overline{FP}+ \overline{FN}} = \frac{2\times micro-P \times micro-R}{micro-P + micro-R}
micro?F1=2×TP+FP+FN2×TP?=micro?P+micro?R2×micro?P×micro?R?
|