11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

构建机器学习系统的 20 个经验教训

  • 2015-12-21
  • 本文字数:2049 字

    阅读完需:约 7 分钟

数据科学家对优化算法和模型以进一步发掘数据价值的追求永无止境。在这个过程中他们不仅需要总结前人的经验教训,还需要有自己的理解与见地,虽然后者取决于人的灵动性,但是前者却是可以用语言来传授的。最近 Devendra Desale 就在 KDnuggets 上发表了一篇文章,总结了 Quora 的工程副总裁 Xavier Amatriain 在 Netflix 和 Quora 从事推荐系统和机器学习工作时所总结的 20 条经验教训

  1. 更多的数据 & 更好的模型
    并不是数据越多结果就越好,高质量的数据才能产生高质量的结果。多并不意味着好,事实上,有些情况下较少的数据反而效果更好,因此数据要适量,质量要高
  2. 可能并不需要所有的大数据
    组织可能积累了不同种类的大数据,但是并不是每一个场景都会用到所有的数据。大部分情况下,通过一些样本数据就能获得比较好甚至是比使用全量数据更好的效果。
  3. 有时候更复杂的模型并没有带来任何提升,但这并不意味着就不需要它了
    如果将一个线性模型的特征数据作为另一个更复杂模型(例如非线性模型)的输入,而复杂模型产生的结果并没有任何提升,那并不意味着这个复杂模型就毫无意义。因为通常情况下只有更复杂的特征数据才需要更复杂的模型,对于简单的特征数据复杂模型往往难以发挥出自身优势。
  4. 学会处理展现偏见
    系统通常会将那些预测的比较正确的结果展示给用户,用户会选择性的查看,但是用户不看的那部分并不一定就毫无吸引力。更好的选择是通过关注模型或者 MAB 分析用户的点击概率,合理地呈现内容。
  5. 认真思考训练数据
    构建训练和测试数据的时候需要充分考虑结果和各种不同的场景。例如,如果要训练一个预测用户是否喜欢某部电影的分类器,那么产生数据的可能场景包括:用户看完电影并给出了一星的评价,用户看了 5 分钟、15 分钟或者一小时之后离开,用户再次查看电影等,如何选择这些数据是需要经过深思熟虑的。
  6. UI 是用户与算法通信的唯一方式
    系统通过 UI 展现算法结果,用户通过 UI 提供算法反馈,它们应该是相互对应的关系,任何一个发生变化另一个也需要进行改变。
  7. 数据和模型是否已经足够好了?要有正确的评估方法
    产品决策始终应该是数据驱动的。对于不同的问题,要选择正确的评估方法,例如,通过 A/B 测试来衡量不同特征数据,不同算法的优劣;通过脱机测试使用 (IR) 度量测试模型的性能。
  8. 分布式算法重要,但是理解它的分布式程度更重要
    分布式 / 并行算法分三级:第一级针对总体的每一个子集,第二级针对超参数的每一种组合,第三级针对训练数据的每一个子集,每一级都有不同的要求。
  9. 慎重地选择超参数
    要选择正确的度量标准自动化超参数的优化。
  10. 有些事情能线下做,有些不能,有些介于两者之间,为此需要支持多层次的机器学习。
  11. 隐式信号几乎总是打败显式信号
    许多数据科学家认为隐式反馈更有用。但真的是这样么?实际上有些情况下结合不同形式的隐式和显式信号能更好地表示长期目标。
  12. 模型会学习你教给他的内容
    机器学习算法并不是一个随意的过程,它的每一步都涉及到科学方法。模型要从训练数据、目标函数和度量中学习。
  13. 有监督的 + 无监督的学习
    开发模型的时候不能简单地选择有监督的或者无监督的学习,它们各有长处,适用场景不同,用户需要根据具体情况同时迭代地使用它们,通过两种方法的融合获得更好的效果。
  14. 所有的事情都是一种集成(Ensemble)
    使用机器学习的大部分应用程序都是一个集合体。你可以添加完全不同的方法(例如 CF 和基于内容的方式), 你也可以在集成层使用许多不同的模型(例如 LR、GDBT、RF 和 ANN)。
  15. 一个模型的输出可能是另一个模型的输入
    确保模型的输出具有良好的数据依赖关系,例如可以容易地改变值的分布而不影响依赖它的其他模型。要尽量避免反馈循环,因为这样会在管道中造成依赖和瓶颈。另外,机器学习的模式设计也需要遵循最佳的软件工程实践,例如封装、抽象、高内聚和松耦合。
  16. 特征工程的失与得
    良好的机器学习特征可重用、可转换、可解释并且可靠。捕获的特征越好,结果越精确。为了量化数据的属性必须将维度翻译成特征。
  17. 机器学习基础设施的两面性
    任何机器学习基础设施都需要考虑两种不同的模式。模式1:机器学习实验需要扩展性、易用性和可重用性。模式2:机器学习产品不仅需要模式1的特性,还需要性能和可伸缩性。理想情况下,应该保持这两种模式尽可能地相近。
  18. 要能回答有关于模型的问题
    必须能够向产品所有者解释模型的行为,知道如何使用模型,它需要哪些特征,导致失败的原因是什么;同时还需要知道产品所有者或投资者的期望,能够向他们介绍模型为产品带来了什么价值。
  19. 不需要分发机器学习算法
    Hadoop/Spark 这些“容易的”分布式计算平台也有一些陷阱,例如成本和网络延迟,实际上有些情况不使用它们也能很好的完成工作,通过智能数据样本、离线模式以及高效的并行代码等方法训练模型所花费的时间甚至比这些分布式平台要少的多。
  20. 数据科学 vs. 机器学习工程不为人知的故事
    拥有强大的能够挖掘数据价值的数据科学家是非常值得的。但是既懂数据又有扎实工程技能的数据科学家非常稀少,通常情况下,构建数据科学家团队和机器学习工程团队并让他们通力配合才是比较好的方案。
2015-12-21 18:002909
用户头像

发布了 321 篇内容, 共 110.9 次阅读, 收获喜欢 16 次。

关注

评论

发布
暂无评论
发现更多内容

30+程序员竞争力从哪里来?

我心依然

程序员 竞争力

阿里一线架构师甩出“源码阅读指南”,从源码到实战,一键搞定

比伯

Java 编程 程序员 架构 计算机

产品经理训练营笔记-产品思维和产品意识(下)

.nil?

产品经理训练营

《程序员修炼之道》- 务实的方法(5)

石云升

程序员 28天写作 评估工作量

面试学习!月薪20k+的Android面试都问些什么?终获offer

欢喜学安卓

android 程序员 面试 移动开发

面试官问:ZooKeeper是强一致的吗?怎么实现的?

Java 编程 程序员 面试 分布式

半导体芯片小白基础知识(2) (28天写作 Day23/28)

mtfelix

集成电路 28天写作 晶圆 光刻机 晶圆代工

《小狗钱钱》读书笔记

架构精进之路

读书笔记 七日更 28天写作

贪心算法

en

算法 贪心算法

奇葩java迭代器笔试题,做对算你厉害

田维常

迭代器模式

Java学习笔记整理:Spring+tomcat+Kafka+多线程面试笔记

Java架构之路

Java 程序员 架构 面试 编程语言

BAT面试Spring全家桶:Spring+SpringBoot+SpringCloud+SpringMVC

Java架构之路

Java 程序员 架构 面试 编程语言

成长篇-结构思考力笔记(完整版)

小诚信驿站

程序员 刘晓成 小诚信驿站 成长笔记 28天写作

软件教练说:性能优化与性能设计,“相亲相爱”的一对

华为云开发者联盟

架构 性能优化 设计 程序 软件教练

JVM笔记 -- Java跨平台和JVM跨语言

秦怀杂货店

JVM JVM笔记

故乡的年

熊斌

28天写作

真正牛逼的人,都是极简主义者!!

冰河

产品 程序 极简主义

深入浅出Android!阿里P7深入Binder原理讲解,论程序员成长的正确姿势

欢喜学安卓

android 程序员 面试 移动开发

产业互联网业务与团队的思考

陈俊

蚂蚁金服二面被血虐,鬼知道面试的我经历了什么?

Java架构之路

Java 程序员 架构 面试 编程语言

学习JAVA8个月,成功跳槽,外包进阿里成功定级P7,太牛了!

Java 编程 程序员 面试

Redis击穿、穿透、雪崩产生原因以及解决思路

Java架构师迁哥

NeoKylin-Server-5.0离线部署etcd+flannel集群,实现docker容器跨主机网络通信

星河寒水

Docker etcd flannel 麒麟操作系统 离线部署

Mybatis【16】-- Mybatis多对一关联查询

秦怀杂货店

数据库 mybatis

真狠!涵盖了Netty+Spark+Hadoop+分布式五部分!讲的清清楚楚!

996小迁

redis hadoop 架构 面试 Netty

传统线程互斥技术 synchronized

武哥聊编程

Java 多线程 synchronized 28天写作

架构师训练营第 2 期 第 8 周 作业一

老坛酸菜

架构师训练营第2期

阿里内部Redis宝典意外流出极致经典:源码+实战+理论

比伯

Java 编程 程序员 架构 面试

【Linux系统】关于守护进程

程序员架构进阶

Linux 架构 守护进程 28天写作

老外程序员的Java性能优化方式是什么?JVM调优策略+工具+技巧

Java架构追梦

Java 学习 架构 面试 jvm调优

构建机器学习系统的20个经验教训_语言 & 开发_孙镜涛_InfoQ精选文章