机器(深度)学习的通用工作流程
Posted andy2020
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器(深度)学习的通用工作流程相关的知识,希望对你有一定的参考价值。
一、定义问题,收集数据集
首先要清楚面对问题的输入数据是什么?要预测什么? 收集这些数据,有需要的话用标签来标注数据。
其次要清楚面对的是什么类型的问题?是二分类问题、多分类问题、标量回归问题、向量回归问题,还是多分类、多标签问题?或者是其他问题,比如聚类、生成或强化学习?确定问题类型有助于你选择模型架构、损失函数等。
二、选择衡量成功的指标
要控制一件事物,就需要能够观察它。要取得成功,就必须给出成功的定义:精度?准确率( precision)和召回率( recall)?客户保留率?衡量成功的指标将指引如何选择损失函数,即模型要优化什么。它应该直接与目标(如业务成功)保持一致。
- 对于平衡分类问题(每个类别的可能性相同),精度和接收者操作特征曲线下面积( area under the receiver operating characteristic curve, ROC AUC)是常用的指标。
- 对于类别不平衡的问题,可以使用准确率和召回率。
- 对于排序问题或多标签分类,可以使用平均准确率均值( mean average precision)。
自定义衡量成功的指标也很常见。要想了解各种机器学习的成功衡量指标以及这些指标与不同问题域的关系,可以浏览 Kaggle 网站上的数据科学竞赛,上面展示了各种各样的问题和评估指标。
三、确定评估方法
一旦明确了目标,接下来要确定如何衡量当前的进展。三种常见的评估方法:
- 留出验证集。数据量很大时可以采用这种方法。
- K 折交叉验证。如果留出验证的样本量太少,无法保证可靠性,那么应该选择这种方法。
- 重复的 K 折验证。如果可用的数据很少,同时模型评估又需要非常准确,那么应该使用这种方法。
只需选择三者之一。大多数情况下,第一种方法足以满足要求 。
四、准备数据
知道了要训练什么、要优化什么以及评估方法,那么几乎已经准备好训练模型了。但首先应该将数据格式化,使其可以输入到机器学习模型中(这里假设模型为深度神经网络)。
- 将数据格式化为张量。
- 张量的取值通常应该缩放为较小的值,比如在 [-1, 1] 区间或 [0, 1] 区间。
- 如果不同的特征具有不同的取值范围(异质数据),那么应该做数据标准化。
- 可能需要做特征工程,尤其是对于小数据问题。
五、开发比基准更好的模型
这一阶段的目标是获得统计功效( statistical power),即开发一个小型模型,它能够打败纯随机的基准( dumb baseline)。
六、扩大模型规模-开发过拟合的模型
得到了具有统计功效的模型,接下来的问题就变成了:模型是否足够强大?它是否具有足够多的层和参数来对问题进行建模?机器学习中无处不在的对立是优化和泛化的对立,理想的模型是刚好在欠拟合和过拟合的界线上,在容量不足和容量过大的界线上。为了找到这条界线,就必须穿过它。要搞清楚你需要多大的模型,就必须开发一个过拟合的模型,处理方式如下。
- 添加更多的层。
- 让每一层变得更大。
- 训练更多的轮次。
要始终监控训练损失和验证损失,以及所关心的指标的训练值和验证值。如果发现模型在验证数据上的性能开始下降,那么就出现了过拟合。
七、模型正则化与调节超参数
这一步是最费时间的:你将不断地调节模型、训练、在验证数据上评估(这里不是测试数据)、再次调节模型,然后重复这一过程,直到模型达到最佳性能。你应该尝试以下几项。
- 添加 dropout。
- 尝试不同的架构:增加或减少层数。
- 添加 L1 和 / 或 L2 正则化。
- 尝试不同的超参数(比如每层的单元个数或优化器的学习率),以找到最佳配置。
- 反复做特征工程:添加新特征或删除没有信息量的特征。(可选)
请注意:每次使用验证过程的反馈来调节模型,都会将有关验证过程的信息泄露到模型中。如果只重复几次,那么无关紧要;但如果系统性地迭代许多次,最终会导致模型对验证过程过拟合(即使模型并没有直接在验证数据上训练)。这会降低验证过程的可靠性。
以上是关于机器(深度)学习的通用工作流程的主要内容,如果未能解决你的问题,请参考以下文章