机器学习项目的实验方法

发现对于一些机器学习项目,在项目进行中往往会直接就开始编码实现,而没有一套完整的方法论和有实操性的流程,经过一些粗浅的研究,下面写出一些对于此的部分思考,或有参考借鉴之用。

实验开始前,需要清楚研究什么,如何收集数据,打算怎样分析

1. 研究目标

需要通过从清楚陈述问题、定义研究目标开始。

给定多个学习算法和一个有数据集定义的具体问题,我们可能希望确定哪个算法具有较低的泛化误差;可能希望对于给定的数据集,将性能排序;可能希望在两个或多个数据集上而不是单一数据集上比较两个或多个算法

2. 相应变量的选择

需要确定应该使用什么质量度量,最常使用的是误差,即分类的误分类错误和回归的均方误差。或这也可以使用某些变型,如风险度量、0/1损失推广为任意损失。在信息检索中,使用诸如精度和召回度量。在代价敏感学习汇总,不仅要考虑输出,还要考虑系统参数 如复杂度。

3. 因素和水平的选择

因素取决于研究目标,如果固定算法并且想要找出最佳超参数,则超参数就是因素;如果比较算法,学习算法便是超参数;若使用不同数据集,则数据集也成为因素。因素的水平应该小心选择,以便不失去好的配置,也避免不必要的实验。尽管以前的经验一般是加分的,但同样重要的是考察所有的因素和可能的重要因素水平,而不过于受以往经验的影响

4. 实验设计的选择

除非确信因素间互不影响,否则最好做因素设计。一般给定一个数据集,留一部分做为检验集,而其余的用来训练和验证,在大多数时候可以通过再抽样来做。实践中,小数据集导致高方差,差别可能不是显著的,而结果可能不令人信服

此外,尽可能避免使用无使用价值的人工数据集,而要使用从现实中收集的实际数据集。

5. 做实验

在运行具有许多因素和水平的大型因素实验前,最好对某些随机设置试运行几次,检查是否如预期。同时,大型实验中,最好保留中间结果,一边需要时可以重新运行整个实验的一部分。所有结果都应当可再现没在运行具有许多因素和因素水平的大型实验时,应该清楚软件老化的负面影响。

做实验时,测试者应该无偏向,且避免偏好自己写的程序库,而应该使用尽可能可靠的来源的程序,这种程序已经经受了更好的测试和优化

与任何软件开发研究一样,好文档的作用不可低估,特别是在分组开发时。高质量的软件工程开发的所有方法也应该用于机器学习

6. 数据统计和分析,做数据review

对应用于这样的方式分析数据,无论得到什么结论,这些结论都不是主观的或随机的。在假设检验的框架下提出我们想要回答的问题,并检查样本是否支持该假设。如“我们能够说被A训练的学习器平均误差显著低于被B训练的学习器吗”

与通常一样,可视化分析是有帮助的,并且我们可以使用误差分布的直方图、盒图、变程图等

7. 得出结论,进行下一步工作计划

一旦收集和分析了所有数据,就可以提取客观的结论。最长遇到的结论是需要进一步实验。大部分统计学研究、机器学习和数据挖掘研究都是迭代的。正因为如此,我们从来都不是一开始就做所有的实验。有人建议,第一次实验考察的数据不超过可利用资源的25%。第一次实验知识调查。这就是为什么最开始不要抱太大期望,向劳保或导师承诺的原因。

应该始终牢记,统计检验不会告诉我们假设是否正确,而是指出样本看上去和假设一致的程度有多大。总是存在得不到结论性结构或者得到错误结论的风险,特别是数据集很小且存在噪声时

当我们预期不满足时,最好考察为什么不满足。检查效果不足的原因,可能带来改进的思路。所有改进都是基于以前版本的缺陷,找到缺陷是有益的暗示,存在我们可以做的改进

但是在我们确信我们已经完全分析了当前数据并从中学习到我们能够学习的一切之前,不要急于做改进版本的检验。未经过检验的想法是廉价无用的,而检验是昂贵的。

猜你喜欢

转载自blog.csdn.net/lyx_yuxiong/article/details/81237821