注:这是一份学习笔记,记录的是参考文献中的可扩展机器学习的一些内容,英文的PPT可见参考文献的链接。这个只是自己的学习笔记,对原来教程中的内容进行了梳理,有些图也是引用的原来的教程,若内容上有任何错误,希望与我联系,若内容有侵权,同样也希望告知,我会尽快删除。这部分本应该加上实验的部分,实验的部分在后期有时间再补上。
可扩展机器学习系列主要包括以下几个部分:
概述
- Spark分布式处理
- 线性回归(linear Regression)
- 梯度下降(Gradient Descent)
- 分类——点击率预测(Click-through Rate Prediction)
- 神经科学
五、分类——点击率预测(Click-through Rate Prediction)
1、在线广告概述
1、典型的大规模机器学习问题
在线广告是典型的大规模机器学习问题,主要是因为:
- 在线广告问题很复杂,需要收集大量的数据。
- 数据量巨大:
- 大量的用户在使用互联网,产生了大量的数据
- 很多的带标签的数据
2、在线广告的参与者
在在线广告的活动中,主要包括如下的一些参与者:
- 出版人(网站的拥有者),如NYTime,Google,ESPN。指的是将广告展示在他们的网站上以获得利润的人。
- 广告商。
- 媒介,如Google,Microsoft,Yahoo。连接网站拥有者与用户。
- 用户。
用户是我的补充,通常再上述的参与者中,出版人和媒介属于同一个。
3、为什么广告商要付钱
通常,一个网站上的广告会产生如下的两种的效果:
- 展示:让某些信息触达到目标用户
- 效果:在展示的同时,用户会产生一些行为,如点击,购买等等
因此,展示广告的同时为商家带来了利润。
4、在线广告计算的核心问题
在线广告是一个多方博弈的过程,参与者包括广告商,平台,受众,关系如下图所示:
平台连接着广告商与受众(上图中的蓝色),因此如何高效地连接广告商与受众称为一个重要的问题,问题可以表述为:预测一个用户对于每一条广告的点击概率,并且选择最大概率的广告。数学过程可以表述为估计如下的概率:
P(click∣predictivefeature)
即在给定预测的特征的条件下预测用户的点击概率。其中,预测特征包括:
- Ad’s historical performance
- Advertiser and ad content info
- Publisher info
- User info (e.g., search / click history)
5、特征数据的特点
平台每天可以获取巨大的量的展示数据,但是这些数据通常具有如下的特点:
- 高维(high-dimensional)
- 稀疏(sparse)
- 有偏的(skewed):只有少数的广告会被点击,大量是未被点击的数据,正负样本极不均衡。
6、在线广告的目标
在上述的广告计算的核心问题中,需要计算一个概率,这个概率具体可以表述为:
P(click∣user,ad,publisherinfo)
2、线性分类器和Logistic回归
1、分类(Classification)
分类问题(Classification)是指通过训练数据学习一个从观测样本到离散的标签的隐射,分类问题是一个监督学习问题。典型的例子有:
- 垃圾邮件的分类(Spam Classification):观测样本是邮件,标签是每个邮件是否是垃圾邮件({spam, not-spam})。这是一个二分类问题,目标是根据这些带标签的样本,预测一个新的邮件是否是垃圾邮件。
- 点击率预测(Click-through Rate Prediction):观测样本是user,ad和publisher的特征,标签是是否被点击({not-click, click})。这是一个二分类问题,目标是根据这些带标签的样本预测一个新的user-ad-publisher三元组是否会被点击。
2、线性分类器(Linear Classifier)
对于线性回归,假设有特征:
xT=[1x1x2x3]
可以得到如下的线性映射:
y≈y^=∑i=03wixi=wTx
对于线性分类器,假设有同样的特征,此时,我们通过对线性映射的输出加上阈值(threshold):
y=∑i=03wixi=wTx⇒y^=sign(wTx)
假设此时得到权重向量:
wT=[−13−4]
则此时,可以得到:
xT=[123]:wTx=−7xT=[121]:wTx=1xT=[150.5]:wTx=12xT=[132.5]:wTx=−2
假设,决策的规则为:
y^=sign(wTx)
则此时:
- y^=1:wTx>0
- y^=−1:wTx<0
- 决策边界:wTx=0
决策边界如下图所示:
3、线性分类器的评价
在回归问题中,预测值和标签是连续值,因此在评价中,计算的是标签与预测值之间的接近程度,可以使用均方误差(Squared Loss)。但是在分类问题中,类别是离散值,可以使用0-1损失(0-1 Loss)。
0-1损失是指若预测正确,则实行0惩罚,否则实行1惩罚。0-1损失的形式与图像如下所示:
其中,y∈{−1,1}。
4、线性分类器的学习方法
假设现在有n个训练样本,其中x(i)表示的是第i个训练样本,我们的目标是找到合适的w,使得在所有的训练样本上的0-1损失最小,即:
minw∑i=1nl0/1(y(i)⋅wTx(i))
问题:0-1损失函数是很难优化的,因为0-1损失函数是一个非凸的函数。
5、0-1损失函数的近似表示
对于上述的0-1损失函数,由于其是一个非凸的函数,因此很难对其进行优化,解决的办法是利用一些凸函数近似表示0-1损失函数,常见的分类模型及其损失函数如下所示:
- SVM:hinge损失
- Logistic回归:logistic损失
- AdaBoost:exponential损失
各种损失函数如下图所示:
其中,Logistic损失(Logloss)为:
llog(z)=log(1+e−z)
6、Logistic回归的优化
在Logistic回归中,我们需要在训练数据集上得到映射,以使得其在训练集上的logistic损失最小,即:
minw∑i=0nllog(y(i)⋅wTx(i))
上述的最优化函数是一个凸函数,可以使用梯度下降法进行求解,更新规则为:
wi+1=wi−α▽f(w)
其中,α是学习的步长,▽f(w)是梯度,具体形式如下:
▽f(w)=∑j=1n[1−11+exp(−y(j)wTix(j))](−y(j)x(j))
在logistic损失中可以加入L2正则,用以约束模型的复杂度:
minw∑i=1nllog(y(i)⋅wTx(i))+λ∥w∥22
3、Logistic回归的概率解释
上述从损失函数的角度对Logistic回归进行了解释,概率计算的目标是得到条件概率,即:
P(y=1∣x)
例如,通过天气,云量和湿度来预测下雨的概率:
- P[y=rain∣t=14∘F,c=LOW,h=2%]=0.05
- P[y=rain∣t=70∘F,c=HIGH,h=95%]=0.9
1、将输出转换成概率
基于条件概率的模型的目标是需要计算P(y=1∣x),是否可以通过线性模型的值表示条件概率,即:
P[y=1∣x]?=wTx
线性模型返回的是一个实数,但是概率值是有范围的,其范围在0到1之间,如何将线性模型的返回结果压缩到0到1之间,可以使用logistic函数,也称为sigmoid函数。此时,条件概率模型为:
P[y=1∣x]=σ(wTx)
其中,σ称为sigmoid函数,其形式为:
σ(z)=11+exp(−z)
其图像为:
sigmoid函数将实数映射到区间[0,1],而Logistic回归就是利用sigmoid函数构建条件概率模型:
- P[y=1∣x]=σ(wTx)
- P[y=0∣x]=1−σ(wTx)
为了方便,假设标签y∈{0,1}
2、利用概率值进行分类
为了进行类别的预测,需要将概率转换成在{0,1}上的值。为此,我们可以通过对概率值设置一个阈值(threshold)将其进行分类,默认的阈值是0.5,如果概率值大于0.5,就将其归类为1。对于上述预测下雨的概率问题,则:
- P[y=rain∣t=14∘F,c=LOW,h=2%]=0.05y^=0
- P[y=rain∣t=70∘F,c=HIGH,h=95%]=0.9y^=1
- 当σ(wTx)=0.5时,对应着决策边界wTx=0。
3、设置不同的阈值
对于垃圾邮件的分类应用,可以对其建模为:
P[y=spam∣x]
对于垃圾邮件的检测问题,有两种预测错误的情况:
- 将非垃圾邮件判定为垃圾邮件(False Positive, FP)
- 将垃圾邮件判定为非垃圾邮件(False Negtitive, FN)
对于垃圾邮件的检测问题来讲,将非垃圾邮件判定为垃圾邮件比将垃圾邮件判定为非垃圾邮件带来的后果更加严重,因为这样会错过一些比较重要的邮件,因此在这样的请款下,为了保守,我们可以设置大于0.5的阈值。
4、ROC曲线
ROC曲线是根据FPR(False Positive Rate)和TPR(True Positive Rate)画出来的一条曲线,其中,横轴为FPR,纵轴为TPR。FP在上面已经介绍过,TP(True Positive)指的是将垃圾邮件判定为垃圾邮件。ROC曲线如下图所示:
上图中的虚线表示的是随机预测的情况,左上角的位置表示的是最好的情况,即没有将非垃圾邮件判定为垃圾邮件,而且垃圾邮件都被判定出来。通过调节阈值,我们可以得到这样一条曲线。
4、类别数据和one-hot编码
1、数值型数据和非数值型数据
在上述的线性回归以及logistic回归中,数据的形式通常是数值型的,下图中列举了一些数值型数据的情形:
还有一些非数值型数据的情形:
在广告的点击率预测中,有很多的特征是非数值型的数据,如:
- 用户特征:性别,国籍,职业······
- 广告商/平台特征:行业,位置······
- 广告/网站特征:语言,文本,目标受众······
2、非数值型特征的处理方法
通常有两种方法处理非数值型特征的机器学习问题,第一种是选择支持这些类型特征的机器学习方法,如
- 决策树(Decision Trees)
- 朴素贝叶斯(Naive Bayes)
第二种方法是将这些特征转换成数值型特征,这样便可以使用适用于数值型特征的学习方法来处理这些问题。
3、非数值型特征的分类
对于非数值型特征,主要分为以下两种:
- 类别特征(Categorical Feature)
- 序列特征(Ordinal Feature)
对于类别特征,通常包括两个或者多个类别,在类别之间没有内定的次序,如性别,国籍,职业,语言等等;对于序列特征,通常包括两个或者多个类别,在类别之间有明显的内定的次序,但是在类别之间没有固定的间隔,只是一种相对的次序,如常见的在调查问卷中的问题,如“你的身体是否健康:不好(poor),一般(reasonable),好(good),非常好(excellent)”。
4、非数值型特征转换为数值型特征
非数值型特征转换成数值型特征通常有如下一些处理的方法:
- 为每一个非数值型特征赋值。
如对于序列特征:
对于类别特征:
- 使用One-Hot-Encoding。
如下:
5、One-Hot编码的计算和存储
对于One-Hot编码,通常是由以下两步完成:
- 生成One-Hot编码的字典。
- 利用字典生成特征。
对于下面的例子:
第一步是生成One-Hot编码的字典,在特征的列表中一共有7种特征。此时,将所有的特征都转换为一个数字,如下所示:
对于上述实现的字典,其实在字典中每一个key代表的是具体的特征,而value则对应了在One-Hot编码中的下标,对于如下的数据:
对于数据A1,其第一个特征”mouse”在字典中的value为:
则在One-Hot编码的序列中,对应的下标为2的位置上标注为1,如下所示:
对于One-Hot编码生成的特征的表示方法通常是稀疏的,如上的One-Hot编码所示。在这样的情况下,存储这样的稀疏序列通常是比较浪费的,可以通过key-value的形式存储,如下:
A1=[(2,1),(3,1)]
这样,只存储了非零项。
5、Hashing策略
5.1、One-Hot编码存在的问题
上述的One-Hot编码的策略可以有效地转换离散型的特征,但是,One-Hot编码一个明显的缺点就是在转换后的One-Hot编码串会变得很长,总的长度等于离散特征的个数,若是离散特征的个数特别多的情况下,这个One-Hot串就会特别长。这样的模型如同“Bag Of Words”模型一样,在Bag Of Words中,通过词典的形式表示一篇文章,如下图所示:
对于One-Hot编码,主要存在两个问题:
- 不方便学习
- 计算成本较大
5.2、解决的方法
对于One-Hot编码存在的上述的问题,可以有如下的解决方法:
- 丢弃掉稀有的特征。这样的方法通常会丢弃掉一些有用的特征。
- 特征hash。
特征Hash是指利用hash的方法减少特征的维数。Hash表是数据查找中卓有成效的数据结构,Hash函数同样也是密码学中很重要的函数。对于Hash函数,是将一个离散型的特征映射到m个桶中,桶的大小比特征的类别要少。例如,取m=4,则:
则对应的上述的A1的特征表示为:
A1=[0011]
5.3、Hash方法的解释
特征Hash具有很好的理论性质:
- 特征Hash是One-Hot编码特征在一定条件下的内积的近似
- 很多的机器学习算法,包括线性回归,Logistic回归都可以被认为是内积
使用特征Hash通常包括两步:
- 对原始数据使用Hash函数,无需计算One-Hot编码形式;
- 利用稀疏的表示方法存储Hash的特征。
6、CTR预测
任务:计算
P(click∣user,ad,publisherinfo)
流程:
步骤:
- 获取数据
- 切分数据,将数据分成training set,validation set和test set
- 特征提取,使用one-hot编码和特征hash
- 训练,使用Logistic Regression
- 预测。
若需要PDF版本,请关注我的新浪博客@赵_志_勇,私信你的邮箱地址给我。
参考文献