目录
1、Hadoop、Spark
另外hadoop,mpi,最近比较火的spark,应该都是加分项
2、机器学习场景
1、搜索、广告、垃圾过滤、安全、推荐系统
3、推荐系统(预测电影等级)
对于机器学习来说,特征是非常重要的(对ML算法影响很大)
推荐系统:自动的替你学习到一组很好的特征量
我们查看数据,并查看所有缺失的电影评级,并试图预测这些问号的值应该是多少。
基于内容的推荐
按照内容的特征来推荐(例如爱情成分有多少,动作成分有多少),但是很难知道所有电影都有什么样的特征。
让每一个人看完电影告诉你浪漫指数多少,动作指数多少很难。
协同滤波(推荐系统方法):自行学习所要使用的特征
- 知道 θ 就能学习到 x ,知道 x 也会学出 θ 来
假如有电影的特征 ,就可以解出这个最小化问题 ,为用户找到参数 θ 。
如果有参数 θ, 也可以用该参数通过解一个最小化问题去计算出特征 x 。
- 不停地重复这些计算 ,首先随机地初始化这些参数 ,然后解出 θ 解出 x 解出 θ 解出 x
4、CTR(点击通过率 -> 广告)
CTR(Click-Through-Rate)即点击通过率,是互联网广告常用的术语,指网络广告(图片广告/文字广告/关键词广告/排名广告/视频广告等)的点击到达率,即该广告的实际点击次数除以广告的展现量。
- CTR是衡量互联网广告效果的一项重要指标。
CTR指在搜索引擎中输入关键词后进行搜索,然后按竞价等因素把相关的网页按顺序进行排列出来,然后用户会选择自己感兴趣的网站点击进去;把一个网站所有搜索出来的次数作为总次数,把用户点击并进入网站的次数占总次数的比例叫点击率。
5、SVM
1、SVM的原理
(1)大间隔分类超平面,(线性二分类)找到一条更“胖”,更健壮的分割线
(2)分割线的确定只与支持向量有关
(3)噪声点是造成过拟合的主要原因
(4)分界面与支持向量的距离: 1/||w||
为什么???
分类平面:
wTx+b=0
w
T
x
+
b
=
0
,线性模型
y(x)=wTx+b
y
(
x
)
=
w
T
x
+
b
(5)凸函数,二次规划问题
- 线性硬间隔SVM
(6)如果是非线性的,例如包括 x 的高阶项
- 利用特征转换 zn=Φ(xn) z n = Φ ( x n ) ,从非线性的x域,映射到线性的z域空间
(7)由于大间隔的限制,SVM的泛化能力很好
2、SVM的核技巧
- 将特征转换、z空间内积计算 合起来,会简化计算
二次多项式核计算:
多项式核
- 通过改变不同的系数,得到不同的SVM margin和SV,如何选择正确的kernel,非常重要。
高阶多项式核的优点:
- (1)得到更大的SVM间隔,支持向量的个数不会太多,分类面不会太复杂,防止过拟合
- (2)大大简化了计算量
高斯核:也称为径向基函数
K(x,x′)=e−λ||x−x′||2
K
(
x
,
x
′
)
=
e
−
λ
|
|
x
−
x
′
|
|
2
γ越大,高斯核函数越尖瘦,有限个高斯核函数的线性组合就比较离散。
所以,SVM也会出现过拟合现象,γ的正确选择尤为重要,不能太大。
6、K-means
1、K-means原理
K-means是聚类算法中最简单的一种,将样本聚类成k个簇(cluster)
K均值是一个迭代方法:
1.簇分配
2.移动聚类中心
3.当聚类中心不再变化时,聚类完成
K值的选择
肘部法则,场景需求
优点:算法简单、簇类时效果好
缺点:大数据计算开销大,K值难以估计,随机初始影响大
2、如何用 hadoop 实现 k-means
参考:http://blog.csdn.net/garfielder007/article/details/51612730
写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的区别
1、总结起来,有以下几点不同:
(1)
Naive Bayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝叶斯公式计算P(y|x)。
Logistic Regression是一个判别模型,它通过在训练数据集上最大化判别函数P(y|x)学习得到,不需要知道P(x|y)和P(y)。
(2)
Naive Bayes是建立在条件独立假设基础之上的,设特征X含有n个特征属性(X1,X2,…Xn),那么在给定Y的情况下,X1,X2,…Xn是条件独立的。
Logistic Regression的限制则要宽松很多,如果数据满足条件独立假设,Logistic Regression能够取得非常好的效果;当数据不满度条件独立假设时,Logistic Regression仍然能够通过调整参数让模型最大化的符合数据的分布,从而训练得到在现有数据集下的一个最优模型。
(3)
当数据集比较小的时候,应该选用Naive Bayes,为了能够取得很好的效果,数据的需求量为O(log n)
当数据集比较大的时候,应该选用Logistic Regression,为了能够取得很好的效果,数据的需求量为O( n)
(4)
Naive Bayes运用了比较严格的条件独立假设,为了计算P(y|x),我们可以利用统计的方法统计数据集中P(x|y)和P(y)出现的次数,从而求得P(x|y)和P(y)。因而其所需的数据量要小一些,为O(log n).
Logistic Regression在计算时,是在整个参数空间进行线性搜索的,需要的数据集就更大,为O( n)
8、生成模型、判别模型
1、首先区分生成/判别方法、生成/判别模型。
有监督机器学习方法可以分为生成方法和判别方法
- 常见的生成方法有:混合高斯模型、朴素贝叶斯法和隐形马尔科夫模型等
- 常见的判别方法有:SVM、LR等
生成方法学习出的是生成模型,判别方法学习出的是判别模型。
(1)判别方法:
- 由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。
- 基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。典型的判别模型包括k近邻,感知机,决策树,支持向量机等。
(2)生成方法:
- 由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。
- 基本思想是首先建立样本的联合概率概率密度模型P(X,Y),然后再得到后验概率P(Y|X),再利用它进行分类。
2、生成模型、判别模型的优缺点
在监督学习中,两种方法各有优缺点,适合于不同条件的学习问题。
生成方法的特点:
- 上面说到,生成方法学习联合概率密度分布P(X,Y)
- 所以就可以从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度。但它不关心到底划分各类的那个分类边界在哪。
- 生成方法可以还原出联合概率分布P(Y|X),而判别方法不能。
- 生成方法的学习收敛速度更快,即当样本容量增加的时候,学到的模型可以更快的收敛于真实模型,当存在隐变量时,仍可以用生成方法学习。此时判别方法就不能用。
判别方法的特点:
- 判别方法直接学习的是决策函数Y=f(X)或者条件概率分布P(Y|X)。
- **不能反映训练数据本身的特性。但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异。
- **直接面对预测,往往学习的准确率更高。
- 由于直接学习P(Y|X)或P(X),可以对数据进行各种程度上的抽象、定义特征并使用特征,因此可以简化学习问题。
3、生成模型、判别模型的关系
由生成模型可以得到判别模型,但由判别模型得不到生成模型。
9、LDA的原理和推导
LDA,将高维样本投影到具有最佳判别效果的低维矢量空间,使得降维样本在新的子空间内类间距离最大,而类内距离最小,即在该低维空间内有最大的可分性。
LDA 既可以实现降维,也能完成分类。
PCA和LDA非常相似,最终都是解一个矩阵特征值的问题
10、做广告点击率(CTR)预测,用哪些数据什么算法
参考博客:http://blog.csdn.net/ariessurfer/article/details/40380051
logistic regression模型是比较简单而且实用的
- 在训练方法确定后,对ctr预估起到决定性作用的是选用的特征。
1、特征的选择与使用
- 做点击率预估需要两方面的数据,一方面是广告的数据,另一方面是用户的数据,现在所有的数据都有,那么工作就是利用这两方面的数据评估用户点击这个广告的可能性(也就是概率)。
用户的特征是比较多的
- 用户的年龄,性别,地域,职业,学校,手机平台等等。
- 广告的特征也很丰富, 如广告大小,广告文本,广告所属行业,广告图片。
- 还有反馈特征,如每个广告的实时ctr,广告跟性别交叉的ctr
1.1 选择特征
什么样的特征适合用来预估ctr?这个问题是很多广告算法工程师的需要考虑的。
年龄(老、中、少喜欢不同的东西)
性别(男女喜欢不同的东西)
地域(南方喜欢米、北方喜欢面食)
等等
1.2 特征的处理和使用
上面已经选好了特征,暂定有广告的反馈ctr,用户年龄,性别三个特征。
离散化特征(年龄20-30之间用1个)
交叉
连续特征离散化
1.3 特征的过滤和修正
经过修正后的ctr再做特征,实际线上效果有了比较大的提升。
广告点击率的贝叶斯平滑
2、如何评估一个点击率模型
评估点击率模型的好坏,有各种定性的或定量的、线上的或线下的方法。但是不论什么样的评测方法,其本质都是一样,就是要看这个模型被点击的展示与没被点击的展示之间的区别。当然,如果能找到一个离线可以计算的量化指标,是再好不过了。
这样的指标是有一个,ROC曲线下的面积,术语上称为AUC
3、LR+人工 特征工程 风光不再
Kdd 2012年起的各届冠军,这些比赛型的选手,基本占据了前十的位置,从使用的模型上,基本以fm和gbdt,还有神经网络这些非线性模型为主。可以这么说,在比赛里,逻辑回归加大量的人工特征工程的方案已经很难排到比赛前列,靠逻辑回归一个模型包打天下,已经成为过去时。
4、逻辑回归
正则化更新参数
11、常见计算广告点击率(CTR)预估算法
参考:https://www.cnblogs.com/qcloud1001/p/7513982.html
CTR架构
一个典型的CTR流程如下图所示:
如上图,主要包括两大部分:离线部分、在线部分,其中离线部分目标主要是训练出可用模型,而在线部分则考虑模型上线后,性能可能随时间而出现下降,弱出现这种情况,可选择使用Online-Learning来在线更新模型
(1)Logistic Regression
最简单的模型也应该是工业界应用最广的方法,Logistic Regression算法简单易于调参,属于线性模型
- 将CTR模型建模为一个分类问题,利用LR预测用户点击的概率;通常我们只需要离线收集好数据样本构造数据集,选择好合适的特征空间,离线训练好模型,测试在离线数据集上的性能之后,即可上线,也可以适应数据分布随时间突变严重的情况,采用online-learning的策略来对模型进行相对频繁的更新,模型的简单能够保证这部分的需求能够得到保障。
LR优点是简单高效,缺点也很明显,它太简单,视特征空间内特征之间彼此独立,没有任何交叉或者组合关系,这与实际不符合
(2)PLOY2:通过特征的二项式组合来建模
(3)Factorization Machine(FM)
FM的基本原理是将这些二项式矩阵做矩阵分解,将高维稀疏的特征向量映射到低维连续向量空间,然后根据内积表示二项式特征关系
(4)Field-aware FM(FFM)
FMM全程是 Field-aware FactorizationMachine,相对于FM增加了Field信息,每个特征属于一个field
(5)FNN
(6)CCPM
(7)PNN
(8)DeepFM
其他的一些方法
- 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和矩阵分解各自适用场景
参考:http://blog.csdn.net/zyvscc/article/details/7551842
1、矩阵分解
矩阵分解是最近几年比较火的算法,经过kddcup和netflix比赛的多人多次检验,矩阵分解可以带来更好的结果,而且可以充分地考虑各种因素的影响,有非常好的扩展性。
因为要考虑多种因素的综合作用,往往需要构造cost function来将矩阵分解问题转化为优化问题,根据要考虑的因素为优化问题添加constraints,然后通过迭代的方法进行矩阵分解,原来评分矩阵中的missing vlaue可以通过分解后得到的矩阵求的。
(1)PureSvd
其实,矩阵分解的核心是将一个非常稀疏的评分矩阵分解为两个矩阵,一个表示user的特性,一个表示item的特性,将两个矩阵中各取一行和一列向量做内积就可以得到对应评分。
各种矩阵分解方法,QR,Jordan,三角分解,SVD
这里说说svd分解:svd是将一个任意实矩阵分解为三个矩阵U,S,V,其中,U,V是两个正交矩阵,称为左右奇异矩阵,S是个对角阵,称为奇异值矩阵。
(2)Latent Factor Model
这是真正的矩阵分解算法,经过实践检验,具有非常高的准确性和易扩展性。
(3)NMF(非负矩阵分解)
很多人用这种方法是因为他们觉得只有一个非负的值对于实际的例子才会有意义。
2、矩阵分解方法在推荐系统中如何用
优点
- 比较容易编程实现
- 比较低的时间和空间复杂度
- 预测的精度比较高
- 非常好的扩展性
缺点
- 推荐的结果不具有很好的可解释性。
- 因为把ratings matrix分解成user-factor matrix和item-factor matrix,这里的factor很难用实际意义的概念来解释。
13、常用推荐系统算法
(1)Itemcf(基于商品的协同过滤)
- 在离线系统中将item的相似度矩阵计算好,以供线上可以即时地进行推荐。
- 因为这种方法靠的是item之间的相关性进行推荐,所以推荐的item一般都和喜欢的item内容或者特性高度相似
- 很难推荐出用户潜在喜欢的item,多样性也比较差
(2)Usercf(基于用户的协同过滤)
- 它的主要特色是可以发现和用户具有同样taste的人,有句俗话叫做观其友知其人
- 因为用户的相似用户群还是比较敏感的,所以要频繁地计算出用户的相似用户矩阵,这样的话运算量会非常大
(3)Content_based(基于内容的推荐)
- 很大程度上是在进行文本挖掘
(4)Knn(邻近算法)
- 由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的
- 因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合
(5)Slope One
- 推荐系统的最最本质的事情就是把user-item rating矩阵中的空白填好
(6)Svd(奇异值分解)
- 我们可以对原来的庞大的常常又非常稀疏的矩阵进行降维和分解,而分解后得到的矩阵都是稠密矩阵。
- 最终我们会得到一个表示user特性的矩阵和一个表示item特性的矩阵。拿到这些数据之后,我们就可以进行推荐了,而且也可以很容易地进行聚类分析。
- 这个算法的好处在于,可以解决rating矩阵的稀疏性问题,同时可以降低矩阵的维度,提高运算速度。
- 但它的缺点是付出的空间代价太大。在做svd分解时,你需要先把一个大的rating矩阵分解成三个大的矩阵,这三个矩阵需要存在计算机内存中,然后才能进行降维。
- 其实,svd这个方法的思路和PCA(主成分分析法)很像,抓住主要矛盾,忽略次要矛盾。
(7)聚类算法
- 这里用到的聚类算法,是用来降低维度以及为并行计算作准备的。
- 拿到rating矩阵之后,可以通过这些评分将用户自然地聚成几簇,然后用上述的算法对各个簇做推荐算法并行计算,充分地利用好所有计算资源。
(8)组合算法
14、用户流失率预测怎么做(游戏公司的数据挖掘都喜欢问这个)
流失率”是描述客户离开或停止支付产品或服务费率的业务术语。这在许多企业中是一个关键的数字,因为通常情况下,获取新客户的成本比保留现有成本(在某些情况下,贵5到20倍)。
- 从机器学习的分类来讲, 这是一个监督问题中的分类问题。
具体来说, 是一个二分类问题。 所有的数据中包括一些特征, 最后就是它的分类:流失或者在网。- 然后是一些特征工程的东西
- 算法模型:KNN、NB、SVM、LDA、CART、RF、XGBoost
有两个点,数据不平衡问题和时间序列分析
例子:IBM做的保险行业客户流失率预测模型
(1)大数据客户分析,数据准备(一些信息作为特征)
(2)构建训练集、测试集
- 两个客户流失模型中的主要节点:分区节点、卡方自动交叉检验模型节点
分区节点:用于生成分区字段,将数据分割为单独的子集或样本,以供模型构建的训练、测试和验证阶段使用
卡方自动交互检测法 CHAID:是一个用来发现变量之间关系的工具
(3)卡方自动交叉检验模型
15、一个游戏的设计过程中该收集什么数据
参考:http://www.gameres.com/477589.html
现在具有追踪玩家行为的处理能力和连接性
- 参数是经过一段时间追踪到的一连串数据。基于参数我们可以追踪到任何内容:平均回合持续时间,玩家卸载游戏的时间点,目标玩家群体等等。
主要存在4种参数类别:
1.用户参数:相当于所有与用户获取和用户留存相关的数据。它们也可以被当成市场营销者的数据。这一类别的参数包含了DAU(每日活跃用户)和ARPU(每用户平均收益)。
2.社区参数:社区参数专注于社区行为和发展。它们将追踪你的游戏内部聊天中的内容。所有的社交元素都属于这一类别。例如游戏内部和社交网站上的信息传递。
3.性能参数:性能参数将追踪你的应用的性能和潜在漏洞或坍塌。它也是你那遥远的服务器,游戏的加载时间或运行时的帧速的响应器。它能够帮助你完善后端系统。
4.游戏玩法参数:游戏玩法参数将记录任何发生于游戏内部的情况,即介于玩家和游戏之间。例如玩家在特定关卡中所花费的时间,玩家死了多少次等等。它们能够帮助设计师判断用户游戏体验的情况。
游戏分析能够通过真实数据帮助我们理解玩家的行为:
- 如果你知道玩家何时在哪里受困,你便能够轻松调整游戏的难度。
- 如果你知道玩家会购买什么道具以及不愿意购买什么道具,你便能够调整价格。
- 如果你知道玩家的年龄,你便能够针对他们更好地调整内容。
我们应该追踪怎样的参数?
- 玩家何时离开游戏
- 他们在游戏回合中平均待了多长时间
- 玩家在游戏中前进了多远
- 玩家在什么时候卸载了游戏
这些数据流都是很容易追踪到的。通过结合这些数据流,你能够了解到底是什么内容让玩家感到受挫。结合这些数据与你的目标用户群体,你便能够基于用户去明确相关分析。例如你可以将卸载了你的硬核游戏的10岁用户从成人群体中过滤掉。
16、如何从登陆日志中挖掘尽可能多的信息
日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核、各种应用服务器等等。日志的内容、规模和用途也各不相同,很难一概而论。
本文讨论的日志处理方法中的日志,仅指Web日志。其实并没有精确的定义,可能包括但不限于各种前端Web服务器——apache、lighttpd、tomcat等产生的用户访问日志,以及各种Web应用程序自己输出的日志。
在Web日志中,每条日志通常代表着用户的一次访问行为
- 毫无疑问,Web日志中包含了大量人们——主要是产品分析人员会感兴趣的信息,最简单的,我们可以从中获取网站每类页面的PV值(PageView,页面访问量)、独立IP数(即去重之后的IP数量)等;稍微复杂一些的,可以计算得出用户所检索的关键词排行榜、用户停留时间最高的页面等;更复杂的,构建广告点击模型、分析用户行为特征等等。