机器学习之模型评估与选择
开篇简介:本文是博主结合前辈经验和自身的认识写的博文,有不少博主自身理解还不太透彻,因为考虑到文章的完整性,有些部分需要引用的前辈的一些方法,望谅解。由于文章专业化内容过多,会影响阅读体验,在这里建议大家难以理解的部分先不要去深究,等待需要用到的时候再去深入研究一下。本博文大家可以先保存以后用到时候当做资料参考,希望能帮助到大家一点点。
1.误差与拟合
错误率 = a个样本分类错误/m个样本
精度 = 1 - 错误率
误差:模型的预测输出与真实值之间的差异
训练误差:通过已知的样本数据进行学习,从而得到模型的过程,这个过程中产生的误差
泛化误差:具体、特殊到一般的过程称为泛化。对机器学习模型来说,泛化是指模型作用于新的样本数据(非训练集),这个过程产生的误差
欠拟合和过拟合
过拟合:某个模型在训练集上表现很好,在新样本上表现差,导致一些非普通规律被模型接纳和体现,反之称为欠拟合,即模型对训练集的一般性质学习较差
模型选择:可以通过分析、评估模型的泛化误差,选择泛化误差最小的模型
2.模型的评估方法
(评估思路:因为待测数据集全集几乎拿不到,我们使用测试集进行泛化测试,用测试误差即为泛化误差的近似)
注意点:测试集和训练集尽可能互斥,测试集和训练集独立同分布
2.1留出法
留出法:将已知数据集分成两个互斥的部分,其中一个用来训练模型,另一个部分用来测试模型,评估其误差,作为泛化误差的估计。
注意点:两个数据集的划分要尽可能的保持数据分布一致性,避免因数据划分过程引发的偏差。
下面看个例子:
在只有一个包含m个样例的数据集D,从中产生训练集S和测试集T。
D分为两个互斥的集合,一个作为S,一个作为T。
分层采样:S和T中正例和反例比例一样。
例如D包含500个正例,500反例。分层采样获得含70%样本的S,有350正例,350反例;30%样本的T,有150正例,150反例。
一般采用随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
例如,进行100次随机划分,每次产生一个训练/测试集用于实验评估,100次后得到100个结果,而留出法返回的则是这100个结果的平均。
弊端:T比较小,评估结果不够稳定准确,偏差大。
常见将大约2/3~4/5的样本用于训练,剩余样本用于测试。
2.2交叉验证法(留一法)
将D划分为k个大小相似的互斥子集。(D通过分层采样得到每个子集Di,保持数据分布一致性)。每次用k-1个子集的并集作为训练集,余下那个作测试集。即可获得K组训练/测试集,进行K次训练和测试,最终返回k个测试结果的均值。也称”k折交叉验证”。
为减小因样本划分不同而引入的差别,k折交叉验证要随机使用不同的划分重复p次,最终评估结果是这p次k折交叉验证结果的均值,即进行p*k次训练/测试。
留一法:K可以根据实际情况设置,充分利用了所有样本,多次划分,评估结果相对稳定。m个样本划分成m个子集,每个子集包含一个样本。留一法中被实际评估的模型与期望评估的用D训练出来的模型很相似,因此,留一法的评估结果往往被认为比较准确。
留一法缺陷:数据集较大,计算比较繁琐,需要进行K次训练和评估。例如,数据集包含100w个样本,则需训练100w个模型。且留一法的估计结果未必比其他评估法准确。
2.3自助法(有放回的抽样测试)
试样本量较小的时候可以通过自助法产生多个自助样本集,且有约36.8%的测试样本。
例如:从m个样本的数据集D,随机采样(选)一个样本,拷贝入训练D’,放回,继续随机挑选,直至m次。
样本在m次采样中始终不被踩到的概率(1-1/m)^m。
实际评估的模型与期望评估的模型都使用m个训练样本,而仍有约1/3的没有在训练集的样本用于测试。
自助法在数据集较小、难以有效划分训练/测试集时很有用。在初始数据量足够时,留出法和交叉验证法更常用。
2.4调参与最终模型
①选择适合的学习算法
②对算法参数进行设定,调参
3.性能度量
性能度量:评价模型泛化能力的标准,对不同的模型有不同的评价标准。回归模型的性能度量通常选用均方误差。
给定样例集D={(x1,y1),(x2,y2),……,(xm,ym)},yi是对xi的真实标记,要评估学习器f的性能,就要把学习器预测结果f(x)与真实标记y进行比较。
均方误差:
数据分布D和概率密度函数p(.),均方误差:
3.1分类算法常用的性能度量
错误率:分类错误的样本数占样本总数的比例。
精度:分类正确的样本数占样本总数的比例。
数据分布D和概率密度函数p(.)。
错误率: