开发者学堂课程【机器学习算法 :模型的评估方法-1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/535/detail/7175
模型的评估方法-1
内容介绍
一、评估思路
二、留出法
三、交叉验证法
一、评估思路
事实上泛化误差越小对我们来说是最理想的。泛化误差是指在整个数据全集上计算误差。如果误差值最小,模型就是我们想要的但事实上数据全集大部分情况下我们是拿不到的。
例如:要对客户划分等级,实际上我们可以根据历史数据,历史数据是已知的,可以根据历史数据产生模型。但是我们这个模型希望作用于未来新增加的客户上,去做预测。但事实上这些客户在没增加进来之前,根本不知道这些客户的信息。只有所有的客户加起来,才叫数据全集包括已经在系统中的客户,并且包括在未来某个时间段内加进来的客户。这些客户对我们来讲是未知的。所以想拿到数据全集在绝大多数的情况下是不可能的。这时我们会想办法获得近似的误差,测试误差。对模型进行评估。
引入另一个概念测试集,还是刚刚的例子,对客户进行评估,当前所以的客户我们都能拿到。会拿一部分做训练,剩下的做测试;做训练的叫做训练集,做测试的数据叫做测试集。
用训练集训练模型,去评估训练的误差,模型生成之后,再用另外一部分测试这个模型,得到测试误差。用测试误差作为泛化误差的估计值。用它来评估模型的好坏。
通过实验测试,对模型的泛化误差进行评估,选出泛化误差最小的模型。待测数据集全集末
知,使用测试集进行泛化测试,测试误差( Testing Error)即为泛化误差的近似。
有两点需要大家注意:
1、测试集和训练集尽可能互斥(通过做例题就是训练集去获得知识,想要测试现在学习情况如何,最好的办法是用一些新的题目来测试,用所谓的测试集来测试,如果测试的题目全部来自例题那么测试是无效的,因此题目尽可能的不一样。)
2、测试集和训练集独立同分布(独立:事件之间没有依赖关系;同分布:测试集和训练集分布是一致的。例如:预测身高,如果父亲和孩子的训练集都是来自于中国,但是测试集的数据来自冰岛,这就有问题,因为中国人的身高和北欧人的身高是有明显区别的。测试集和训练集需要有相似的特征,才能用于测试,否则结果就会比较差,测试就没有什么意义)
二、留出法
留出法(Hold-out):将已知数据集分成两个互斥的部分 ,其中一部分用来训练模型,另
部分用来测试横型,评估其误差作为泛化误差的估计。
要求:
1、两个数据集的划分要尽可能保持数据分布一致性,避免因数据划分过程引入为的偏差
(假设这是一个人群的数据,上半部分是男性下半部分是女性,因为性别的差异,行为也会有所差异;这时我们把数据集分为训练集和测试集的时候,最好考虑性别占比。)
保持样本的类别比例相似,即采用分层采样
2、数据分割存在多种形式会导致不同的训练集、测试集划分,单次留出结果往往存在偶然性,稳定性较差,通常会进行若干次随机划分、重复实验评估取平均值作为评估结果。
(不同次数的操作可能会导致影响比较差)
3、数据集拆分成两部分,每部分的规模设置会影响评估结果,测试、训练的比例通常为7:3、8:2等。(通常会用比例大的训练,比例小的测试)
三、交叉验证法
交叉验证法 ( Cross Validation):将数据集划分 k 个大小相似的互斥的数据子集,子集数
据尽可能保证数据分布的一致性(分层采样),每次从中选取一个数据集作为测试集,其余
用作训练集,可以进行 k 次训练和测试,得到评估均值。该验证方法也称作k折交叉验证
(k-fold Cross Validation)。使用不同的划分,重复 p 次,称为 p 次 k 折交叉验证。
已知的数据集是 D。分为10份(最好保证数据分配的一致性)。第一次将1-9作为训练集,第10部分作为测试集来测试模型。第二个将第9作为测试集,其他的作为训练集。这样进行下去就会有10次评估。我们就可以得到10次评估的均值,用均值来评估模型。