机器学习的通用工作流程总结为如下几个步骤:
1. 定义问题,收集数据集
首先我们必须先定义多面对的问题。
- 输入的数据是什么?你要预测什么?
- 你面对的是什么类型的问题?二分类问题、多分类问题、标量回归问题
向量回归问题还是其他问题,确定问题类型,有助于选择模型架构,损失函数。
同时做出如下假设
:
- 假设输出可以根据输入进行预测
- 假设可用数据包含足够多的信息,足以学习输入和输出之间的关系
2. 选择衡量成功的指标
要控制一件事物,就需要能够观察它。要取得成功,就必须给出成功的定义:精度?准确率和召回率,客户保留率?衡量成功的指标将指引你选择损失函数,即模型要优化什么。 对于平衡分类问题,精度和接受者操作特征曲线下面积是常用指标。对于类别不平衡问题,可以使用准确率和召回率。对于排序和多标签分类问题,可以使用平均准确率和召回率。也可以自定义衡量成功的标准。
3. 确定评估方法
一旦明确了目标,必须确定如何衡量当前的进展,以下三种常见的评估方法:
- 留出验证集,数据量很大时可以使用这种方法。
- K折交叉验证, 如果留出验证的样本太少,无法保证可靠性,可以选择这种方法。
- 重复的K折验证,如果可用的数据很少,同时模型评估有需要非常准确,那么应该使用这种方法。
只需选择以上三种之一即可。
4. 准备数据
一旦知道了要训练什么,要优化什么以及评估方法,那么就已经准备好训练模型了。但首先应该将数据格式化,使其可以输入到机器学习模型中。
- 将数据格式化为张量
- 这些张量的取值通常应该缩放为较小的值,比如在【-1, 1】区间或者【0, 1】
- 如果不同的特征具有不同的取值范围,那么应该做数据标准化。
- 可能需要做特征工程, 尤其对于小数据集
准备好数据数据和目标数据的张量后,就可以开始训练模型了。
5. 开发比基准更好的模型
这一阶段的目标是获得统计功效,即开发一个小型模型,可以打败纯随机的基准。注意,不一定总能获得统计功效,如果尝试多种合理的架构之后仍然无法打败随机基准,那么可能问题的答案并不在输入数据中, 也就是前面的两个假设成立。 这些假设可能是错误的,这样的话需要重新开始,
如果一切都顺利,需要选择三个关键参数来构建第一个工作模型。
- 最后一层的激活函数
- 损失函数,损失函数应该匹配要解决的问题类型。
- 优化配置,你要使用那种优化器?学习率是多少? 大多数情况下,rmsprop及其默认的学习率是稳妥 的。
6. 扩大模型规模,开发过拟合的模型
一旦得到了具有统计功效的模型,问题就变成了模型是否足够强大?他是否具有足够多的层和参数来对问题进行建模?
通过:
- 添加更多的层
- 让每一层变得更大
- 训练更多的轮次
来得到过拟合的模型。
要始终监控训练损失和验证损失,以及你所关心的指标的训练值和验证值。如果你发现模型在验证数据上的性能开始下降,那么就出现了过拟合。
7. 模型正则化与调节超参数
这一步是最费时间的,你将不断的调节模型,在验证数据上评估,再次调节模型,然后重复这一过程。直到模型达到最佳性能。应该尝试以下:
- 添加dropout
- 尝试不同架构,增加或减少层数
- 添加L1或L2正则化
- 尝试不同的超参数(比如美称的单元数或优化器的学习率),以找到最佳配置
- (可选)反复做特征工程,添加新特性或删除美后信息的特征