网站建设 考核指标,搭建一个网站需要哪些技术,糗百网站开发,查看自己网站访问量在前面【机器学习-01】机器学习基本概念与建模流程的文章中我们已经知道了机器学习的一些基本概念和模型构建的流程#xff0c;本章我们将介绍模型训练出来后如何对模型进行评估和选择等
1、 误差与过拟合
学习器对样本的实际预测结果与真实值之间的差异#xff0c;我们称之…在前面【机器学习-01】机器学习基本概念与建模流程的文章中我们已经知道了机器学习的一些基本概念和模型构建的流程本章我们将介绍模型训练出来后如何对模型进行评估和选择等
1、 误差与过拟合
学习器对样本的实际预测结果与真实值之间的差异我们称之为误差error。这个误差在训练集上表现出来的是训练误差training error也称为经验误差empirical error而在测试集上则是测试误差test error。而当我们希望学习器在新样本上也能有良好表现时需要关注的是其泛化误差generalization error即学习器在所有新样本上的误差。
在学习过程中存在两种可能的问题。一种是学习器对训练集的学习过于深入以至于把训练样本中的某些特殊性质也当作了普遍规律这种情况我们称之为过拟合overfitting。另一种则是学习器的学习能力不足连训练集的基本特征都没有完全掌握这种情况我们称之为欠拟合underfitting。
在过拟合的情况下虽然训练误差很小但测试误差却可能很大因为学习器过于依赖训练样本的特殊性质而无法很好地泛化到新样本。而在欠拟合的情况下由于学习器连训练集的基本特征都没有学好因此无论是训练误差还是测试误差都会比较大。
虽然欠拟合问题相对容易解决例如通过增加迭代次数等方法但过拟合问题却是机器学习领域面临的一大挑战。目前我们还没有找到一种完美的解决方案来完全避免过拟合的发生。因此在机器学习的实践中我们需要时刻警惕过拟合的可能性并采取相应的措施来尽可能减少其影响。
2 、评估方法
在现实应用中我们面临着多种算法的选择如何确定哪个算法最适合我们的任务呢我们的目标是找到泛化误差最小的学习器因为泛化误差可以反映模型在新样本上的性能。但问题是泛化误差是无法直接获得的因为它涉及到模型在未知数据上的表现。
为了解决这个问题我们通常会采用一个与训练集相互独立的“测试集”来评估学习器对新样本的判别能力。我们将测试集上的“测试误差”作为“泛化误差”的一个近似值。这里的关键是测试集应该尽可能不与训练集重叠以保证评估的公正性和准确性。
举个例子来说明这个道理假设老师出了10道练习题供学生们练习但如果考试的时候还是用这同样的10道题那么有些学生可能只会做这10道题却能得高分。这样的成绩显然不能真实反映学生的水平。同样地如果我们用与训练集相同的样本进行测试那么得到的评估结果就会过于乐观无法真实反映模型的泛化能力。因此我们需要一个独立的测试集来评估模型就像考试需要独立于练习题的试题一样。这样才能更准确地评估模型的性能选择出最适合我们任务的学习算法。
3、 训练集与测试集的划分方法
如上所述为了使用“测试集”的“测试误差”来近似“泛化误差”我们需要对初始数据集进行科学的划分从而得到相互独立的“训练集”和“测试集”。下面我们将介绍几种常用的数据集划分方法这些方法都有助于我们更加准确地评估模型的性能。
3.1 留出法hold-out
我们将数据集D分割为两个互不重叠的集合训练集S和测试集T。这两个集合应满足DS∪T且S∩T∅确保它们之间没有交集。常见的划分比例是大约2/3到4/5的样本用于训练而剩下的样本则用于测试。在此过程中我们要特别注意保持训练集和测试集中数据分布的一致性避免由于分布差异而引入不必要的偏差。一种常用的做法是采用分层抽样方法。然而由于划分的随机性单次划分的结果可能不够稳定。因此通常我们会进行多次随机划分并重复实验以获取平均值从而得到更可靠和稳定的结果。
3.2 交叉验证法
我们将数据集D分割为k个大小相等且互不重叠的子集确保它们的并集仍为D且任意两个子集之间无交集。为了保持数据分布的一致性我们采用分层抽样的策略进行子集的划分。交叉验证法的核心思想在于每次从k个子集中选择k-1个作为训练集而剩下的那个子集则作为测试集。这样的划分方式共有k种因此我们可以进行k次独立的训练和测试。最终我们将这k次测试的结果取平均值以得到一个更为稳定和可靠的评估结果。这种方法通常被称为“k折交叉验证”其中k最常见的取值为10。在下图中我们给出了10折交叉验证的直观示意图以便更好地理解这一过程。 与留出法相似K折交叉验证在划分数据集D为K个子集时也存在随机性。因此为了提高评估的稳定性我们通常会进行p次K折交叉验证这被称为p次k折交叉验证。一个常见的做法是进行10次10折交叉验证即总共进行100次独立的训练/测试过程。特别地当我们将数据集D划分为K个子集且每个子集中仅包含一个样本时这种方法被称为“留一法”。尽管留一法的评估结果通常更为准确但由于其计算成本巨大对计算机资源的消耗也相当显著。
3.3 自助法
我们的目标是评估使用完整数据集D训练出的模型性能。然而在留出法和交叉验证法中由于需要保留部分样本作为测试集实际用于训练的样本规模会小于D这可能导致因训练样本大小差异而产生的估计偏差。留一法虽然在一定程度上减少了这种影响但其计算成本过高。为了解决这个问题我们引入了“自助法”。
自助法的核心思路是这样的从包含m个样本的数据集D中我们反复执行以下步骤m次每次随机挑选一个样本将其复制到新的数据集D’中然后将该样本放回原数据集D。这样经过m次操作后我们得到了一个同样包含m个样本的数据集D’。值得注意的是由于样本在每次挑选后都会被放回因此同一个样本可能在D’中出现多次也可能一次都不出现。经过计算我们可以得知在m次采样过程中某个样本始终不被选中的概率随着m的增大而趋近于一个特定的值。 lim m → ∞ ( 1 − 1 m ) m ⟶ 1 e ≈ 0.368 { \lim_{m\to\infty} \left( 1-\frac{1}{m} \right)^m \longrightarrow\frac{1}{e}\approx0.368 } m→∞lim(1−m1)m⟶e1≈0.368
通过自助采样法我们可以从初始样本集D中构建一个新的数据集D’同时保留那些未出现在D’中的样本作为测试集。由于自助采样的随机性大约36.8%的初始样本将不会出现在D’中因此这些未被选中的样本可以构成测试集D-D’。自助法在数据集较小难以有效划分训练集和测试集时尤为实用。然而需要注意的是由于自助法是通过随机抽样来构建数据集的这可能会改变原始数据集的分布从而引入一定的估计偏差。因此在初始数据集足够大且易于划分时留出法和交叉验证法通常更为常用。
4、 调参
学习算法中往往存在需要设定的参数(parameter) 这些参数的取值对于模型性能的影响至关重要我们通常称之为“调参”(parameter tuning)。由于很多参数的取值范围可能非常广泛完全遍历所有可能取值是不现实的。因此一种常见的做法是为每个参数设定一个合理的取值范围和步长这样我们就可以在有限的时间内进行有效的参数调整。
例如假设我们有一个算法包含三个参数每个参数只考虑五个候选值。那么对于每一组训练/测试集我们就需要评估5^3125个不同的模型。由此可见找到一个合适的参数组合对于算法研究人员来说是多么的重要和令人欣喜。
最后当我们的模型和参数调整都完成后为了确保模型能够达到最佳的学习效果我们需要用初始数据集D重新训练模型。这意味着之前用于评估的测试集也将被用于训练以进一步增强模型的性能。这就像我们在高中时期每次考试结束后都会认真复习试卷上的题目即使有些题目是之前没见过的这样也能让我们更好地掌握知识从而更加自信地面对接下来的学习。
5、 性能度量
性能度量performance measure是评估模型泛化能力的关键指标用于比较不同模型的优劣。在对比不同模型时采用不同的性能度量方法可能会导致不同的评判结果。本节将重点介绍分类模型的性能度量除了5.1之外的内容都将围绕这一主题展开。
5.1 最常见的性能度量
在回归任务中也就是预测连续数值的问题中我们通常采用“均方误差”mean squared error作为主要的性能度量标准。许多经典的算法都将MSE作为评价函数想必大家对此都不陌生。 E ( f ; D ) 1 m ∑ i 1 m ( f ( x i ) − y i ) 2 E(f;D)\frac{1}{m}\sum ^ m_{i1}(f(x_i)-y_i)^2 E(f;D)m1i1∑m(f(xi)−yi)2
在分类任务中也就是预测离散值的问题中我们最常用的评价指标是错误率和精度。错误率指的是分类错误的样本数占总样本数的比例而精度则是分类正确的样本数占总样本数的比例。显然错误率和精度之间存在互补关系即错误率与精度之和等于1。 E ( f ; D ) 1 m ∑ i 1 m ∥ ( f ( x i ) ≠ y i ) E(f;D)\frac{1}{m}\sum ^ m_{i1}\parallel(f(x_i) \neq y_i) E(f;D)m1i1∑m∥(f(xi)yi)
5.2 查准率/查全率/F1
虽然错误率和精度是分类任务中常用的性能度量方式但它们并不适用于所有场景。例如在推荐系统中我们更关注推送的内容是否真正符合用户的兴趣即查准率以及我们是否成功推送了所有用户可能感兴趣的内容即查全率。因此对于这类问题使用查准率和查全率作为评价指标更为合适。在二分类问题中我们可以通过构建分类结果的混淆矩阵来明确定义查准率和查全率。
查准率P与查全率R分别定义为 P T P T P F P P \frac{TP}{TPFP} PTPFPTP R T P T P F N R \frac{TP}{TPFN} RTPFNTP
初次接触时FN和FP的概念确实容易混淆。按照常规思维我们可能会将FN误解为“False预测为Negative”即错误地预测为错误的情况但这样的理解实际上颠倒了FN和TN的意义。后来我找到了一张非常详细的图解它清晰地解释了这些概念。 正如天下没有免费的午餐查准率和查全率是一对矛盾的度量。例如如果我们希望推送的内容能够完全吸引用户的兴趣那么可能只会选择那些我们非常确定的内容进行推送这样就会遗漏一些用户可能也感兴趣的内容导致查全率降低。相反如果我们希望确保所有用户感兴趣的内容都能被推送那么可能需要推送更多的内容甚至包括那些不那么确定的内容这样做虽然提高了查全率但也会导致查准率下降因为推送中包含了更多用户不感兴趣的内容。
为了更直观地描述查准率和查全率之间的变化关系我们引入了“P-R曲线”。这条曲线是根据学习器的预测结果对测试样本进行排序后绘制的。我们首先将最有可能是“正例”的样本放在前面最不可能是“正例”的样本放在后面。然后按照这个顺序逐个将样本作为“正例”进行预测并计算每次预测后的查准率P值和查全率R值。通过这种方式我们可以得到一条描述查准率和查全率之间关系的曲线从而更全面地评估学习器的性能。如下图所示 那么如何评估P-R曲线呢如果学习器A的P-R曲线完全被学习器B的曲线所包围那么我们可以断定B的性能要优于A。然而当A和B的曲线出现交叉时判断性能优劣就变得复杂了。通常我们会比较两个曲线下的面积面积较大的学习器性能更优。不过由于计算曲线下的面积往往比较困难因此我们引入了“平衡点”Break-Event Point简称BEP的概念。平衡点即查准率与查全率相等时的取值平衡点越高说明学习器的性能越好。
在实际应用中查准率P和查全率R有时会出现相互矛盾的情况这就需要我们综合考虑这两个指标。为此最常用的方法是计算F-Measure也称为F-Score。F-Measure实际上是P和R的加权调和平均值通过这一指标我们可以更全面地评估学习器的性能。F-Measure是P和R的加权调和平均即 1 F β 1 β 2 . ( 1 P β 2 R ) \frac{1}{F_\beta}\frac{1}{\beta^2}.(\frac{1}{P}\frac{\beta^2}{R}) Fβ1β21.(P1Rβ2)
特别地当β1时也就是常见的F1度量是P和R的调和平均当F1较高时模型的性能越好。 1 F β 1 β 2 . ( 1 P β 2 R ) \frac{1}{F_\beta}\frac{1}{\beta^2}.(\frac{1}{P}\frac{\beta^2}{R}) Fβ1β21.(P1Rβ2) F 1 2 ∗ P ∗ R P R 2 ∗ T P 样本总数 T P − T N F1\frac{2*P*R}{PR}\frac{2*TP}{样本总数TP-TN} F1PR2∗P∗R样本总数TP−TN2∗TP
当我们面对多个二分类混淆矩阵时例如在多次训练或不同数据集上训练得到的结果我们需要一种方法来估算全局性能。常用的方法有宏观和微观两种。宏观方法首先计算每个混淆矩阵的P值和R值然后求得平均P值macro-P和平均R值macro-R最后基于这些平均值计算Fβ或F1。而微观方法则是先计算出所有混淆矩阵的TP、FP、TN、FN的平均值然后再基于这些平均值计算P、R并最终求得Fβ或F1。两种方法从不同的角度综合了多个混淆矩阵的信息以得到全局的性能评估。 m a c r o − P 1 n ∑ i 1 m P i macro-P\frac{1}{n}\sum ^ m_{i1}P_i macro−Pn1i1∑mPi m a c r o − R 1 n ∑ i 1 m R i macro-R\frac{1}{n}\sum ^ m_{i1}R_i macro−Rn1i1∑mRi 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-F1\frac{2*macro-P*macro-R}{macro-P macro-R} macro−F1macro−Pmacro−R2∗macro−P∗macro−R
5.3 ROC与AUC
如前所述学习器对测试样本的预测结果通常以实值或概率形式给出。当我们设定一个阈值时预测值大于这个阈值的样本被判断为正例小于阈值的则判断为负例。因此这个实值的准确性直接决定了学习器的泛化能力。若我们将这些实值进行排序排序的质量则反映了学习器的性能水平。ROC曲线正是基于这一思路来评估学习器的泛化性能。与P-R曲线类似ROC曲线也是按照预测值的排序顺序逐一将样本视为正例进行预测。但不同之处在于ROC曲线以“真正例率”TPR作为横轴以“假正例率”FPR作为纵轴。ROC曲线更侧重于研究基于测试样本预测值的排序效果从而评估学习器的性能。 AUC是ROC曲线下的面积 简单分析图像可以得知当FN0时TN也必须0反之也成立我们可以画一个队列试着使用不同的截断点即阈值去分割队列来分析曲线的形状0,0表示将所有的样本预测为负例1,1则表示将所有的样本预测为正例0,1表示正例全部出现在负例之前的理想情况1,0则表示负例全部出现在正例之前的最差情况。限于篇幅这里不再论述。
现实中的任务通常都是有限个测试样本因此只能绘制出近似ROC曲线。绘制方法首先根据测试样本的评估值对测试样本排序接着按照以下规则进行绘制。
同样地进行模型的性能比较时若一个学习器A的ROC曲线被另一个学习器B的ROC曲线完全包住则称B的性能优于A。若A和B的曲线发生了交叉则谁的曲线下的面积大谁的性能更优。ROC曲线下的面积定义为AUCArea Uder ROC Curve不同于P-R的是这里的AUC是可估算的即AOC曲线下每一个小矩形的面积之和。易知AUC越大证明排序的质量越好AUC为1时证明所有正例排在了负例的前面AUC为0时所有的负例排在了正例的前面。
6、比较检验
在比较学习器泛化性能的过程中统计假设检验hypothesis test为学习器性能比较提供了重要依据即若A在某测试集上的性能优于B那A学习器比B好的把握有多大。 为方便论述本篇中都是以“错误率”作为性能度量的标准。
6.1 假设检验
“假设”指的是对样本总体的分布或已知分布中某个参数值的一种猜想例如假设总体服从泊松分布或假设正态总体的期望uu0。回到本篇中我们可以通过测试获得测试错误率但直观上测试错误率和泛化错误率相差不会太远因此可以通过测试错误率来推测泛化错误率的分布这就是一种假设检验。
7、 偏差与方差
偏差-方差分解是解释学习器泛化性能的重要工具。在学习算法中偏差指的是预测的期望值与真实值的偏差方差则是每一次预测值与预测值得期望之间的差均方。实际上偏差体现了学习器预测的准确度而方差体现了学习器预测的稳定性。通过对泛化误差的进行分解可以得到
期望泛化误差方差偏差 偏差刻画学习器的拟合能力 方差体现学习器的稳定性 易知方差和偏差具有矛盾性这就是常说的偏差-方差窘境bias-variance dilamma随着训练程度的提升期望预测值与真实值之间的差异越来越小即偏差越来越小但是另一方面随着训练程度加大学习算法对数据集的波动越来越敏感方差值越来越大。换句话说在欠拟合时偏差主导泛化误差而训练到一定程度后偏差越来越小方差主导了泛化误差。因此训练也不要贪杯适度辄止。