机器学习性能改善备忘单:32个帮你做出更好预测模型的技巧和窍门

简介:


机器学习最有价值(实际应用最广)的部分是预测性建模。也就是在历史数据上进行训练,在新数据上做出预测。 


而预测性建模的首要问题是:


如何才能得到更好的结果?

这个备忘单基于本人多年的实践,以及我对顶级机器学习专家和大赛优胜者的研究。


有了这份指南,你不但不会再掉进坑里,而且会提升性能,甚至在你自己的一些预测难题中取得世界领先水平的结果。


让我们一起来看看吧!


注意:本文的结构基于早些时候另一篇关于改善深度学习性能的指南——《如何改善深度学习性能》



 

◆ ◆ 

概述


本备忘单的目的是为你提供一些提升机器学习性能的想法。要获得突破,你所需要的可能就是其中的一个。找到你要的那个,然后回来,再找下一个再提升。


我把这份清单分为4个子主题:

  1. 基于数据改善性能

  2. 借助算法改善性能

  3. 用算法调参改善性能

  4. 借助模型融合改善性能


清单越往下,你获得的增益可能越小。比如,对问题场景重新设立框架或者更多的数据通常比对最好的算法进行调参得到收益要多。 


不总是这样,但通常如此。


◆ ◆ 

1.基于数据改善性能


改变你的训练集数据以及问题定义方式,你能够得到很大提升,也许是最大的提升。


策略:从新的、不同的角度透视你的数据,以便将潜藏的问题结构充分暴露给算法。


数据策略


  • 获得更多的数据:你能够拿到更多或者更高质量的数据么?对现代非线性机器学习模型如深度学习而言,数据越多,改进越多。

  • 创造更多数据:如果你不能拿到更多数据,那么,你能创造出新的数据么?也许你可以填充或者重新排列现有数据,或者利用概率模型来产生新的数据。

  • 清洁你的数据。你能否改善数据中的信号?也许可以纠正或删除一些缺失或错误的观测值,或者在合理范围外的离群点,从而提升数据质量。

  • 数据重新取样。你能否对数据重新取样,以改变其大小或者分布?也许你可以用一个小得多的数据来实验,以提高实验的速度;或对某个特殊类型的观察值进行过采样/欠采样以使得它们更好地代表整个数据集。

  • 重新界定问题:你能否改变你正试图解决的问题类型?重构数据,如回归,二项或多项分类,时间序列,异常检测,评分,推荐等问题类型。

  • 重新缩放数据。你能否对数值型变量进行缩放处理?输入数据的归一化和标准化处理可以提升使用加权或距离度量的算法性能。

  • 转化数据。你能否改变数据的分布形态?使得数据更服从高斯分布,或进行指数变换可能会暴露出数据更多的特征供算法学习。

  • 数据投影(映射):你能否将数据投影到一个更低维的空间?你可以用无监督的聚类或投影方法,创造一个新的压缩数据集代表。

  • 特征选择。所有的输入变量是否同等重要?使用特征选择和衡量特征重要性的方法,可以创造出数据的新视角,供模型算法探索。

  • 特征工程。 你能够创造或者增加新的特征?也许有的属性可以分解为多个新的值(比如类别,日期或字符串)或者属性可以聚集起来代表一个事件(如一个计数,二进制标志或统计信息)

上面这些工作的期待结果是:你应该得到数据集的一批新视角和新版本。


下一步:你可以用预测性模型算法评估它们每一个的价值。


◆ ◆ 

2.借助算法改善性能


机器学习无外乎算法。 


调整的策略:找出那些性能高于基线水平,比平均水平要好的算法和数据呈现方式。对结果保持怀疑态度,设计实验,使得它很难愚弄你。


算法策略


  • 重采样方法。要用什么样的重采样方法来估计其在新数据上的能力?使用一种能够最好地利用现有数据的方法和参数设置。K折交叉验证法,利用其中的一折作为验证集可能是最佳操作。

  • 评价指标。用什么样的指标来评价预测能力?选择能够最好地体现问题和专业需求的指标。不要任何问题一上来就看分类准确率。

  • 基线性能。比较算法时,什么是基线性能?通过随机算法或零规则算法(预测均值或众数)来建立一个基线,并以此对所有算法进行排序。

  • 抽检线性算法。什么样的线性算法能有好结果?线性方法通常更容易产生偏倚,也易于理解,能快速训练。如果能达到好效果,则更容易被选中。评估多个不同的线性方法。

  • 抽检非线性算法。哪些非线性算法能有好结果?非线性算法通常要求更多数据,有更高的复杂性,但是能获得更好的性能。评估多个不同的非线性方法。

  • 从文献中偷师学艺。哪些文献报导的方法能很好地解决你的问题?也许你能从算法类型或传统方法的延伸中获取解决自己问题的灵感。

  • 标准参数设置。评估算法时,什么是标准的参数设置?每一个算法都有机会解决你的问题,这不是说在现有基础上死磕调参,而是说,每一种算法都需要把参数调好,才能在算法“大赛”中有胜出的机会。

上面这些工作的期待结果是:你应该会得到性能良好的候选算法和数据呈现候选方法清单(不太长的有限个方法)。


下一步:通过算法调参改善性能


◆ ◆ 

3.用算法调参改善性能


算法调参可能是你花时间最多的地方。它可能非常耗时间,从算法抽检中很快能挖掘出一两个性能不错的算法,而把这一两个算法的潜力充分挖掘出来可能需要好几天,几周甚至几个月的时间。


调整的策略:充分挖掘性能良好的算法的潜力。



调参策略


  • 诊断。对算法要做哪些诊断和回顾?也许可以回顾一下学习曲线,了解目前模型的状态是过拟合还是欠拟合,然后纠正它。不同的算法可能提供不同的可视化结果和诊断。检视算法得到正确预测结果和错误预测结果的样本。

  • 试试直觉。你的直觉是什么?如果你琢磨参数的时间足够长,而反馈回路又很短,那么你会得到怎么调参的直觉。试一试,看看你遇到更大的难题时能不能再得到新的参数设置灵感。

  • 学习文献。文献中用到了哪些参数,范围是多少?评估标准参数性能是调参的良好开端。

  • 随机搜索。哪些参数可以用随机搜索?也许你可使用算法超参数的随机搜索,来发现那些你永远也想不到的参数设置。

  • 网格搜索。哪些参数可以使用网格搜索?也许有一些标准超参数网格值,你可以拿来赋值,从而发现好的参数设置,重复这一过程,不断精调网格。

  • 最优化。那些参数可以优化?也许有一些参数,如结构或者学习率,可以用直接搜索程序(如模式搜索)或随机优化(如遗传算法)来调整。

  • 交替实施。算法有哪些其他的实施?也许其中的一个交替实施方法可以在同样的数据上得到更好的结果。每个算法都有无数的微决定由算法的使用者做出,其中的一些可能会影响到问题的解决。

  • 算法延伸。哪些是常见的算法延伸?也许你可以通过评估常见的或标准的算法延伸而提高性能。这可能需要一些实施工作。

  • 算法定制。对你的个案而言,需要做哪些算法定制?也许你可以为你的数据修饰算法,从损失函数,内部优化方法到算法的具体决定。

  • 联系专家。对你的个案,专家们有什么算法推荐?给一个或多个算法领域的学术界专家写封简单的邮件,概述你的预测问题,以及你已经做出的尝试。这可能会让你获悉前沿工作,或者学术界不为你所知的新想法。

上面这些工作的期待结果是:你应该可以得到一个很短的清单,上面是经过精调的算法。也许甚至只剩下一个。


下一步:到这一步,对剩下的一个或多个模型进行最后的收尾,做出预测或者投放到产品中。更进一步的性能提升可以通过多个模型的融合来达到。


◆ ◆ 

4. 借助模型融合改善性能


你可以组合多个模型的预测。在算法调参之后,这是下一个大的改善空间。实际上,组合多个“够用”的模型,而不是多个精调(同时也非常脆弱,可能严重overfitting)的模型通常可以达到很好的性能提升。


策略:组合多个性能良好的模型预测结果。


组装策略


  • 混合模型预测结果。 你是否可以直接组合多个模型的预测结果?也许你可以使用同样的或不同的算法来搭建多个模型。对各自的预测结果取均值,或者众数。

  • 混合数据呈现方式。你是否可以组合用不同数据呈现方法得到的模型预测结果?也许你使用了不同的问题投射方法,来训练性能良好的的算法,那么这些预测结果可以组合起来。

  • 混合数据样本。你是否可以组合不同数据角度(特征)训练的模型?也许你可以创造训练样本的多个子样本来训练一个性能良好的算法,然后把结果组合起来。这叫做自助聚集(bootstrap aggregation)或者bagging,当各个模型的预测都很高明而方法各异(不相关)时,效果最好。

  • 纠正预测。你是否可以纠正性能良好模型的预测?也许你可以明确地纠正预测结果,或者通过像boosting这样的方法来学习如何纠正预测错误。

  • 学习组合。你能否使用新的模型,学习如何将多个性能良好的预测结果以最佳方式组合起来?这叫做堆栈(stacked generalization or stacking),当各子模型都很高明而方法各异时,通常能产生不错的结果,聚集模型就是各预测结果的简单加权线性模型。这个过程可以在多个层面上重复进行。

上面这些工作的期待结果是:你应该可以得到一个或多个性能良好的模型的组装结果,比任何单一模型的结果都好。


下一步:可以把一个或多个组装最后定下来,进行预测,投入产品中。


◆ ◆ 

结语


本备忘单密集打包了各种改善性能的想法。如果你觉得这里提到的要点太多,你不必样样都做。提升性能,你只需要一个好的想法。你可以依照下序的建议试试:


  1. 选择一个组 

    1. 数据

    2. 算法

    3. 调参

    4. 组装

  2. 从组中选择一个方法

  3. 从选择的方法中挑一个去试

  4. 比较结果,如果有改进则留下

  5. 重复上述过程

  6. 原文发布时间为:2016-12-05


    本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号

相关文章
|
3月前
|
人工智能 安全 C#
阿里云域名价格2026完整版:注册、续费、转入、赎回收费清单
阿里云域名价格2026完整版:注册、续费、转入、赎回收费清单,2026年阿里云域名收费价格表,域名后缀com、cn等,本页面仅展示普通域名标准价格,白金词、保留词等特殊域名及域名活动价格以订单实际价格为准,com域名注册85元1年、续费95元一年,cn域名注册38元1年,续费42元一年
|
1月前
|
存储 人工智能 自然语言处理
罗兰艺境GEO语义资产库构建系统:从非结构化文档到AI信任资产的智能精炼厂
罗兰艺境GEO语义资产库构建系统将非结构化技术文档转化为AI信任的结构化语义资产。通过多模态文档解析、领域自适应实体识别(F1值92.5%)和DSS三级转换——深度化(模糊→精确参数)、支持化(孤证→可验证背书)、来源化(匿名→可追溯信源),转换后语料被大模型优先推荐概率提升65%,增量维护效率提升80%。支持版本化管理与混合语义检索。本文提供从文档到AI信任资产的工程实践。
192 1
|
9月前
|
运维 数据可视化 搜索推荐
研发部绩效考核怎么做?用这5步搭建体系,人事系统帮你落地
研发部门作为企业技术核心,其绩效考核面临创造性、协作性及高知群体特性带来的挑战。常规KPI难以量化创新价值、评估团队贡献或满足成长需求。科学的考核体系需从战略出发,结合可量化与定性指标,设定灵活周期,引入多源评价,并与激励机制联动。借助人事系统实现数据自动整合、流程在线化与结果可视化,提升考核效率与公平性。最终通过“体系+工具”结合,激发研发人员积极性,推动企业技术创新与战略落地。
|
4月前
|
人工智能 弹性计算 自然语言处理
2026年阿里云建站费用详解:三大方案功能对比与价格分析
在数字化需求日益增长的当下,搭建网站成为个人展示、企业推广的重要途径。阿里云针对不同技术基础与业务规模,推出 “自购服务器建站”“万小智 AI 模板建站”“云企业官网定制建站” 三种核心方案,价格从 38 元 / 年到数万元 / 年不等,覆盖从个人到中大型企业的全场景需求。本文结合全网最新官方数据与实测体验,从方案细节、价格体系、功能对比、场景适配等维度展开解析,为用户提供客观选型参考。
|
Java Android开发 iOS开发
深入探讨移动操作系统的性能优化:安卓与iOS的对比分析
在现代移动设备中,操作系统的性能优化至关重要。本文从系统架构、内存管理、电池续航和应用程序运行效率等多个维度,深入探讨了安卓(Android)和iOS两大主流移动操作系统的优化策略及其实际效果,旨在为开发者和用户提供更清晰的了解和选择依据。
2144 27
|
存储 人工智能 物联网
FLUX第三弹:直面天命,FLUX.1-LoRA/IP-adapter「黑神话:悟空」生图实战
应近日来诸多社区开发者的学习诉求,特为大家推出一期 FLUX.1-LoRA/IP-adapter+ComfyUI +“顶流”IP「黑神话:悟空」的模型推理实战教程,玩转一把AI悟空生图 👀
|
缓存 UED 开发者
【专栏:交互与用户体验篇】网页加载动画与用户等待体验
【4月更文挑战第30天】网页加载动画在现代设计中扮演重要角色,通过提供视觉反馈和分散注意力,改善用户体验。本文讨论了设计加载动画的原因和类型,如进度指示器、旋转指针、动态图标、模糊效果和文本提示,并提出了设计最佳实践:简洁相关、快速明确、考虑不同设备和避免误导。优化加载策略,如首屏内容优先加载和懒加载,也是提升用户体验的关键。设计时需注重实用性、品牌一致性和跨平台兼容性,确保在加载延迟时仍能给用户留下良好印象。
476 5
|
分布式计算 监控 数据挖掘
云上游戏数据分析实践
数据分析和游戏的生命周期与盈利息息相关,同时数据分析对游戏的运维也起到了至关重要的作用,精确的数据分析可以延长游戏的生命和帮助其盈利。本文针对游戏行业的数据特点,结合游戏数据分析的现状,对数据分析上云的技术选型、结合数加大数据计算服务MaxCompute(原ODPS)、SLS、RDS、DPC等产品和
6234 0
|
弹性计算 固态存储 大数据
阿里云服务器CPU处理器Intel Xeon(Cascade Lake) Platinum 8269CY
阿里云服务器ECS实例CPU处理器Intel Xeon(Cascade Lake) Platinum 8269CY
2076 0
 阿里云服务器CPU处理器Intel Xeon(Cascade Lake) Platinum 8269CY

热门文章

最新文章