机器学习的通用工作流程
2019-03-29 本文已影响0人
庵下桃花仙
1 定义问题,收集数据集
- 搞清楚输入的数据是什么?要预测什么?(通常数据可用性是限制因素)
- 搞清楚面对的是什么类型的问题,便于选择模型架构、损失函数等
- 假设输出是可以根据输入进行预测的
- 输入数据中包含足够多的信息,足以学习输入和输出之间的关系
对于非平稳问题(服装推荐引擎):
1、不断利用最新数据训练模型;
2、在一个问题是平稳的时间尺度上收集数据。
机器学习有个假设:未来的规律与过去相同,事实往往并非如此。
2 选择衡量成功的指标
精度?准确率?召回率?客户保留率?衡量成功的指标指引我们选择损失函数。
问题 | 衡量成功的指标 |
---|---|
平衡分类问题(每个类别可能性相同) | 精度或接受者操作特征曲线下面积(area under the receiver operating characteristic curve, ROC AUC) |
平衡问题 | 准确率和召回率 |
排序问题或多标签分类 | 平均准确率均值(mean average precision) |
3 确定评估方法
- 留出验证集(数据量很大)
- K折交叉验证(留出验证的样本太少)
- 重复的K折验证(可用数据很少)
通常,第一种方法足以。
4 准备数据
- 将数据格式化为张量
- 这些张量的取值通常应该缩放为更小的值,比如[-1,1]区间或[0,1]区间
- 如果不同的特征具有不同的取值范围(异质数据),那么应该做数据标准化
- 可能需要做特征工程,尤其是小数据问题
5 开发比基准更好的模型
这个阶段的目的是获得统计功效(statistical power),开发一个小模型,打败随机基准(dumb baseline)。如MNIST中,任何精度大于0.1可以说具有统计功效。
还需要选择3个关键参数
- 最后一层激活。如IMDB分类最后一层用 sigmoid 激活,回归在最后一层无激活
- 损失函数。应该匹配解决问题的类型
- 优化配置。通常使用 rmsprop 即可
问题类型 | 最后一层激活 | 损失函数 |
---|---|---|
二分类问题 | sigmoid | binary_crossentropy |
多分类、单标签问题 | softmax | categorical_crossentropy |
多分类、多标签问题 | sigmoid | binary_crossentropy |
回归到任意值 | 无 | mse |
回归到0到1范围内的值 | sigmoid | mse或binary_crossentropy |
6 增大模型规模:开发过拟合的模型
1、添加更多的层
2、让每一层变的更大
3、训练更多的轮次
7 模型正则化与调节超参数
- 添加 dropout
- 尝试不同的架构:增加或减少层数
- 添加 L1 和 / 或 L2 正则化
- 尝试不同的超参数(每层单元个数或优化器的学习率),找到最佳配置
- (可选)反复做特征工程:添加新特征或删除没有信息量的特征
一旦开发出满意的模型配置,在所有可用数据(训练数据+验证数据)上训练模型,在测试集上最后评估一次。如果性能差,则意味验证流程不可靠,或者调参时验证数据上过拟合,选择更可靠的评估方法,如重复K折验证。