机器学习模型性能提升方案

​ 机器学习最有价值的部分是预测建模。 这是在历史数据上训练模型并对新数据进行预测的模型的开发。 关于预测建模的首要问题是:如何获得更好的结果?
这份备忘单包含了多年以来我的最佳应用程序,以及我对顶尖的机器学习从业人员和比赛获胜者的学习所总结出的最佳建议。 有了本指南,您不仅会得到解脱和提升的性能,甚至可以在预测问题上获得世界一流的结果。

概述

​ 此备忘单旨在为您提供一些想法,以提高您的机器学习问题的性能。 取得突破是一个好主意。 当您遇到问题时,一个好主意值得一吨黄金,本指南包含32种可以尝试的想法! 找到一个想法,取得进展,然后再来回去。
我将指南分为4个子主题:

1.使用数据提高性能。
2.使用算法提高性能。
3.通过调参提高性能。
4.使用集成提高性能。
您越往下走,收益通常会越小。 例如,问题的新框架或更多数据通常比调整性能最佳算法的参数给您更多收益。 虽然并非总是如此,但总的来说是这样。

使用数据提升性能

通过更改训练数据和问题定义,您可以获得巨大的提升。 也许甚至是最大的提升。

策略:在数据上创建新的不同观点,以便将基本问题的结构最好地展示给学习算法。

策略:
  • 获取更多数据。 您可以获得更多或更优质的数据吗? 诸如深度学习之类的现代非线性机器学习技术随着更多数据的性能不断提高。
  • 创造更多数据。 如果无法获取更多数据,是否可以生成新数据? 也许您可以扩充或置换现有数据,或者使用概率模型来生成新数据。
  • 清洗数据。 您可以改善数据中的信号吗? 可能存在可能被固定或删除的缺失或损坏的观测值,或者可能被固定或删除的超出合理范围的异常值以提高数据质量。
  • 重新采样数据。 您可以重新采样数据以更改大小或分布吗? 也许您可以在实验中使用更小的数据样本,以加快或加快特定类型样本的过采样或欠采样观测,从而更好地在数据集中表示它们。
  • 重新构造问题:您可以更改要解决的预测问题的类型吗?将数据重新构造为回归,二进制或多类分类,时间序列,异常检测,评级,推荐等类型问题。
  • 缩放数据。 您可以重新缩放数字输入变量吗? 输入数据的标准化和标准化可能会导致使用加权输入或距离度量的算法的性能提升。
  • 转换数据。 您可以重塑数据分布吗? 使输入数据更具高斯性或通过指数函数传递可能会更好地将数据中的特征暴露给学习算法。
  • 投影数据:可以将数据投影到较低维度的空间中吗? 您可以使用无监督的聚类或投影方法来创建数据集的全新压缩表示形式。
  • 特征选择。 所有输入变量是否同样重要? 使用特征选择和特征重要性方法创建数据的新视图,以使用建模算法进行探索。
  • 特征工程。 您可以创建和添加新的特征吗? 可能有一些属性可以分解为多个新值(例如类别,日期或字符串),或者可以聚合以表示事件的属性(例如计数,二分类标签或统计摘要)。
    结果:您现在应该拥有一套新的视图和数据集版本。
    下一步:您可以使用预测建模算法评估每个模型的价值。

通过算法提升性能

机器学习与算法有关。
策略:确定在性能基准之上执行并优于平均水平的算法和数据表示形式。 对结果保持怀疑态度并设计实验使结果难以愚弄你。

策略

  • 重采样方法。 哪种重采样方法用于估计新数据的技能?使用一种可以充分利用可用数据的方法和配置。 具有保留测试集的k折交叉验证方法可能是最佳实践。

  • 评估指标。 使用什么度量标准来评估预测技能? 使用最能反映问题和领域要求的度量。

  • baseline表现。 比较算法的基准性能是多少?使用随机算法或零规则算法(预测均值或众数)来建立基线,以此对所有评估算法进行排名。

  • 线性算法。 哪些线性算法能很好地工作? 线性方法通常更容易产生偏见,易于理解且易于训练。 如果可以取得良好的效果,则首选它们。 评估各种线性方法。

  • 非线性算法。 哪些非线性算法能很好地工作? 非线性算法通常需要更多数据,具有更高的复杂度,但可以实现更好的性能。 评估各种非线性方法。

  • 从文献中获取。 文献中报道了哪些算法可以很好地解决您的问题? 也许您可以获得有关算法类型的想法或经典方法的扩展,以探讨您的问题。

  • 标准配置。 被评估算法的标准配置是什么? 每种算法都需要有机会很好地解决您的问题。 这并不意味着要调整参数,而是意味着要研究如何很好地配置每个算法并给它一个训练数据的机会。

结果:您现在应该有一个性能良好的算法和数据表示形式的清单。
下一步:下一步是通过算法调整来提高性能。

通过调参提升性能

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

  • 诊断。 诊断对您的算法有什么启示? 也许您可以查看学习曲线以了解该方法是不是过拟合或者欠拟合,然后进行纠正。 不同的算法可能会提供不同的可视化和诊断。回顾算法预测的是不是正确。
  • 尝试直觉。 如果您使用参数的时间足够长,并且反馈周期很短,那么您可以对如何配置问题算法产生直觉。 尝试一下,看看是否可以提出新的参数配置来尝试更大的测试数据。
  • 从文献中获取。 文献中使用了哪些参数或参数范围?评估标准参数的性能是开始任何调整活动的好地方。
  • 随机搜索。 哪些参数可以使用随机搜索? 也许您可以使用算法超参数的随机搜索来暴露您永远不会尝试尝试的配置。
  • 网格搜索。 哪些参数可以使用网格搜索? 也许有一些标准超参数值的网格,您可以列举这些网格以找到良好的配置,然后使用更合适的网格重复该过程。
  • 优化。 您可以优化哪些参数? 也许存在诸如结构或学习率之类的参数,而这些参数可以使用直接搜索程序(例如模式搜索)或随机优化(例如遗传算法)进行调整。(现在最常用贝叶斯优化)
  • 替代实现。 该算法还有哪些其他实现? 该方法的替代实现也许可以在相同数据上获得更好的结果。 每种算法都有算法实现者必须做出的无数微决定。 其中一些决定可能会影响您的问题。
  • 算法扩展。 该算法有哪些常见扩展? 也许您可以通过评估该方法的通用或标准扩展来提高性能。 这可能需要执行工作。
  • 算法定制。 可以针对您的特定情况对算法进行哪些自定义? 从损失函数,内部优化方法到算法特定决策,也许可以对数据算法进行一些修改。
  • 联系专家。 算法专家在您的情况下有何建议? 写一封简短的电子邮件,概述您的预测问题以及您曾尝试向该算法的一位或多位专家学者尝试的内容。 这可能会揭示您以前不知道的新颖或新想法的前沿工作或学术工作。
    结果:您现在应该在您的机器学习问题上列出高度优化的算法,甚至可能只有一个。
    下一步:此时可以将一个或多个模型定型,并用于进行预测或投入生产。 通过组合来自多个模型的预测,可以进一步提高性能。

使用集成提高性能

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

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

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

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

  • 正确的预测。 您可以更正表现良好的模型的预测吗?也许您可以显式地纠正预测或使用诸如boosting之类的方法来学习如何纠正预测错误。

  • 学习结合。 您是否可以使用新模型来学习如何最佳地组合来自多个性能良好模型的预测? 这称为堆叠概括或堆叠,当子模型熟练但以不同方式使用且聚合器模型是预测的简单线性加权时,通常可以很好地工作。

结果:您应该拥有一个或多个性能良好的模型,其性能要优于任何单个模型。
下一步:此时可以将一个或多个合奏定型,并用于进行预测或投入生产。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值