机器学习问题总结(05)

1. Hadoop、Spark

1.1 hadoop

Apache Hadoop软件库是一个允许使用简单编程模型跨计算机集群处理大型数据集合的框架,其设计的初衷是将单个服务器扩展成上千个机器组成的一个集群为大数据提供计算服务,其中每个机器都提供本地计算和存储服务。

主要解决两大核心问题:大数据存储 && 大数据处理

1.2 spark

spark是一个和Hadoop一样思路的大数据处理框架,但是Hadoop是基于磁盘计算的,而spark是基于内存计算的。

spark相比于Hadoop的优势

  • 速度快:Apache Spark拥有先进的DAG调度器、查询优化器以及物理执行引擎从而高性能的实现批处理和流数据处理
  • 易用性:可以使用Java,Scala,Python,R以及SQL快速的写Spark应用
  • 通用性:支持SQL,流数据处理以及复杂分析,Spark拥有一系列库,包括SQL和DataFrame,用于机器学习的MLib,支持图计算GraphX以及流计算模块Streaming。你可以在一个应用中同时组合这些库。
  • 支持多种模式运行:平台包括Hadoop,Apache Mesos,Kubernete,standalone或者云上,也可以获取各种数据源上的数据

1.3 MapReduce

1.3.1 概念

MapReduce是一种并行可扩展计算模型
MapReduce由JobTracker和TaskTracker组成。JobTracker负责资源管理和作业控制,TaskTracker负责任务的运行。

1.3.1 MapReduce执行流程

(1) 开发人员编写好MapReduce program,将程序打包运行。
(2) JobClient向JobTracker申请可用Job,JobTracker返回JobClient一个可用Job ID。
(3) JobClient得到Job ID后,将运行Job所需要的资源拷贝到共享文件系统HDFS中。
(4) 资源准备完备后,JobClient向JobTracker提交Job。
(5) JobTracker收到提交的Job后,初始化Job。
(6) 初始化完成后,JobTracker从HDFS中获取输入splits(作业可以该启动多少Mapper任务)。
(7) 与此同时,TaskTracker不断地向JobTracker汇报心跳信息,并且返回要执行的任务。
(8) TaskTracker得到JobTracker分配(尽量满足数据本地化)的任务后,向HDFS获取Job资源(若数据是本地的,不需拷贝数据)。
(9) 获取资源后,TaskTracker会开启JVM子进程运行任务

MapReduce编程主要组件

在这里插入图片描述

2、机器学习场景

搜索、广告、垃圾过滤、安全、推荐系统…

3、推荐系统(预测电影等级)

对于机器学习来说,特征是非常重要的(对ML算法影响很大)
推荐系统:自动的替你学习到一组很好的特征量
这里写图片描述

4、CTR(点击通过率 -> 广告)

CTR(Click-Through-Rate)即点击通过率,是互联网广告常用的术语,指网络广告(图片广告/文字广告/关键词广告/排名广告/视频广告等)的点击到达率,即该广告的实际点击次数除以广告的展现量。
CTR是衡量互联网广告效果的一项重要指标

CTR指在搜索引擎中输入关键词后进行搜索,然后按竞价等因素把相关的网页按顺序进行排列出来,然后用户会选择自己感兴趣的网站点击进去;把一个网站所有搜索出来的次数作为总次数,把用户点击并进入网站的次数占总次数的比例叫点击率。

5、SVM

5.1 svm的原理

(1)大间隔分类超平面,(线性二分类)找到一条更“胖”,更健壮的分割线

(2)分割线的确定只与支持向量有关

(3)噪声点是造成过拟合的主要原因

(4)分界面与支持向量的距离: 1/||w||

为什么???

5.2 SVM的核技巧

  • 将特征转换、z空间内积计算 合起来,会简化计算

6、K-means

6.1 K-means算法

K-means是聚类算法中最简单的一种,将样本聚类成k个簇(cluster)

K均值是一个迭代方法:
1.簇分配
2.移动聚类中心
3.当聚类中心不再变化时,聚类完成

K值的选择
肘部法则(统计不同K下的模型的性能,找到性能突然降低的那个点为拐点则为我们的K),场景需求

  • 优点:算法简单、簇类时效果好
  • 缺点:大数据计算开销大,K值难以估计,随机初始影响大

6.2、如何用 hadoop 实现 k-means

写mapreduce程序实现kmeans算法,我们的思路可能是这样的
1 用一个全局变量存放上一次迭代后的质心

2 map里,计算每个质心与样本之间的距离,得到与样本距离最短的质心,以这个质心作为key,样本作为value,输出

3 reduce里,输入的key是质心,value是其他的样本,这时重新计算聚类中心,将聚类中心put到一个全部变量t中。

4在main里比较前一次的质心和本次的质心是否发生变化,如果变化,则继续迭代,否则退出。

本文的思路基本上是按照上面的步骤来做的,只不过有几个问题需要解决

1 Hadoop是不存在自定义的全局变量的,所以上面定义一个全局变量存放质心的想法是实现不了的,所以一个替代的思路是将质心存放在文件中

2 存放质心的文件在什么地方读取,如果在map中读取,那么可以肯定我们是不能用一个mapreduce实现一次迭代,所以我们选择在main函数里读取质心,然后将质心set到configuration中,configuration在map和reduce都是可读

7、naive bayes和logistic regression的区别

  • Naive Bayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝叶斯公式计算P(y|x)。Logistic Regression是一个判别模型,它通过在训练数据集上最大化判别函数P(y|x)学习得到,不需要知道P(x|y)和P(y)。

  • Naive Bayes是建立在条件独立假设基础之上的,设特征X含有n个特征属性(X1,X2,…Xn),那么在给定Y的情况下,X1,X2,…Xn是条件独立的。Logistic Regression的限制则要宽松很多,如果数据满足条件独立假设,Logistic Regression能够取得非常好的效果;当数据不满度条件独立假设时,Logistic Regression仍然能够通过调整参数让模型最大化的符合数据的分布,从而训练得到在现有数据集下的一个最优模型。

  • 当数据集比较小的时候,应该选用Naive Bayes,为了能够取得很好的效果,数据的需求量为O(log n);当数据集比较大的时候,应该选用Logistic Regression,为了能够取得很好的效果,数据的需求量为O( n)

  • Naive Bayes运用了比较严格的条件独立假设,为了计算P(y|x),我们可以利用统计的方法统计数据集中P(x|y)和P(y)出现的次数,从而求得P(x|y)和P(y)。因而其所需的数据量要小一些,为O(log n).Logistic Regression在计算时,是在整个参数空间进行线性搜索的,需要的数据集就更大,为O( n)

8、生成模型、判别模型


9、LDA的原理和推导

LDA,将高维样本投影到具有最佳判别效果的低维矢量空间,使得降维样本在新的子空间内类间距离最大,而类内距离最小,即在该低维空间内有最大的可分性。

LDA 既可以实现降维,也能完成分类。

PCA和LDA非常相似,最终都是解一个矩阵特征值的问题
这里写图片描述

10、做广告点击率(CTR)预测,用哪些数据什么算法

logistic regression模型是比较简单而且实用的
在训练方法确定后,对ctr预估起到决定性作用的是选用的特征

10.1 特征选择与使用

  • 做点击率预估需要两方面的数据,一方面是广告的数据,另一方面是用户的数据,现在所有的数据都有,那么工作就是利用这两方面的数据评估用户点击这个广告的可能性(也就是概率)。
  • 用户的特征是比较多的:用户的年龄,性别,地域,职业,学校,手机平台等等。
  • 广告的特征:如广告大小,广告文本,广告所属行业,广告图片。
  • 反馈的特征:如每个广告的实时ctr,广告跟性别交叉的ctr

1.特征选择

2.特征处理

  • 离散化特征(年龄20-30之间用1个)
  • 交叉
  • 连续特征离散化

3.特征的过滤和修正
经过修正后的ctr再做特征,实际线上效果有了比较大的提升。()

10.2 点击率模型的评估方法

评估点击率模型的好坏,有各种定性的或定量的、线上的或线下的方法。但是不论什么样的评测方法,其本质都是一样,就是要看这个模型被点击的展示与没被点击的展示之间的区别。当然,如果能找到一个离线可以计算的量化指标,是再好不过了。

这样的指标是有一个,ROC曲线下的面积,术语上称为AUC

10.3 LR+人工 特征工程 风光不再

Kdd 2012年起的各届冠军,这些比赛型的选手,基本占据了前十的位置,从使用的模型上,基本以fm和gbdt,还有神经网络这些非线性模型为主。可以这么说,在比赛里,逻辑回归加大量的人工特征工程的方案已经很难排到比赛前列,靠逻辑回归一个模型包打天下,已经成为过去时

10.4、逻辑回归

11、常见计算广告点击率(CTR)预估算法

11.1CTR架构

这里写图片描述
如上图,主要包括两大部分:离线部分、在线部分,其中离线部分目标主要是训练出可用模型,而在线部分则考虑模型上线后,性能可能随时间而出现下降,弱出现这种情况,可选择使用Online-Learning来在线更新模型

11.2主要算法

1.Logistic Regression

2.PLOY2:通过特征的二项式组合来建模

PLOY2就是通过特征的二项式组合来建模这类特征的复杂的内在关系,二项式部分如下图公式

PLOY2有一个明显的问题,就是在实际场景中,大部分特征都是稀疏的,即大部分特征值为0,对这些稀疏的特征做二项式组合,会发现最后大部分特征值都是0,而在梯度更新时,当大部分feature为0时,其实梯度并不更新,所以PLOY2的方法在实际场景中并不能比较好地解决这类特征组合来建模更复杂线性关系的问题。

3.Factorization Machine(FM)

FM的基本原理是将这些二项式矩阵做矩阵分解,将高维稀疏的特征向量映射到低维连续向量空间,然后根据内积表示二项式特征关系:

FM通过对二项式稀疏进行低维连续空间的转换,能够有效地解决PLOY2中存在的二次项系数在大规模系数数据下不更新的问题,另外由于训练预测复杂度均为线性,PLOY2+SVM这样逻辑下由于要计算多项式核,复杂度是n^2,由于FM的这几个特征,在实际场景中,FM也大规模的应用在CTR中,尤其是在数据极其系数的场景下,FM效果相对于其他算法有很明星的改善。

4.Field-aware FM(FFM)

FMM全程是 Field-aware FactorizationMachine,相对于FM增加了Field信息,每个特征属于一个field

5.FNN(前向神经网络在CTR中的应用)
6.CCPM(卷积神经网络在CTR中的应用)
7.PNN

主要是在深度学习网络中增加了一个inner/outer product layer,用来建模特征之前的关系,如下图,Product layer部分Z是weight_feature,P部分weight_I(feature_i,feature_j)用来建模二项式关系

8.DeepFM
9.其他方法:
  • GBDT+LR:Facebook提出利用GBDT探索海量特征空间的特征组合,减少特征工程工作量,性能很好;
  • MLR:阿里妈妈提出的一种增强LR模型,将region的划分考虑进去来建模非线性关系,感觉类似于深度学习的Attention机制,据说在阿里妈妈相关业务提升很多;

**总结 **
前面讨论了一些CTR常见的方法,重点介绍了Factorization Machine及其变种Field-Aware Factorization Machine,还有和深度学习的结合,个人感觉PNN的逻辑比较有意思,完全使用神经网络的思维模型重塑了FM,为后面DeepFM扩展wide and deep的工作打下基础,减少了wide and deep中需要的一些基本的特征工程工作(wide部分二次项工作),上面只是涉及到模型的算法部分,在实际中可以去探讨,并不能说明一定性能就好,另外由于架构的限制,综合考虑其他方面的因素,如请求时间、模型复杂度,也是最终是否采用相关算法的考虑因素

12、推荐系统的算法中KNN和矩阵分解各自适用场景

12.1 矩阵分解

我们从二分类的线性回归的式子可以看出,其实最终学习到的模型就是对特征X的加权求和,而我们通过数据学习到的就是加权中的权重。在实际的生产环境中,原始的数据或存在大量的零,尤其是在对类别型的数据作完one-hot编码处理后,而且未经过特征提取的数据直接用于训练效果较差。因此,在推荐和广告领域,我们经常要做的就是对特征进行组合,比较传统的方法是对特征来两两进行组合。但是正如前面所说的,实际开发环境中,特征X会有非常多的零,通过简单的两两组合只会生成更加大的稀疏矩阵,这对于很多机器学习模型都是致命的,尤其是以梯度下降优化算法的模型,所以我们就想着能不能对这个高维的稀疏矩阵分解成2个低维的稠密矩阵。这便是矩阵分解的方法由来;但是直接对矩阵进行分解,随着矩阵大小的增加,求解的复杂度增加,所以为啥不直接将模型的优化直接考虑进矩阵的分解中,最终得到的矩阵直接就是模型的参数。FM便是这样的技术,通过对原始数据矩阵的分解,通过迭代的方法通过求解矩阵分解后使损失函数最小情况下的权重矩阵,然后改权重矩阵便是最终模型的参数。

12.2 矩阵分解的优劣

优点是:

  • 比较容易编程实现
  • 比较低的时间和空间复杂度
  • 预测的精度比较高
  • 非常好的扩展性

缺点:
推荐的结果不具有很好的可解释性。因为把ratings matrix分解成user-factor matrix和item-factor matrix,这里的factor很难用实际意义的概念来解释。不过,矩阵分解的过程相当于一个软聚类的过程,得到的每一个factor相当于每一个聚类后的分组,只是我们没有一个通用的方法来为这些分组命名。
但是在实际的应用中,我们可以提取这些分组中最突出的特点来给这些factor命名。比如,拿新闻资讯类的推荐系统来说,做好分解之后,每个factor都可以看成是一类资讯,可以从这些资讯中提取一些特征来给这个factor命名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值