0
点赞
收藏
分享

微信扫一扫

机器学习笔记 - 机器学习调优指南

        机器学习中最有价值的部分是预测建模。 这是对历史数据进行训练并对新数据进行预测的模型的开发。 当涉及到预测建模时,首要的问题是:怎样才能获得更好的结果?

        这份备忘单包含我从多年来我自己的应用程序和研究顶级机器学习从业者和竞赛获胜者中提炼出的最佳建议。 使用本指南,您不仅可以提升性能,甚至可以在预测问题上获得世界一流的结果。

        指南分为 4 个子主题:
        1. 用数据提高性能。
        2. 用算法提高性能。
        3. 通过调优提高性能。
        4. 使用集成提高性能。
        列表中越往下,收益通常越小。 例如,问题的新框架或更多数据通常比调整性能最佳算法的参数会给您带来更多收益。 虽然并非总是如此,但一般而言是这样的。

        1、使用数据提高性能

        通过更改训练数据和问题定义,您可以获得巨大的成功。 也许即使是最大的胜利。
        策略:为您的数据创建新的和不同的观点,以便最好地将潜在问题的结构暴露给学习算法。

        获取更多数据:你能得到更多或更好质量的数据吗? 像深度学习这样的现代非线性机器学习技术在处理更多数据的情况下继续提高性能。

        发明更多数据: 如果无法获取更多数据,是否可以生成新数据? 也许您可以增加或置换现有数据或使用概率模型来生成新数据。

        清理您的数据: 你能改善数据中的信号吗? 也许存在可以固定或删除的缺失或损坏的观察值,或者可以固定或删除以提高数据质量的合理范围之外的异常值。

        重新采样数据:您可以重新采样数据以更改大小或分布吗? 也许您可以使用更小的数据样本进行实验,以加快特定类型的过采样或欠采样观察的速度,以便在数据集中更好地表示它们。

        重构你的问题:你能改变你正在解决的预测问题的类型吗?将你的数据重构为回归、二元或多类分类、时间序列、异常检测、评级、推荐等类型的问题。

        重新调整您的数据:你能重新调整数字输入变量吗? 输入数据的规范化和标准化可以提高使用加权输入或距离度量的算法的性能。

        转换您的数据:你能重塑你的数据分布吗? 使输入数据更加高斯或通过指数函数将其传递可能更好地将数据中的特征暴露给学习算法。

        投影您的数据:您能否将您的数据投影到较低维度的空间中? 您可以使用无监督聚类或投影方法来创建数据集的全新压缩表示。

        特征选择:所有输入变量都同等重要吗? 使用特征选择和特征重要性方法来创建数据的新视图,以使用建模算法进行探索。

        特征工程:您可以创建和添加新的数据特征吗? 也许可以将区域属性分解为多个新值(如类别、日期或字符串)或可以聚合以表示事件的属性(如计数、二元 agor 统计摘要)。

        2、用算法提高性能

        机器学习是关于算法的。
        策略:确定性能高于基准性能并优于平均水平的算法和数据表示。 对难以自欺欺人的结果和设计实验保持怀疑态度。

        重采样方法:使用什么重采样方法来估计新数据的技能?使用可充分利用可用数据的方法和配置。 带有保留验证数据集的 k-foldcross-validation 方法可能是最佳实践。

        评估指标:什么指标用于评估预测技能? 使用最能捕捉问题和领域要求的指标。 它可能不是分类准确度。

        基线性能:比较算法的基线性能是什么?使用随机算法或零规则算法(预测均值或众数)建立基线,以此对所有评估算法进行排名。

        抽查线性算法:哪些线性算法效果好? 线性方法通常更偏向,易于理解且训练速度快。 如果你能取得好的结果,他们是首选。 评估各种线性方法。

        抽查非线性算法:哪些非线性算法效果很好? 非线性算法通常需要更多的数据,具有更大的复杂性,但可以获得更好的性能。 评估各种非线性方法。

        从论文中学习:文献中报告了哪些算法可以很好地解决您的问题? 也许您可以获得算法类型的想法或经典方法的扩展来探索您的问题。

        标准配置:被评估算法的标准配置是什么? 每个算法都需要一个机会来解决你的问题。 这并不意味着调整参数,但它确实意味着研究如何很好地配置算法并在算法中给它一个机会。

        3、通过调优提高性能

        算法调优可能是您花费最多时间的地方。 它可能非常耗时。您通常可以从抽查中快速发现一两个性能良好的算法。 从这些算法中获得最大收益可能需要数天、数周或数月的时间。
        策略:充分利用性能良好的机器学习算法。

        诊断:诊断告诉你什么关于你的算法? 或许你可以回顾学习曲线来了解该方法是在解决问题还是在解决问题,然后进行纠正。 不同的算法可能有其他不同的可视化和诊断。查看算法预测的是对还是错。

        试试直觉:你的直觉告诉你什么? 如果您长时间处理参数并且反馈周期很短,您可以对如何针对问题配置算法产生直觉。 试试这个,看看您是否可以提出新的参数配置来尝试更大的测试工具。

        从论文中查找:文献中使用了哪些参数或参数范围?评估标准参数的性能是开始任何调整活动的好地方。

        随机搜索:什么参数可以使用随机搜索? 也许您可以使用算法超参数的随机搜索来公开您从未想过要尝试的配置。

        网格搜索:什么参数可以使用网格搜索? 也许有标准超参数值的网格,您可以枚举它们以找到良好的配置,然后使用 ner 和 ner 网格重复该过程。

        优化:您可以优化哪些参数? 也许有结构或学习率之类的参数可以使用直接搜索程序(如模式搜索)或随机优化(如遗传算法)进行调整。

        替代实现:该算法的其他哪些实现是可用的? 也许该方法的替代实现可以在相同的数据上获得更好的结果。 每个算法都有无数的微观决策,必须由算法实现者做出。 其中一些决定可能会影响您解决问题的技能。

        算法扩展:算法的常见扩展有哪些? 也许您可以通过评估该方法的常见或标准扩展来提高性能。 这可能需要实施工作。

        算法定制:可以针对您的特定情况对算法进行哪些自定义? 也许您可以对数据的算法进行修改,从损失函数、内部优化方法到算法规范。

        联系专家:算法专家对您的情况有何建议? 写一封简短的电子邮件,总结您的预测问题以及您对一位或多位算法专家学者所做的尝试。 这可能会以新的或新鲜的想法揭示您以前不知道的前沿工作或学术工作。

        4、使用集成提高性能

        您可以组合来自多个模型的预测。 算法调优后,这是下一个需要改进的地方。 事实上,通过组合来自多个足够好的模型而不是来自多个高度调整(和脆弱)模型的预测,您通常可以获得良好的性能。
        策略:结合多个表现良好的模型的预测。

        混合模型预测:你能直接结合来自多个模型的预测吗? 也许您可以使用相同或不同的算法来制作多个模型。从多个性能良好的模型的预测中获取均值或众数。

        混合数据表示:你能结合来自不同数据表示训练的模型的预测吗? 您可能对您的问题有许多不同的预测,这些预测可用于训练性能良好的算法,然后可以组合这些预测。

        混合数据样本:您能否结合在不同数据视图上训练的模型? 也许您可以创建训练数据的多个子样本并训练性能良好的算法,然后结合预测。 这称为引导程序聚合或装袋,当每个模型的预测熟练但方式不同(不相关)时效果最佳。

        正确的预测:你能纠正表现良好的模型的预测吗?也许你可以明确纠正预测或使用 boosting 之类的方法来学习如何纠正预测错误。

        学会组合:您能否使用新模型来学习如何最好地结合多个性能良好的模型的预测? 这称为堆叠泛化或堆叠,当子模型熟练但方式不同并且聚合器模型是预测的简单线性加权时,通常效果很好。 这个过程可以重复多层深度。

       五、总结

        从四个角度Data、Algorithms、Tuning、Ensembles进行尝试调整。

举报

相关推荐

0 条评论