特征选择算法在微博业务应用中的演进历程

近年来,人工智能与机器学习的应用越来越广泛,尤其是在互联网领域。在微博,机器学习被广泛地应用于微博的各个业务,如Feed流、热门微博、消息推送、反垃圾、内容推荐等。

值得注意的是,深度学习作为人工智能和机器学习的分支,尤其得到更多的重视与应用。深度学习与众不同的特性之一,在于其能够对原始特征进行更高层次的抽象和提取,进而生成区分度更高、相关性更好的特征集合,因此深度学习算法还经常被叫作“自动特征提取算法”。由此可见,无论是传统的基础算法,还是时下最流行的深度学习,特征的选择与提取,对于模型最终的预测性能至关重要。另一方面,优选的特征集合相比原始特征集合,只需更少的数据量即可得到同样性能的模型,从系统的角度看,特征选择对机器学习执行性能的优化具有重大意义。

特征选择在微博经历了从最原始的人工选择,到半自动特征选择,到全自动特征选择的过程,如图1所示。我们将详细介绍微博在各个阶段的实践与心得。


图1 特征选择在微博的演进

人工选择


在互联网领域,点击率预估(Click Through Rate)被广泛地应用于各个业务场景,在微博,CTR预估被应用在各个业务的互动率预估中。对于CTR预估的实现,逻辑回归(Logistic Regression)是应用最多、最广泛而且被认为是最有效的算法之一。LR算法的优势在于提供非线性的同时,保留了原始特征的可解释性。LR模型产出后,算法人员通常会对模型中的权重进行人工审查,确保高权重特征的业务含义是符合预期的。为了提升LR算法的预测性能,业务人员与算法人员通常会根据对业务的理解,人工选择各类特征(基于内容的特征、基于用户的特征、基于环境和场景的特征等)或进行特征之间的组合。对特征进行人工选择的弊端显而易见,首先要求相关人员对业务场景有足够的熟悉和了解,通过自身的领域知识区分高区分度特征和低区分度特征。仅此一项就引入了太多的变数,不同人员对业务的理解不尽相同,很多时候人工选择具有主观性和局限性。再者,在人工特征选择完成后,需要整理相关数据进行重训练,从而验证新引入的特征对模型预测性能的提升是否有效,这是一个反复迭代的过程,期间会消耗大量的时间和精力。通常需要重复多次,才能选出少量高区分度的业务特征,由此可见,人工选择特征方法的性价比是相对较低的。

相关性


针对人工选择存在的问题,微博这几年开始引入自动化特征选择方法作为人工选择的辅助。首先尝试的是相关性法,即根据特征本身的相关性或特征与标签之间的相关性来对特征进行选取和过滤。方差法是特征自相关性的典型代表,通过计算特征自身的方差值,来反映特征的变化程度,方差趋近于零的特征基本上无差异,对于样本的区分起不到关键作用。因此,通过方差法,可以过滤掉区分性差的特征。既然特征的选取取决于其对标签区分的贡献,我们不如直接计算特征与标签之间的相关性来选取贡献大的特征,而丢弃掉贡献小(相关性小)的特征。在该类方法中,比较典型且应用广泛的有:皮尔森系数、卡方检验、互信息。方法的原理大同小异,考虑到卡方检验能够同时支持连续和离散特征,在微博我们采取了卡方检验对特征进行初步筛选。

降维法


传统的特征选择方法从方式上大致分为三大类,即相关性、包裹法和嵌入法。刚刚提到的根据特征与标签之间的相关性对特征进行选取的方法就是相关性法。在对包裹法和嵌入法进行尝试之前,为了能够详尽特征选择的方法,我们尝试利用降维的方式进行特征选择。从严格的意义讲,降维法不能叫作特征“选择”/“筛选”方法,因为降维法(如PCA、SVD)原理是将高维度特征压缩到低维空间中,压缩的过程中造成了信息的丢失和损失,却在低维空间保留(生产)了新的区分度更高的特征集合。所以降维法是对原始特征集合进行了变换和扭曲,生成了新的特征空间和集合。降维法的优点显而易见,即无需用户干预,自动对特征空间进行变换和映射,生产高区分度的特征集合;缺点是其在低维空间生产的特征不具有可解释性,新的特征集合对业务人员和算法人员来说是不可读的,无业务意义的。这个特性与后文提及的通过DNN来提取特征有相似之处。

模型倒推法


前面提到特征选择的三大法宝,即相关性、包裹法和嵌入法。鉴于包裹法与嵌入法都是通过模型训练效果来反推特征的选取与过滤,微博将这两种方法进行了统一的尝试与实践。该类方法的思路是先根据现有的特征集合和数据,对模型进行训练,然后根据模型的效果(如AUC、准确度等)和特征自身的权重大小来对特征进行选取。如对于包裹法,比较经典的方法是逐步递减原始特征的集合,观察所训练模型效果的变化,当模型效果出现显著下降时,即认为下降前一组的特征集合是最佳候选集合。对于嵌入法来说,比较典型的方法是通过L1或L2正则的特性,通过模型训练得到各个特征的权重,如L1具备低绝对值碾压特性,即对于权重较低的特征,直接将其权重截断为零,这样保留下来的即认为是具有高区分度的特征集合。这类选择方法基于模型本身对特征进行过滤,因此选取出的特征集合有效性很好,但是该类方法同样存在明显的弊端:首先,方法本身看上去似乎相互矛盾,特征选择的目的是为了训练出预测性能更好的模型,而这里却通过先进行模型训练,再做特征选择,总有一种“鸡生蛋,蛋生鸡”的感觉。再者,通过模型选取特征,需要对模型进行训练和评估,相当于每次都把机器学习流程迭代一遍,尤其是包裹法,需要不断的剔除可疑特征、重训练的过程,在模型效果大幅降低前,经过数轮的计算和迭代。其次,有一个很重要的细节经常被忽略,即用于特征选择参与模型迭代训练的数据,不能参与最终的(特征选择完成后的)模型训练,否则会带来臭名昭著的过拟合问题,道理显而易见。

GBDT特征选择


前文提到深度学习又叫“自动特征提取算法”,天生自带特征提取属性。但在介绍“自动特征提取算法”之前,我们有必要认识一下自动特征提取的前辈:GBDT(Gradient Boosting Decision Trees)。GBDT通过不断地拟合上一棵决策树的残差来不断逼近目标值,决策树的信息增益算法结合GBDT特别的组合结构,造就了其叶子节点天生的高区分度特性。通过将原始特征导入GBDT进行训练,再将得到的模型对原始数据进行预测,就得到了GBDT转换/映射后的叶子节点特征集合,再将这个叶子节点组成的特征集合导入其他算法(如LR)进行训练。GBDT的优点是特征自动选择,区分度高;缺点与PCA和后面的深度学习类似,即新产生的特征不具备可解释性。

深度学习


深度学习算法由神经网络衍生而来,主要是指具有不同网络结构(如用于图像特征提取的CNN卷积神经网络结构、用于时序相关的RNN循环神经网络,以及由全连接组成的DNN深度神经网络等)的深层神经网络。神经网络的每一层神经元都会根据上一层的输入做非线性激活,并将其输出作为下一层神经网络的输入,每一层神经元都可以理解为某一个层次的特征抽象,每一层网络都可以形成一个新的特征集合,这种天然的特性为我们进行特征选择提供了新的思路。通过构建深层神经网络,并将最后一个隐层的神经元集合作为特征抽象,后续可以接入各种分类算法,如LR、决策树、朴素贝叶斯等进行预测。


图2 特征选择效果对比


随着新技术的出现与成熟,微博在特征选择的演进上也与时俱进,在微博业务发展的不同阶段,曾经分别对这些选择方法进行实践与尝试,图2总结了不同特征选择方法对于模型预测性能的提升效果,仅供读者参考。

图2对比数据来自同一份数据集(特征选取与训练分开,各百万条样本)与同一组特征集合(118个原始特征),采用不同的特征选择方法对特征进行过滤、选择、提取。橘色曲线表示对原始特征进行特征选择后,不同特征选择方法保留的有效特征个数,如用GBDT进行特征选择后,仅仅留下44个有效特征。保留特征的个数主要取决于算法本身与业务人员的选择。如对于方差法、卡方检验等相关性排序法,需要业务人员和算法人员指定保留的特征个数;而像L1正则与GBDT,则完全由算法本身根据数据分布特点,来决定原始特征的去留。最后的DNN即深度学习,也是根据经验人为指定最后一层隐层的特征个数。蓝色曲线表示采用不同特征选择方法后,用另一份单独的数据集进行训练后的模型(LR模型)预测性能,我们这里用业界应用广泛的AUC(Area Under Curve)来衡量模型的有效性。方差法和卡方检验完全取决于特征本身及其与标签的相关性,因此提升幅度有限。正则化与GBDT等采用模型倒推的方法进行特征选取,因此预测性能有显著提升。深度学习能够在多个层次对特征进行抽象,最后一层隐层代表了特征的最高层次抽象,因此区分度最好。

本文首先介绍了不同特征选择算法的各自特点及其在微博业务应用中的演进历程,最后通过对比试验,给出了不同方法对于模型预测性能效果的提升,希望能够对读者有参考价值。

作者简介: 



吴磊,新浪微博算法平台高级工程师,主要负责以Spark为核心的大数据计算框架、机器学习平台的设计和实现。 


张艺帆,新浪微博算法平台算法工程师,主要负责微博个性化排序、推荐等模型的选择、优化;特征的处理与选择等。

本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》( 责编/郭芮 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c winform mysql类_C#连接MySQL数据库操作类

首先需要安装MySQL Connector Net 6.8.3然后在项目中引用MySQL Connector,如下图所示C#连接MySQL的操作类代码如下:public class MySQLHelper{private string db_host "localhost"; //数据库服务器private string db_port "3306";…

病历智能处理引擎的架构设计、实现和应用

作者简介:吴大帅,新屿算法工程师,曾供职于宅米网、新达达,从事系统架构设计、算法设计等工作。 李智慧,《大型网站技术架构:核心原理与案例分析》作者,从事大型网站、分布式系统、大数据方面的研…

Heron:来自Twitter的新一代流处理引擎应用篇

作者 | 吴惠君,吕能,符茂松责编 | 郭芮【导语】 本文对比了Heron和常见的流处理项目,包括Storm、Flink、Spark Streaming和Kafka Streams,归纳了系统选型的要点。此外实践了Heron的一个案例,以及讨论了Heron在这一年开…

2017 JavaScript 调查报告概述

本文转载自极光日报知乎专栏,地址:https://zhuanlan.zhihu.com/p/32260460简评:最近一份超过 23,000 名开发者参与的关于 JavaScript 的调查报告 - the State of JavaScript 2017 出炉了。内容包含框架的流行趋势、薪资水平等等,感…

python动态_python --动态类型

动态类型(dynamic typing)是Python另一个重要的核心概念。我们之前说过,Python的变量(variable)不需要声明,而在赋值时,变量可以重新赋值为任意值。这些都与动态类型的概念相关。动态类型在我们接触的对象中,有一类特殊的对象&…

微博热点事件背后数据库运维的“功守道”

作者 | 张冬洪责编 | 仲培艺【导语】 微博拥有超过3.76亿月活用户,是当前社会热点事件传播的主要平台。而热点事件往往具有不可预测性和突发性,较短时间内可能带来流量的翻倍增长,甚至更大。如何快速应对突发流量的冲击,确保线上服…

sql devalop连接mysql_SQL-Mysql表结构操作

一 前言本篇内容是关于 基本的数据库操作,建表,表结构修改等内容;学习本篇的基础是知识追寻者以前发布的文章:公众号:知识追寻者知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)二…

云计算平台2017年盘点——真正成为新技术新应用的基础架构

作者简介:吴凯,北京云途腾科技有限责任公司首席运营官,具有20年的IT和软件服务行业管理经验,历任多家著名外资及民营IT企业的核心高级管理职位,是中国云计算专家委员会专家委员,中国开源云联盟及云计算开源…

Spark SQL在100TB上的自适应执行实践

作者:汪愈舟 俞育才 郭晨钊 程浩(英特尔),李元健(百度)责编:钱曙光(qianshgcsdn.net)Spark SQL是Apache Spark最广泛使用的一个组件,它提供了非常友好的…

分包组包 北斗通信_蓝牙mesh底层传输层(分包和组包)

当传输大于15字节的上层传输层PDU时,底层传输层就需要对上层传输层PDU进行分包并重新组包为了减少底层传输层包的数量,这里使用块应答机制。问题:怎么通过块应答机制减少底层传输层包的数量?上层传输层需要分成两个底层传输层PDU的…

别人在忙挖矿,京东架构师却悄悄用区块链搞了件大事

作者介绍: 赵铭,京东商城区块链研发工程师, 主要从事区块链底层研究设计工作,主攻方向为分布式账本结构; 孙海波,目前担任京东Y事业部供应链研发负责人,负责的业务包括订单履约、库存优化、采购…

用sklearn mysql_Sklearn之Linear Regression

import matplotlib.pyplot as pltimport numpy as npfrom sklearn import datasets, linear_modelfrom sklearn.metrics import mean_squared_error, r2_score# 加载糖尿病数据集diabetes datasets.load_diabetes()# 只使用一个特征diabetes_X diabetes.data[:, np.newaxis, …

2017年30个惊艳的Python开源项目

【摘要】本文来自Mybridge,介绍了过去一年里30个惊艳的Python开源项目。点击阅读原文每一个都可以在GitHub上看到更为详细的内容。以下是译文。在过去的一年里,Mybridge AI 比较了近15000个开源Python项目,选择了前30名(概率只有0…

mycloud php5 mysql_mycloud 刷debian乐趣之-owncloud 私有云+芒果云的安装

既然刷了debian了,那么就可以安装很多软件了。这篇文章,我打算讲讲大众化的最初始的配置方案。具体后续优化,例如memcached,https等,可以参考官方文档。第一步、安装apache,#当然,你如果喜欢nginx,也可以的…

关于区块链,程序员需要了解什么

作者 | 曹严明如果说比特币是对传统货币的一种颠覆,那么比特币的基础技术——区块链则是对传统编程范式的一种颠覆。区块链技术被看作是一次Paradigm Shift。也许很多人对 “颠覆”这种说法不以为然,因为现在这个词已经被用滥了(如今哪个好一…

java两个矩阵相乘_java计算两个n阶矩阵相乘

自己是个新手,研究java数据结构,看到两个n阶矩阵相乘的题目,自己就试着写了一个简单的demo,哪里有不好的地方,也希望大家多提提意见,直接上代码了:package com.shujujiegou01;public class JuZh…

混合云异军突起 英特尔的全“芯”体验为企业保驾护航

近几年,混合云在IT界异军突起,各大厂商纷纷布局混合云市场,企业更愿意将数据存放在私有云中,但是同时又希望可以获得公有云的计算资源,在这种情况下混合云被越来越多的采用,它将公有云和私有云进行混合和匹…

搭建java_搭建JAVA环境

1 jdk的获取jdk的获取路径有很多这种,我把我网盘上存的分享个大家,大家直接下载就可以了。http://pan.baidu.com/s/1pLsJLtp(这是一个公开链接,直接打开下载就可以了)。2 jdk的安装(1)单击刚刚下载的安装文件将会弹出欢迎对话框。(2)点击“下…

java数组下标越界_BUG-并行流与数组下标越界-思考与总结

BUG-并行流与数组下标越界-思考与总结今天线上环境报异常,发现了一个之前没注意过的问题,记录一下。1. 异常信息异常信息如下:Caused by: java.lang.ArrayIndexOutOfBoundsExceptionat java.lang.String.getChars(String.java:826)at java.la…

IDC敲黑板啦:未来企业IT以混合云为主

数字化是企业转型的必由之路数字化技术正在融入企业的血液里。IDC 认为,基于第三平台的 46 技术是企业在数字化转型过程中的关键要素:• 4 是指以云计算、大数据、社交商业与移动技术为代表的第三平台技术。• 6 则是基于第三平台智商的 6 大创新加速器。…