作者:黄永刚

Practical machine learning tricks from the KDD 2011 best industry paper

原文链接:http://blog.david-andrzejewski.com/machine-learning/practical-machine-learning-tricks-from-the-kdd-2011-best-industry-paper/

研究机器学习的论文通常倾向于提出一种新理论或算法,对于问题背景、数据表示、特征工程等往往是只言片语,然而这些东西对于读者的理解和算法的重现是非常重要的。鉴于论文目的和格式的约束,只能用有限的文字去描述更核心通常比较抽象的思想。

因此,对于在工业系统中应用论文中的方法所必须的实现细节,论文中很少进行描述。机器学习的这些方面,被称为‘平民智慧’,大多数来自同事间的讨论、博客、论坛、开源库等一手的经验之谈。

不同于以上的描述,有些会议设有专题对工业界的方法进行追踪,提出了很多能够提高机器学习在实践应用中效率的见解。我们下来要介绍的这篇文章,它来自于goolge荣获KDD 2011 最佳工业论文,关于检测广告作弊。

Detecting Adversarial Advertisements in the Wild \

D. Sculley, Matthew Otey, Michael Pohl, Bridget Spitznagel, \

John Hainsworth, Yunkai Zhou \

http://research.google.com/pubs/archive/37195.pdf

看到这个主题,第一个想法,这不就是机器学习界的“hello world”吗!随便找一本相关的书籍或者教程里面都有,对于正样本集和负样本集分别训练一个朴素贝叶斯,就OK了。很显然,这和Google的应用场景相差甚远,这篇文章阐述了现实当中的许多挑战,是google商业应用需要解决的关键问题。

这篇文章提出了很多不同的方法和技巧,我在这里只简单的描述文章中的重点,我极力鼓励对此感兴趣的读者直接去查看他们的论文1和演示文稿[^slide]。

2:https://www.eecs.tufts.edu/~dsculley/papers/adversarial-ads.pdf

http://www.eecs.tufts.edu/~dsculley/papers/Detecting_Adversarial_Advertisements.pdf


1. 分类(Classification)

机器学习的核心方法是分类:这个广告展示给用户是不是OK?这里有一些源代码关于机器学习的核心方法3

方法集成

获得Netflix奖的方法、微软的Kinect及IBM Watson,这些系统都使用了集成方法,将许多不同模型产生的结果集合起来做出最终的预测。这个方法在当前众多的方法中可以称得上是最省心的方法了,如果你的目标是预测精确度,至少也应该考虑使用集成的方法。

只执行高可靠的预测

衡量预测的不确定性并适当的对系统的执行条件进行调整是非常必要的。在这个应用中,需要做出合理的决策,因此,当预测结果可靠性不高时,系统应该不执行相应的动作。

找出大量的特征,使用L1正则进行特征选择

特征表示是机器学习设计中的关键问题,它涵盖了非常广的范围:对于广告有表述的用词、表述主题、链接到的网站、链接落地页、广告商等等,会产生大量的特征,使用L1正则强制稀疏化特征集,最终得到较少的与结果关联性强的特征。

特征降维

处理高维特征这是十分实用的方法,通过降维将特征映射到低维空间。

使用排序来处理不均衡问题

这种极不均衡数据问题是典型的监督式分类中的疑难杂症,广告中大多是正常数据,只有极少量是异常数据[此类问题十分常见]。这类问题有很多的处理方法,在这里他们通过将这个问题转化为排序问题,获得了性能上的改进。恶意广告应该比正常广告获得更高的排名。

使用分类器的级联

还是不均衡问题,对于负样本中也存在不同的种类,如恶意软件刷点击、假冒伪劣商品等。这里同时采用了两阶段的分类。第一阶段判断正常或者异常?第二阶段,如果这个广告属于异常,是不是属于异常A,是不是异常B,以此类推。


2. 可扩展性、工程实现、操作

不同于为了发论文所写的实验性软件,线上的机器学习系统是有工程和商业背景。系统的可扩展性、可用性、可靠性、可维护性也十分重要。

MapReduce:预处理(map), 算法训练(reduce)

稍微有些意外,他们发现性能瓶颈是来自于从磁盘加载数据和提取特征的阶段。因此,他们使用多个map作业并行执行,用一个reduce来做随机梯度下降分类训练(Stochastic Gradient Descent, SGD)

部署监控

为了使系统始终如一的工作,需要监控一些数据,以便于一些异常出现的时候能够做进一步的研究,如:

- 持有数据上的precision/recall

- 输入特征的分布

- 输出值的分布

- 输出类别的分布

- 人工定期评价系统质量

丰富模型对象

在机器学习的论文中,一个预测模型经常归结于数学思想即学习到的特征权重向量。然而,在软件工程实践中,作者认为将“模型对象”拓展更广泛的范围会十分有用,例如包含特征转换、概率校准、训练超参等。


3. 人工经验

基于商业考量,提出通用的解决方法需要人类专家的参与。

有效的利用专家经验

对于界限模糊的情况或比较难分辨的情况,人工专家手工进行标注,然后采用主动学习策略识别这些高价值数据。他们为人类专家提供了可以获取信息的用户接口,以便发现新出现的异常威胁。

允许人为的编制规则

相比于全自动化的机器学习方法,有的时候人类才是知道如何做才最好。因此,他们允许专家们在适当的时候,编制一些规则进去。

人为评估

专家的判断也不能理解为事情的本质,专家提供的标签也会因人为因素产生错误,不同的专家对于各个类别理解的也不一样。为了调整这种不确定性, 请多个专家对同一事物进行判别来调整标签的可信度。如果有兴趣可以参考这里4.

最后,他们阶段性进行非专业评估以确保系统对于大众来说工作正常。用户满意是最终目标,如果进行量化衡量就完美了。

KDD 2011 最佳工业论文中机器学习的实践方法-翻译的更多相关文章

  1. 网络安全中机器学习大合集 Awesome

    网络安全中机器学习大合集 from:https://github.com/jivoi/awesome-ml-for-cybersecurity/blob/master/README_ch.md#-da ...

  2. 【论文翻译】NIN层论文中英对照翻译--(Network In Network)

    [论文翻译]NIN层论文中英对照翻译--(Network In Network) [开始时间]2018.09.27 [完成时间]2018.10.03 [论文翻译]NIN层论文中英对照翻译--(Netw ...

  3. VM 操作系统实例化(基于 KVM 的虚拟化研究及应用--崔泽永(2011))的论文笔记

    一.VM操作系统实例化 1.建立虚拟磁盘镜像 虚拟磁盘镜像在逻辑上是提供给虚拟机使用的硬盘, 在物理上可以是 L inux系 统内一普通镜像文件, 也可以是真实的物理磁盘或分区. 本方案设计中将虚拟机 ...

  4. Batch Normalization原理及其TensorFlow实现——为了减少深度神经网络中的internal covariate shift,论文中提出了Batch Normalization算法,首先是对”每一层“的输入做一个Batch Normalization 变换

    批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanish ...

  5. Scikit Learn: 在python中机器学习

    转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...

  6. Microsoft Dynamics CRM 2011的组织服务中的RetrieveMultiple方法(转)

    本篇文章,介绍Microsoft Dynamics CRM 2011的组织服务中的RetrieveMultiple方法. RetreiveMultiple方法,用于获取实体的多个实例,该方法的签名如下 ...

  7. Google关于Spanner的论文中分布式事务的实现

    Google关于Spanner的论文中分布式事务的实现 Google在Spanner相关的论文中详细的解释了Percolator分布式事务的实现方式, 而且用简洁的伪代码示例怎么实现分布式事务; Pe ...

  8. CIFAR和SVHN在各CNN论文中的结果

    CIFAR和SVHN结果 加粗表示原论文中该网络的最优结果. 可以看出DenseNet-BC优于ResNeXt优于DenseNet优于WRN优于FractalNet优于ResNetv2优于ResNet ...

  9. 《Python机器学习及实践:从零开始通往Kaggle竞赛之路》

    <Python 机器学习及实践–从零开始通往kaggle竞赛之路>很基础 主要介绍了Scikit-learn,顺带介绍了pandas.numpy.matplotlib.scipy. 本书代 ...

随机推荐

  1. SNMP学习

    http://blog.sina.com.cn/s/blog_4502d59c0101fcy2.html 简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议.在1988年被制定,并被In ...

  2. 洛谷——P2615 神奇的幻方 【Noip2015 day1t1】

    https://www.luogu.org/problem/show?pid=2615 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之 ...

  3. Linux路由表的抽象扩展应用于nf_conntrack

    思想 标准IP路由查找的过程为我们提供了一个极好的"匹配-动作"的例程. 即匹配到一个路由项.然后将数据包发给该路由项指示的下一跳.假设我们把上面对IP路由查找的过程向上抽象一个层 ...

  4. UVa 10954 Add All 贪心

    贪心   每一次取最小的两个数,注意相加的数也要算' #include<cstring> #include<iostream> #include<cstdio> # ...

  5. SVN管理工具的使用(实习第9天)

    最后就是我进行提交代码的时候要记得写注释,自己写了那些方法要标明,或者自己修改了哪些功能也要表明.不然我会被骂的. 2>代码冲突解决的问题: 服务器上的代码跟自己代码改动的地方不同 这种情况比较 ...

  6. jsp页面中自定义标签的小演示

    在实习期遇到公司的pg自定义标签了,同事要我自己自学一下 自定义标签是用户定义的JSP语言元素.当JSP页面包含一个自定义标签时将被转化为servlet.JSP标签扩展可以让你创建新的标签并且可以直接 ...

  7. extjs Combox 调用数据

    1方法一 从 json获取 var typeStore = new Ext.data.Store({                 proxy : new Ext.data.HttpProxy({u ...

  8. 获取当前最上层controller

    - (UIViewController *)topViewController { UIViewController *resultVC; resultVC = [self _topViewContr ...

  9. pandas groupby 分组操作

    最一般化的groupby 方法是apply. tips=pd.read_csv('tips.csv') tips[:5] 新生成一列 tips['tip_pct']=tips['tip']/tips[ ...

  10. Pycharm在创建py文件时,如何自动添加默认文件头注释?

    PyCharm是一款很好用的编写Python工程的IDE,用PyCharm创建一个Python文件或者向工程添加一个.py文件时,为了更好的使所编写的代码在各操作环境更好的运行,我们往往需要在.py文 ...