15.机器学习基础:机器学习的通用工作流程

机器学习的通用工作流程

定义问题,收集数据集

首先,你必须定义所面对的问题。

  • 你的输入数据是什么?你要预测什么?只有拥有可用的训练数据,你才能学习预测某件事情。比如,只有同时拥有电影评论和感情标注,你才能学习对电影评论和情感标注,你才能学习对电影评论进行情感分类。
  • 你面对的是什么类型的问题?是二分类问题、多分类问题、标量回归问题、向量回归问题,还是多分类、多标签问题?或是其他问题,比如聚类、生成或强化学习?确定问题类型有助于你选择模型架构、损失函数。

只有确定确定了输入、输出以及所使用的数据,你才能进入下一阶段。注意你在这一阶段所做的假设。

  • 假设输出是可以根据输入进行预测的。
  • 假设可用数据包含足够多的信息,足以学习输入和输出之间的关系。

在开发出工作模型之前,这些只是假设,等待验证真假。并非所有问题都可以解决。你收集了包含输入X和目标Y的很多样例,并不意味着X包含足够多的信息来预测Y。例如,如果你想根据某只股票最近的历史价格来预测其股票价格走势,那么你成功的可能性不大,因为历史价格并没有包含很多可用于预测的信息。

机器学习只能用来基于训练数据中存在的模式。你只能识别出曾经见到的东西。在过去的数据上训练机器学习来预测未来,这里存在一个假设,就是未来的规律与过去相同。但事实往往并非如此。

选择衡量成功的指标

要控制一件事物,就需要能够观察它。要取得成功,就必须给出成功的定义:例如精度、准确率和召回率、客户保留率。衡量成功的指标将指引你选择损失函数,即模型要优化什么。它应该直接与你的目标(如业务成功)保持一致。

对于平衡分类问题(每个类别的可能性相同),精度接收者操作特征曲线下面积是常用的指标。对于类别不平衡的问题,你可以使用准确率和召回率。对于排序问题或多标签分类,你可以使用平均准确率均值。自定义衡量成功的指标也很常见。

确定评估方法

一旦明确了目标,你必须确定如何衡量当前的进展。前面介绍了三种常见的评估方法:

  • **留出验证集。**数据流很大时可以采用这种方法。
  • **K折交叉验证。**如果留出验证的样本量太少,无法保证可靠性,那么应该选择这种方法。
  • **重复的K折验证。**如果可用的数据很少,同时模型评估又需要非常准确,那么应该使用这种方法。

准备数据

一旦知道了要训练什么、要优化什么以及评估方法,那么你就几乎已经准备好训练模型了。但首先你应该将数据格式化,使其可以输入到机器学习模型中(这里假设模型为深度神经网络)。

  • 将数据格式化为张量。
  • 这些张量的取值通常应该缩放为较小的值,比如在 [-1,1] 区间或 [0,1] 区间。
  • 如果不同的特征具有不同的取值范围(异质数据),那么应该做数据标准化。
  • 你可能需要做特征工程,尤其是对于小数据问题。

开发比基准更好的模型

这一阶段的目标是获得统计功效即开发一个小型模型,它能够打败纯随机的基准。在MNIST数字分类的例子中,任何精度大于0.1的模型都可以说具有统计功效;在IMDB(电影评论情感分析)例子中,任何精度大于0.5的模型都可以说具有统计功效。

注意,不一定总是能获得统计功效。如果你尝试了多种合理架构之后仍然无法打败随机基准,那么原因可能是问题的答案并不在输入数据中。

如果一切顺利,你需要选择三个关键参数来构建第一个工作模型:

  • **最后一层的激活。**它对网络输出进行有效的限制。例如,IMDB分类的例子在最后一层使用了 sigmoid,回归的例子在最后伊恩没有使用激活。
  • **损失函数。**它应该匹配你需要解决的问题的类型。例如,IMDB分类的lizi使用 binary_crossentropy、回归的例子使用mse。
  • **优化配置。**你要使用哪种优化器?学习率是多少?大多数情况下,使用 rmsprop 及其默认的学习率是最稳妥的。

**关于损失函数的选择,直接优化衡量问题成功的不一定总是可行的。**有时难以将指标转换为损失函数,要知道,损失函数需要在只有小批量数据时即可计算(在理想状况下,只有一个数据点时,损失函数应该有时可计算的),而且还必须是可微的(否则无法用反向传播来训练网络)。

问题类型最后一层激活损失函数
二分类问题sigmoidbinary_crossentropy
多分类、单标签问题softmaxcategorical_crossentropy
多分类、多标签问题sigmoidbinary_crossentropy
回归到任意值mse
回归到0~1范围内的值sigmoidmse 或 binary_crossentropy

扩大规模模型:开发过拟合模型

一旦得到了具有统计功效的模型,问题就变成了:模型是否足够强大?它是否具有足够多的层和参数来对问题进行建模?需要记住机器学习中无处不在的对立是优化和泛化的对立,理想的模型是刚好在欠拟合和过拟合的边界上,在容量不足和容量过大的界限上。为了找到这条界线,你必须穿过他。

要搞清楚需要多大的模型,就必须开发一个过拟合模型

  1. 添加更多的层。
  2. 让每一层变得更大。
  3. 训练更多的轮次。

要始终监控训练损失和验证损失,以及你所关心的指标的训练值和验证值。如果你发现模型在验证数据上的性能开始下降,那么就出现了过拟合。

正则化与调节超参数

这一步是最费时间的:你将不断地调节模型、训练、在验证数据上评估(注意不是测试数据上)、然后再次调节模型,然后重复这一过程,直到达到最佳性能,你应该尝试以下几项:

  • 添加dropout。
  • 尝试不同的架构:增加或减少层数。
  • 添加L1、L2、L1和L2正则化。
  • 尝试不同的超参数(比如每层的单元个数或优化器的学习率),以找到最佳配置。
  • (可选)反复做特征工程:添加新特征或删除没有信息量的特征。

请注意:每次使用验证过程的反馈来调节模型,都会将有关验证过程的信息泄露到模型当中。如果只是重复几次,那么无关紧要;但如果系统性的迭代多次,最终会导致模型对验证过程过拟合(即使模型并没有直接在验证数据上训练)。

一旦开发出令人满意的配置模型,你就可以在所有可用数据(训练数据+验证数据)上训练最终的生产模型,然后再测试集上最后评估一次。如果测试集上的性能比验证集上差很多,那么这可能意味着你的验证流程不可靠,或者你在调节模型参数时在验证数据上出现了过拟合。在这种情况下,你可能需要换用更加可靠的评估方法,比如重复的K折验证。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值