机器学习规则:ML工程最佳实践----rule_of_ml section 3【翻译】
作者:黄永刚
ML Phase III: 缓慢提升、精细优化、复杂模型
第二阶段就已经接近结束了。首先你的月收益开始减少。你开始要在不同的指标之间做出平衡,你会发现有的涨了而有的却降了。事情变得有趣了。获取收益变得更难了,机器学习也已经变得更加复杂了。
警告:这一部分比前面有更多的理论虚的东西。我们见过很多团队在机器学习的一二阶段过得还是很愉快的。一旦进入第三阶段,他们就不得不寻找自己的出路了。
Rule #38: 如果目标没有变化就不要在新特征上浪费时间
随着评价进入平稳期,你的团队开始关注系统目标以外的其他问题。像以前的状态一样,如果已存的算法目标没有覆盖产品的目标,你就要改变你的目标或者产品的目标。例如,你或许优化点击、赞、下载,但是都是基于部分人类评委专家做决策的。
Rule #39: 基于产品长期目标做决策
Alice有个想法可以降低安装预测的逻辑损失。她加了一个特征。逻辑损失也降低了。当她做线上实验时,安装率也上升了。但是,当她做审议会议的时候,有人指出日活跃用户数下降了5%。小组没有上线这个模型。Alice比较失望,但是现在认识到做这个决定是基于很多准则的,而只有一部分是可以使用ML来优化的。
事实是真实世界不是地下城与龙:没有‘血量’表示你产品的健康程度。团队必须收集信息作出统计以尝试高效的预测出系统将来会成为什么样子。他们需要关注约定;日活跃用户数,30日活跃用户数,收益,广告商的投资回报。这些可以在自己系统里面使用A/B测试衡量的指标只是长期目标的一个间接衡量,既要满足用户需求,还要用户量的增长,满足合作方的要求,多赚取收益。
当左右指标都上升(至少不降低)时,最容易做决定了。如果团队要在复杂的机器学习算法和简单的启发式方法中选择,如果简单启发式方法能够在这些指标中做的更好,就应该选择它。而且,对于所有可能的指标之间也没有明确的优先级。考虑下面两个场景:
实验 | 日活跃用户数 | 日收益 |
---|---|---|
A | 1 百万 | $4 百万 |
B | 2 百万 | $2 百万 |
如果当前系统是A,那么团队不可能转向B。如果当前系统是B,那团队不可能转向A。这可能和理性的行为是矛盾的。但是,改变指标后预测能不能成功不好说,因此存在巨大的风险。每一个都存在着风险。而且没有哪个指标可以说是最终的,“我的产品5年后是什么样子呢”?
个人来讲,另一方面倾向于可以直接优化的目标。大多的机器学习工具也倾向于这种情况,工程师也能够提取稳定特征。多目标学习问题从开始就强调这个问题。例如,可以针对每个指标建立一个有有约束的问题,之后将对于多个指标的问题结合起来一起优化。但是,并不是所有指标都是可以形成机器学习的目标函数。如果一个文档被点击了,或者一个APP被安装,是因为它们刚好被展示出来了。而且还很难找到为什么用户会访问你的网站。要对一个网站做整体的预测,这是很难的,就像计算机视觉和自然语言处理一样。
Rule #40: 使用简单模型做集成
使用原始数据并直接将内容进行排序,使用这种方式的模型都容易理解和调试。然而,如果讲这些模型集成起来效果会更好。为了尽可能保持简单,集成模型要么所有的输入是其他模型的输出,要么都是原始特征,最好不要两种都存在。而且要能够对这些基模型一起训练,否则会导致差的结果。
只将基模型的输出作为输入的集成最好使用简单的模型。这样也对集成模型性质有保证了。例如,基模型取得了增长,最起码不能集成之后的结果出现下降的情况。最好就是基模型可以某种意义上的解释,以便于基模型的变化不至于把集成模型搞混乱了。这样可以保证,基础分类器的预测概率增长在集成模型的概率上不会出现下降的情况。
Rule #41: 当性能进入瓶颈期,找其他信息源,而不是捣鼓已经有了的信息
你已经添加了用户人口信息,也添加过了文档的词组信息。也经过了模板摸索(指前面的两部分),也已经对正则化进行调节了。但是依然没有在关键指标上看到多于1%的性能提升。
那是时候采取一些激进的做法,对针对不同的特征采取其它方式。如从不同维度对用户在过去一天一周一年中的使用信息进行统计并形成文档。或者使用深度学习模型。根据投入估计期望,并相应的调整投入的精力。作为一个工程项目,你必须对添加新特征所增加的复杂度和增加的收益之间进行权衡。
Rule #42: 不要期盼多样性、个性化,或者相关性和受欢迎程度相关
追求多样性意味很多东西,需要种类多样的内容来源。个性化意味着每个用户都有各自的结果。关联性意味着对一个特定的查询须有特定恰当的结果。因此这三个属性和普通的共性是不同的。
还要一个问题,这种共性很难被打破。
如果你的系统正在度量点击、滞留时长、播放量、分享量等指标,其实你真正的是在度量内容的流行程度。有的时候,团队尝试学习多样性的个性模型。为了实现个性化,他们添加了一些特征想实现系统能够实现个性化(代表用户兴趣的特征)或者多样性,但最终会发现这些特征所获得的权重远远的低于他们期望得到的。
这不是说多样性,个性化等没有价值。如前面指出的规则一样,你可以做一些后处理来增加多样性等。如果在长期目标指数得到了增长,那你就可以说多样性或者其他相关性是有价值的了。也可以继续使用你的后处理,或基于多样性等相关性来直接修改目标函数。
Rule #43: 其他人对不同的产品倾向相似,但你或许不同于此
google团队已经使用另一个产品的模型在另一个产品上,并取得了较好的结果。你可能就遇到了这么一群小伙伴。另一方面,我见过一些团队试图在独立产品中作出个性化特征。是的,按理讲应该是可行的的,但是现在看来,并不是这样。使用一个属性的原始数据来预测另一个属性的行为,有的时候是可行的。要记住,即使知道一个用户在另一个属相上的历史行为对你来说都是有帮助的。
reference:
- http://feisky.xyz/machine-learning/resources/rules_of_ml.html
- Rules of Machine Learning: Best Practices for ML Engineering
机器学习规则:ML工程最佳实践----rule_of_ml section 3【翻译】的更多相关文章
- 机器学习规则:ML工程最佳实践----rules_of_ml section 1【翻译】
作者:黄永刚 机器学习规则:ML工程最佳实践 本文旨在指引具有机器学习基础知识的工程师等人,更好的从机器学习的实践中收益.介绍一些应用机器学习需要遵循的规则,类似于Google C++ 风格指南等流行 ...
- 机器学习规则:ML工程最佳实践----rules_of_ml section 2【翻译】
作者:黄永刚 ML Phase II: 特征工程 第一阶段介绍了机器学习的一个周期,为学习系统获取训练数据,通过有趣的引导设计指标,创建一个服务框架.在有了一个完整系统之后,就进入了第一阶段. 第二阶 ...
- android最佳实践的建议(翻译自android-best-practices)
Best practices in Android development Use Gradle and its recommended project structure 使用Gradle和其推荐的 ...
- 搭建Spring4+Spring MVC web工程的最佳实践
Spring是个非常非常非常优秀的java框架,主要是用它的IOC容器帮我们依赖注入和管理一些程序中的Bean组件,实现低耦合关联,最终提高系统可扩展性和可维护性,用它来辅助我们构建web工程将会感觉 ...
- (转)iOS 最佳实践
本文转自http://www.jianshu.com/p/b0bf2368fb95 感谢作者和译者 iOS最佳实践 iOS最佳实践 译者注 本文翻译自 futurice 公司的 iOS Good Pr ...
- CSS media query应用中的层叠特性使用最佳实践
media query是css3规范中引入的,它提供了一种responsive design的基础机制:浏览器在不同size的设备中将以不同样式展现网页,这就给一个网页能够适应不同device一种可能 ...
- 【机器学习】Google机器学习工程的43条最佳实践
https://blog.csdn.net/ChenVast/article/details/81449509 本文档旨在帮助那些掌握机器学习基础知识的人从Google机器学习的最佳实践中获益.它提供 ...
- 《C+编程规范 101条规则、准则与最佳实践》笔记
<C+编程规范 101条规则.准则与最佳实践> 0.不要拘泥于小节(了解哪些东西不应该标准化) * 与组织内现有编码规范一致即可 * 包括但不限于: - 缩进 - 行长度 - 命名规范 - ...
- 诗人般的机器学习,ML工作原理大揭秘
诗人般的机器学习,ML工作原理大揭秘 https://mp.weixin.qq.com/s/7N96aPAM_M6t0rV0yMLKbg 选自arXiv 作者:Cassie Kozyrkov 机器之心 ...
随机推荐
- server.htaccess 具体解释以及 .htaccess 參数说明
.htaccess文件(或者"分布式配置文件")提供了针对文件夹改变配置的方法. 即.在一个特定的文档文件夹中放置一个包括一个或多个指令的文件, 以作用于此文件夹及其所有子文件夹. ...
- ACdream 1127(Base Station-树状数组-2个约束条件)
Base Station Time Limit: 20000/10000MS (Java/Others)Memory Limit: 512000/256000KB (Java/Others) Subm ...
- Non-ASCII character '\xe8' in file xxx.py on line 8, but no encoding declared
使用网上某个python程序.编译时报错: File "xxx.py", line 8 SyntaxError: Non-ASCII character '\xe8 ...
- hdu 2604 Queuing (矩阵高速幂)
Queuing Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...
- IP地址的正则表达式写法
这里讲的是IPv4的地址格式,总长度 32位=4段*8位,每段之间用.分割, 每段都是0-255之间的十进制数值. 将0-255用正则表达式表示,可以分成一下几块来分别考虑: 取值区间 特点 正则写法 ...
- 修复EJBInvokerServlet漏洞
1600/invoker/EJBInvokerServlet(存在命令执行) 修复方案: # 删除接口 # 设置中间件的访问控制权限,禁止web访问 /invoker 目录 http://www.cn ...
- hdu1045 - 贪心,二分图
题目链接 左边白方格里放小球,满足同一行.列只有一个(被黑块隔开).问最多放多少个球. -------------------------------------------------------- ...
- php获取当前月份的前(后)几个月
//获取当前月份的前一月 function GetMonth($sign) { //得到系统的年月 $tmp_date=date("Ym"); //切割出年份 $tmp_year= ...
- 基本数据类型(list、tuple)
1.列表 1.1 定义 li=[1,2,3] 每个元素逗号隔开 list("abc") 迭代 列表是一个容器 => 任意类型 列表是有序的 => 索引 切片 步长 列表 ...
- es6 学习7 Set 和 Map 数据结构
Set 和 Map 数据结构 一.Set ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. const set = new Set([1, 2, 3, 4, ...