机器学习工作流程
定义问题,收集数据集
定义问题
- 你的输入数据是什么?你要预测什么?
- 你面对的是什么类型的问题?确定问题类型有助于你选择模型架构、损失函数等
- 是二分类问题、多分类问题、标量回归问题、向量回归问题
- 还是多分类、多标签问题
- 比如聚类、生成或强化学习
收集数据集
两个假设:
- 假设输出是可以根据输入进行预测的。
- 假设可用数据包含足够多的信息,足以学习输入和输出之间的关系。
非平衡问题数据集的收集,比如预测服装推荐,就要考略周期性问题:人们购买服装的种类是随着季节变化的。
解决的方法是:正确的做法是不断地利用最新数据重新训练模型,或者在一个问题是平稳的时间尺度上收集数据。
机器学习只能用来记忆训练数据中存在的模式。你只能识别出曾经见过的东西。
选择衡量成功的指标
衡量成功的指标将指引你选择损失函数,主要的手段有:
- 精度
- 准确率(precision)
- 召回率(recall)
- 客户保留率
- ...
一般的推荐是:
- 平衡分类问题:精度和接收者操作特征曲线下面积
- 对于类别不平衡的问题,你可以使用准确率和召回率
- 对于排序问题或多标签分类,你可以使用平均准确率均值 (mean average precision)。
- 可以浏览 Kaggle 网站上的数据科学竞赛,里面有各种指标推荐
确定评估方法
三种常见的评估方法:
- 留出验证集。数据量很大时可以采用这种方法。
- K 折交叉验证。如果留出验证的样本量太少
- 重复的 K 折验证。如果可用的数据很少,同时模型评估又需要非常准确,那么应该使用这种方法。
准备数据
具体步骤如下:
- 将数据格式化为张量。
- 缩放为较小的值,比如在 [-1, 1] 区间或 [0, 1] 区间。
- 不同的特征具有不同的取值范围(异质数据),那么应该做数据标准化。
- 能需要做特征工程,尤其是对于小数据问题。
开发比基准更好的模型
的目标是获得统计功效(statistical power),即开发一个小型模型,它能够打败纯随机的基准(dumb baseline)。
如果遇到无法打败随机基准,需要退回到数据集的两个假设:
- 假设输出是可以根据输入进行预测的。
- 假设可用数据包含足够多的信息,足以学习输入和输出之间的关系。
构建第一个模型的三个关键参数:
- 最后一层的激活。它对网络输出进行有效的限制。
- 损失函数。它应该匹配你要解决的问题的类型。
- 优化配置。你要使用哪种优化器?学习率是多少?大多数情况下,使用 rmsprop 及其默认的学习率是稳妥的。
具体推荐如下:
为模型选择正确的最后一层激活和损失函数扩大模型规模:开发过拟合的模型
需要确定的参数:
- 添加更多的层
- 让每一层变得更大
- 训练更多的轮次
要始终监控训练损失和验证损失,以及你所关心的指标的训练值和验证值
模型正则化与调节超参数
需要不断地调节模型、训练、在验证数据上评估(这里不是测试数据)、再次调节模型,然后重复这一过程,直到模型达到最佳性能。你应该尝试以下几项:
- 添加 dropout
- 尝试不同的架构:增加或减少层数
- 添加 L1 和 / 或 L2 正则化
- 尝试不同的超参数(比如每层的单元个数或优化器的学习率),以找到最佳配置
- (可选)反复做特征工程:添加新特征或删除没有信息量的特征
注意:每次使用验证过程的反馈来调节模型,都会将有关验证过程的信息泄露到模型中
一旦开发出令人满意的模型配置,你就可以在所有可用数据(训练数据 + 验证数据)上训练最终的生产模型,然后在测试集上最后评估一次。
小结
- 定义问题与要训练的数据。收集这些数据,有需要的话用标签来标注数据。
- 选择衡量问题成功的指标。你要在验证数据上监控哪些指标?
- 确定评估方法:留出验证? K 折验证?你应该将哪一部分数据用于验证?
- 开发第一个比基准更好的模型,即一个具有统计功效的模型。
- 开发过拟合的模型。
- 基于模型在验证数据上的性能来进行模型正则化与调节超参数。许多机器学习研究往往只关注这一步,但你一定要牢记整个工作流程
分享关于人工智能,机器学习,深度学习以及计算机视觉的好文章,同时自己对于这个领域学习心得笔记。想要一起深入学习人工智能的小伙伴一起结伴学习吧!扫码上车!
瓦力人工智能 - 扫码上车