zoukankan      html  css  js  c++  java
  • 【486】机器学习的通用工作流程

     参考:Python深度学习 P89


    目录

    1. 定义问题,收集数据集
    2. 选择衡量成功的指标
    3. 确定评估方法
    4. 准备数据
    5. 开发比基准更好的模型
    6. 扩大模型规模:开发过拟合的模型
    7. 模型正则化与调节超参数

    一、定义问题,收集数据集

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

    • 你的输入数据是什么?你要预测什么?
    • 你面对的是什么类型的问题?是二分类问题、多分类问题、标量回归问题、向量回归问题,还是多分类、多标签问题?

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

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

      并不是所有的问题都可以解决,例如股票价格走势预测。非平稳问题(nonstationary problem)是无法解决的问题

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

    二、选择衡量成功的指标

      要控制一件事物,就需要能够观察它。要取得成功,就必须给出成功的定义:精度?准确率(precision)和召回率(recall)?衡量成功的指标将指引你选择损失函数,即模型要优化什么。ROC、AUC

    三、确定评估方法

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

    四、准备数据

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

      准备好输入数据和目标数据的张量后,就可以开始训练模型了

    五、开发比基准更好的模型

      开发一个小型模型,它能够打败纯随机的基准(dumb baseline)。在 MNIST 数字分类的例子中,任何精度大约 0.1 的模型都可以说具有统计功效。之后需要选择三个关键参数来构建第一个工作模型。

    • 最后一层的激活(sigmoid,softmax)
    • 损失函数(binary_crossentropy,mse)
    • 优化配置(优化器、学习率,rmsprop 及其默认的学习率就是稳妥的)
    问题类型 最后一层激活函数 损失函数
    二分类问题 sigmoid binary_crossentropy
    多分类、单标签问题 softmax categorical_crossentropy
    多分类、多标签问题 sigmoid binary_crossentropy
    回归到任意值 mse
    回归到0~1范围内的值 sigmoid mse 或 binary_crossentropy

    六、扩大模型规模:开发过拟合的模型

      首先搞清楚你需要多大的模型,就必须开发一个过拟合的模型,这很简单。

    • 添加更多的层
    • 让每一层变得更大
    • 训练更多的轮次

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

      下一阶段将开始正则化和调节模型,以便尽可能地接近理想模型,既不过拟合也不欠拟合。

    七、规则正则化与调节超参数

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

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

      如果系统性地迭代多次,最终会导致模型对验证过程过拟合(即使模型并没有直接在验证数据上训练)。这会降低验证过程的可靠性。如果测试集上的性能比验证集上差很多,那么这可能意味着你的验证流程不可靠,或者你在调节模型参数时在验证数据上出现了过拟合。在这种情况下,你可能需要换用更可靠的评估方法,比如重复的 K 折验证。

  • 相关阅读:
    BZOJ 1492 [NOI2007]货币兑换Cash
    BZOJ 2285 [Sdoi2011]保密
    BZOJ 2962 序列操作
    BZOJ 3197 [Sdoi2013]assassin
    BZOJ 3131 [Sdoi2013]淘金
    BZOJ 3532 [Sdoi2014]Lis
    BZOJ 1923 [Sdoi2010]外星千足虫
    BZOJ 4855 [Jsoi2016]轻重路径
    BZOJ 4289 PA2012 Tax
    微信开发之 微信支付
  • 原文地址:https://www.cnblogs.com/alex-bn-lee/p/13740552.html
Copyright © 2011-2022 走看看