redhat9i 发表于 2021-12-9 18:07

机器学习性能优化全解|经验之谈

机器学习中最有价值的部分是预测建模。这是模型的发展,这些模型是在历史数据上训练的,并对新数据进行预测。在预测建模方面,首要的问题是:我怎样才能得到更好的结果?这张备忘单包含了我多年来从自己的应用和学习顶尖机器学习实践者和竞赛优胜者中提炼出来的最佳建议。有了这本指南,你不仅可以提升性能,甚至可以在预测问题上获得世界级的结果。
         -------Jason Brownlee
内容


[*]基于数据优化提高性能
[*]基于算法优化提高性能
[*]基于超参数优化提高性能
[*]基于优化集成模型提高性能

1. 基于数据优化提高性能

通过对训练数据和问题定义的更改,您可以获得巨大的成功。
策略:对数据创建新的和不同的视角,以便将潜在问题的结构最好地暴露给学习算法。
Method:

[*]获取更多数据。你能得到更多或更好质量的数据吗?现代的非线性机器学习技术,如深度学习,随着数据的增加,性能不断提高。
[*]创造更多的数据。如果无法获取更多数据,是否可以生成新数据?也许您可以扩充或排列现有数据,或者使用概率模型生成新数据。
[*]清理数据。你能改善数据中的信号吗?可能有丢失或损坏的观测值可以修复或删除,或者有超出合理范围的异常值可以修复或删除,以提高数据质量。
[*]重新采样数据。是否可以重新采样数据以更改大小或分布?也许您可以在实验中使用更小的数据样本,以加快特定类型的样本或样本上下观察的速度,从而更好地在数据集中表示它们。重新定义你的问题:你能改变你正在解决的预测问题的类型吗?将数据重新定义为回归、二进制或多类分类、时间序列、异常检测、评级、推荐者等类型的问题。
[*]重新缩放数据。你能重新调整数值输入变量的比例吗?输入数据的规范化和标准化可以提高使用加权输入或距离度量的算法的性能。
[*]转换数据。你能改变你的数据分布吗?使输入数据更为高斯或通过指数函数可能更好地将数据中的特征暴露给学习算法。投影数据:能否将数据投影到低维空间?可以使用无监督的聚类或投影方法来创建数据集的全新压缩表示。
[*] 特征选择。所有的输入变量都同等重要吗?使用特征选择和特征重要性方法创建数据的新视图,以便使用建模算法进行探索.
[*]特征工程。能否创建和添加新的数据功能?也许有一些属性可以分解为多个新值(如类别、日期或字符串)或者可以聚合以表示事件的属性(如计数、二进制标志或统计总结)。
2. 基于算法优化提高性能

机器学习就是算法。
策略:确定性能高于基线且优于平均值的算法和数据表示。
方法:

[*]重采样方法。什么样的重采样方法被用来评估新数据的技能?使用能够充分利用可用数据的方法和配置。带有保持验证数据集的k-fold交叉验证方法可能是一种最佳实践。评估指标。什么样的标准用来评估预测的技巧?使用最能捕获问题和域需求的度量。这可能不是分类的准确性。
[*]基线性能。比较算法的基线性能如何?使用随机算法或零规则算法(预测平均值或模式)建立基线,根据该基线对所有评估算法进行排序。
[*]抽查线性算法。什么样的线性算法工作好?线性方法往往比较偏颇,容易理解,训练速度快。如果你能取得好的成绩,他们是首选。评估一系列不同的线性方法。
[*]抽查非线性算法。哪些非线性算法工作良好?非线性算法往往需要更多的数据,具有更大的复杂度,但可以获得更好的性能。评估各种非线性方法。
[*]整合论文算法。文献中有哪些算法能很好地解决你的问题?也许你可以得到算法类型的想法,或者是经典方法的扩展,来探索你的问题。
[*]标准配置流程。被评估算法的标准配置是什么?每种算法都需要一个机会来解决你的问题。这并不意味着调整参数(还没有),但它确实意味着研究如何配置好每一个算法。
结果:您现在应该有一个性能良好的算法和数据表示的候选列表。
3. 基于超参数优化提高性能(tunning)

算法优化可能是您花费大部分时间的地方。这可能非常耗时。你经常可以从抽查中快速发现一两个性能良好的算法。从这些算法中获得最大收益可能需要几天、几周或几个月。
策略:充分利用性能良好的机器学习算法。
方法:
诊断。关于你的算法诊断告诉你什么?也许你可以回顾一下学习曲线,以了解该方法是否过度或不充分地拟合了问题,然后再纠正。不同的算法可以提供不同的可视化和诊断。回顾一下算法预测的是非。
试试直觉。你的直觉告诉你什么?如果你处理参数的时间足够长,而且反馈周期很短,你可以发展出一种直觉,告诉你如何在一个问题上配置一个算法。试试这个,看看你能不能想出新的参数配置来试试你的大型测试线束。
整合文献算法。文献中使用了哪些参数或参数范围?评估标准参数的性能是开始任何优化活动的好地方。随机搜索。哪些参数可以使用随机搜索?也许您可以使用算法超参数的随机搜索来公开您从未想过要尝试的配置。
网格搜索。哪些参数可以使用网格搜索?也许有一些标准超参数值的网格可以枚举以找到好的配置,然后用越来越细的网格重复这个过程。
优化。你能优化哪些参数?也许有一些参数,如结构或学习率,可以通过直接搜索过程(如模式搜索)或随机优化(如遗传算法)来调整。
替代实施。还有哪些算法的其他实现可用?也许该方法的另一个实现可以在相同的数据上获得更好的结果。每个算法都有无数的微观决策,必须由算法实现者做出。有些决定可能会影响你解决问题的技巧。
算法扩展。算法的常见扩展是什么?也许您可以通过评估方法的公共或标准扩展来提高性能。这可能需要执行工作。
算法定制。对于您的特定情况,可以对算法进行哪些自定义?也许您可以对数据的算法进行一些修改,从损失函数、内部优化方法到特定于算法的决策。
联系专家。算法专家在你的案例中推荐什么?写一封简短的电子邮件,总结你的预测问题以及你在算法方面向一个或多个专家学者所做的尝试。这可能会揭示前沿工作或学术工作以前未知的新的或新鲜的想法。
结果:你现在应该有一个关于机器学习问题的高度优化算法的候选列表,甚至可能只有一个。
4.基于优化集成模型提高性能


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

方法:

[*]混合模型预测。你能把多个模型的预测直接结合起来吗?也许您可以使用相同或不同的算法来创建多个模型。从多个表现良好的模型的预测中取平均值或模式。
[*]混合数据表示。你能把来自不同数据表示的模型的预测结合起来吗?你可能对你的问题有很多不同的预测,这些预测可以用来训练性能良好的算法,然后可以组合它们的预测。
[*]混合数据样本。你能把训练过的不同数据视图的模型结合起来吗?也许你可以创建多个训练数据子样本,训练一个性能良好的算法,然后合并预测。这被称为bootstrap聚合或bagging,当来自每个模型的预测很熟练但以不同的方式(不相关)时效果最好。
[*]正确的预测。你能修正性能良好的模型的预测吗?也许您可以显式地更正预测,或者使用boosting之类的方法来学习如何更正预测错误。
[*]学会组合。你能用一个新的模型来学习如何最好地结合来自多个表现良好的模型的预测吗?这被称为叠加泛化或叠加,通常在子模型熟练但方式不同且聚合器模型是预测的简单线性加权时工作良好。这个过程可以重复多层。
结果:你应该有一个或多个表现良好的模型,超过任何单一的模型组合。
下一步:一个或多个组合可以在这一点上定稿,并用于预测或投入生产。
页: [1]
查看完整版本: 机器学习性能优化全解|经验之谈