原文参考:https://developers.google.com/machine-learning/rules-of-ml/
第一次阅读,大多是翻译,少部分是自己的思考,随着学习的进行,会逐渐更新一些理解
1 常见术语
- 实例(Instance):将要对其进行预测的事情。例如,实例可能是一个网页,我们要将其归为“关于猫的”网页或者“不是关于猫的”网页。
- 标签(Label):预测任务的答案或结果。无论是机器学习系统的答案或结果,还是训练数据的答案或结果,都可以称为标签。例如,将网页标记为“关于猫的”。
- 特征(Feature):预测任务中实例的属性。例如,网页可以有“包含词汇‘猫’”的特征。
- 特征栏(Feature Column):一组相关的特征,如用户所有可能国籍的集合。在同一个样本的同一个特征栏中可能有一个或多个特征。类比:namespace、field
- 样本(Example):一个实例(+特征)+ 一个标签。
- 模型(Model):模型是预测任务的数学表达形式(感觉可以抽象为函数)。先通过样本训练模型,而后利用模型对数据做出预测。
- 指标(Metric):关于预测的一系列数字,可能需要被优化。
- 目标(Objective):模型经过优化,想要达到的指标。
- 工作流(Pipeline):围绕机器学习算法的基础架构。包含以下过程:从前端搜集数据、从数据选取训练数据、训练模型以及使用模型等过程。
- 点击率(Click-through Rate):对广告链接的点击次数占浏览次数的百分比。
2 概述
如何做出伟大的产品:
像伟大的工程师,而不是像伟大机器学习专家那样,去学习。(多从工程实践中总结经验)
特征选择可能比算法更重要,注重功能实践
- 确保工作流是稳定可靠的
- 树立合理目标
- 用简单的方式添加特征
- 工作流如何持续保持稳定
阶段一:如何构建一个工作流
不要害怕发布一个没有用到机器学习工作流
第一个模型要简单,但是基础架构要正确
1,构建前要确定:
- 如何得到样本
- 如何制定标准
- 如何将模型集成到应用程序中。在线/离线预计算
2,选择简单的特征:
- 特征选择正确可应用
- 模型能够学习到合理的权重
- 特征正确应用到服务器模型(也就是生产环境的模型)中
独立于机器学习来测试架构流程
不仅需要确保基础架构的可测试性,还需要确保pipline的learning部分是封装好的,比如测试包括模型相关的部分和模型之外系统的部分:
- 测试输入到算法中的数据,检查特征
- 测试模型在训练算法之外的运行情况
机器学习的一个特点就是不可预测性。因此,必须确保在训练和实际运行中创造样本的代码能被测试,并且在实际运行中始终使用同一个固定的模型。
复制工作流时留意丢失的数据(暂时不太理解)
将启发规则转化为特征,或者在外部处理它们
机器学习系统解决的问题通常都不是新问题,而是对已有问题的进一步优化。即,应该充分利用已有的规则或者启发式规则。以下是几种启发式规则可以被使用的方式:
- 用启发式规则进行特征预处理。 如果特征非常棒,可以采用这个方法。比如,在垃圾邮件过滤中,如果用户设置了黑名单,就不用重新学习“黑名单”的特征,这种方法在二元分类(binary classification)任务中很有用(还没用到)。
- 用启发式规则创建特征。 直接从启发式规则中创建特征可能很方便。比如,若要用启发式规则为某个查询结果计算相关度,可以把分数作为特征。接下来,用机器学习的方法把这些值离散化或者加入其他特征,但是要从启发式方法生成的原始数据入手。
- 挖掘启发式方法的原始输入数据作为特征。比如,对于某款 app,若存在一个启发式方法,其包含安装量、文本字符数和当天日期等要素,可以考虑将这些原始信息单独作为特征使用。
- 修改标签。当发觉启发式方法捕捉了一些信息,而这些信息没有包含在标签中,这时可以考虑修改标签。比如,如果想让下载量大,同时对内容质量也有要求,那么可以用 app 的平均评级乘以标签来解决问题。(也就是说标签可以根据要求而修改)
3, 设置监控
几乎所有系统都要设置良好的监控报警,最好设置一个仪表板页面(dashboard page)。
注意关注定时更新
要留意系统收益、新鲜度随着时间的变化,特别是在添加或移除特征栏的时候,需要尤为注意。
发布模型前发现问题
确保模型在留存数据上运行合理
注意隐藏性故障
对关键数据的统计信息进行监控,并且周期性对关键数据进行人工检查
为特征栏指定负责人并记录文档
4,第一个目标
不要过于纠结该优化哪个目标
指标非常多,肯能相互有影响。比如,关心点击次数、停留时间以及每日活跃用户数。如果仅优化了点击次数,通常停留时间也增加了。
选择一个简单、可观测、可归类的评估指标作为第一个目标
随着对老系统和新的机器学习系统的分析,目标可能会变化。
因此,在简单的机器学习目标上训练,并创建一个“决策层”,在上面增加额外的逻辑(越简单越好)来形成最后的排序。(多目标融合?)
- 最容易建模的是那些可以直接观察并可归属到系统的某个动作的用户行为
- 最开始避免对间接效果建模
- 不要试图猜测用户对产品的喜恶
从容易解释的模型入手会让调试过程更加容易
在策略层将垃圾信息过滤和质量排名分开
有规律可循会让发布者钻空子:须考虑到要生成的特征会经常性的改变;可能会输入很多明显的规则到系统中,但要保证模型每日更新;同时,要重点考虑内容创建者的信誉问题。
阶段二:特征工程
随着第一阶段的结束,我们已经有了一个端对端的系统,训练数据–>系统–>评价指标。此时,可以纳入尽可能多的有效特征,并进行组合,在这个阶段,所有的评估指标仍然会上升。
持续迭代
- 不断想到新特征。
- 不断调整特征组合方式。
- 不断调优目标。
在开始的模型中,优先使用直接观测或收集到的特征,而不是学习出来的特征
- 学习出来的特征可能会存在一些未知的问题,虽然可能也很有用
探索使用可以跨场景的内容特征
这里我理解是从类似场景的特征拿到可以用的用户行为特征
阶段三:增速变慢、细化优化、做复杂的模型
随着第二阶段的结束,指标增长越来越难,此时必须要考虑更加复杂的机器学习