● 请你说一说推荐算法,fm,lr,embedding
参考回答:
基于人口学的推荐、基于内容的推荐、基于用户的协同过滤推荐、基于项目的协同过滤推荐、基于模型的协同过滤推荐、基于关联规则的推荐redis
FM:算法

LR:数据库
逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层逻辑函数g(z),即先把特征线性求和,而后使用函数g(z)做为假设函数来预测。g(z)能够将连续值映射到0 和1。g(z)为sigmoid function.api

则数组

sigmoid function 的导数以下:网络

逻辑回归用来分类0/1 问题,也就是预测结果属于0 或者1 的二值分类问题。这里假设了二值知足伯努利分布,也就是app

其也能够写成以下的形式:dom
对于训练数据集,特征数据x={x1, x2, … , xm}和对应的分类标签y={y1, y2, … , ym},假设m个样本是相互独立的,那么,极大似然函数为:机器学习

log似然为:分布式


若是只用一个训练样例(x,y),采用随机梯度上升规则,那么随机梯度上升更新规则为:
Embedding:
Embedding在数学上表示一个maping:,也就是一个function。其中该函数知足两个性质:1)injective (单射的):就是咱们所说的单射函数,每一个Y只有惟一的X对应;2)structure-preserving(结构保存):好比在X所属的空间上
,那么映射后在Y所属空间上同理
。
那么对于word embedding,就是找到一个映射(函数)将单词(word)映射到另一个空间(其中这个映射具备injective和structure-preserving的特色),生成在一个新的空间上的表达,该表达就是word representation。
● 协同过滤的itemCF,userCF区别适用场景
参考回答:
计算复杂度:
Item CF 和 User CF 是基于协同过滤推荐的两个最基本的算法,User CF 是很早之前就提出来了,Item CF 是从 Amazon 的论文和专利发表以后(2001 年左右)开始流行,你们都以为 Item CF 从性能和复杂度上比 User CF 更优,其中的一个主要缘由就是对于一个在线网站,用户的数量每每大大超过物品的数量,同时物品的数据相对稳定,所以计算物品的类似度不但计算量较小,同时也没必要频繁更新。但咱们每每忽略了这种状况只适应于提供商品的电子商务网站,对于新闻,博客或者微内容的推荐系统,状况每每是相反的,物品的数量是海量的,同时也是更新频繁的,因此单从复杂度的角度,这两个算法在不一样的系统中各有优点,推荐引擎的设计者须要根据本身应用的特色选择更加合适的算法。
适用场景:
在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于类似用户的推荐原则更加有效。好比在购书网站上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性远远超过了网站首页对该用户的综合推荐。能够看到,在这种状况下,Item CF 的推荐成为了引导用户浏览的重要手段。同时 Item CF 便于为推荐作出解释,在一个非社交网络的网站中,给某个用户推荐一本书,同时给出的解释是某某和你有类似兴趣的人也看了这本书,这很难让用户信服,由于用户可能根本不认识那我的;但若是解释说是由于这本书和你之前看的某本书类似,用户可能就以为合理而采纳了此推荐。
相反的,在现今很流行的社交网络站点中,User CF 是一个更不错的选择,User CF 加上社会网络信息,能够增长用户对推荐解释的信服程度。
● 推荐系统的大概步骤,解决冷启动。。。
参考回答:
解决冷启动的方案:
1)提供非个性化的推荐
最简单的例子就是提供热门排行榜,能够给用户推荐热门排行榜,等到用户数据收集到必定的时候,再切换为个性化推荐。例如Netflix的研究也代表新用户在冷启动阶段确实是更倾向于热门排行榜的,老用户会更加须要长尾推荐
2)利用用户注册信息
用户的注册信息主要分为3种:(1)获取用户的注册信息;(2)根据用户的注册信息对用户分类;(3)给用户推荐他所属分类中用户喜欢的物品。
3)选择合适的物品启动用户的兴趣
用户在登陆时对一些物品进行反馈,收集用户对这些物品的兴趣信息,而后给用户推荐那些和这些物品类似的物品。通常来讲,可以用来启动用户兴趣的物品须要具备如下特色:
比较热门,若是要让用户对物品进行反馈,前提是用户得知道这是什么东西;
具备表明性和区分性,启动用户兴趣的物品不能是大众化或老小咸宜的,由于这样的物品对用户的兴趣没有区分性;
启动物品集合须要有多样性,在冷启动时,咱们不知道用户的兴趣,而用户兴趣的可能性很是多,为了匹配多样的兴趣,咱们须要提供具备很高覆盖率的启动物品集合,这些物品能覆盖几乎全部主流的用户兴趣
4)利用物品的内容信息
用来解决物品的冷启动问题,即如何将新加入的物品推荐给对它感兴趣的用户。物品冷启动问题在新闻网站等时效性很强的网站中很是重要,由于这些网站时时刻刻都有新物品加入,并且每一个物品必须可以再第一时间展示给用户,不然通过一段时间后,物品的价值就大大下降了。
5)采用专家标注
不少系统在创建的时候,既没有用户的行为数据,也没有充足的物品内容信息来计算物品类似度。这种状况下,不少系统都利用专家进行标注。
6)利用用户在其余地方已经沉淀的数据进行冷启动
以QQ音乐举例:QQ音乐的猜你喜欢电台想要去猜想第一次使用QQ音乐的用户的口味偏好,一大优点是能够利用其它腾讯平台的数据,好比在QQ空间关注了谁,在腾讯微博关注了谁,更进一步,好比在腾讯视频刚刚看了一部动漫,那么若是QQ音乐推荐了这部动漫里的歌曲,用户会以为很人性化。这就是利用用户在其它平台已有的数据。
再好比今日头条:它是在用户经过新浪微博等社交网站登陆以后,获取用户的关注列表,而且爬取用户最近参与互动的feed(转发/评论等),对其进行语义分析,从而获取用户的偏好。
因此这种方法的前提是,引导用户经过社交网络帐号登陆,这样一方面能够下降注册成本提升转化率;另外一方面能够获取用户的社交网络信息,解决冷启动问题。
7)利用用户的手机等兴趣偏好进行冷启动
Android手机开放的比较高,因此在安装本身的app时,就能够顺路了解下手机上还安装了什么其余的app。好比一个用户安装了美丽说、蘑菇街、辣妈帮、大姨妈等应用,就能够断定这是女性了,更进一步还能够断定是备孕仍是少女。目前读取用户安装的应用这部分功能除了app应用商店以外,一些新闻类、视频类的应用也在作,对于解决冷启动问题有很好的帮助。
● 传统的机器学习算法了解吗
参考回答:
1). 回归算法:回归算法是试图采用对偏差的衡量来探索变量之间的关系的一类算法。回归算法是统计机器学习的利器。 常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)。
2). 基于实例的算法:基于实例的算法经常用来对决策问题创建模型,这样的模型经常先选取一批样本数据,而后根据某些近似性把新数据与样本数据进行比较。经过这种方式来寻找最佳的匹配。所以,基于实例的算法经常也被称为“赢家通吃”学习或者“基于记忆的学习”。常见的算法包括 k-Nearest Neighbor(KNN), 学习矢量量化(Learning Vector Quantization, LVQ),以及自组织映射算法(Self-Organizing Map,SOM)。深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习经过组合低层特征造成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。
3). 决策树学习:决策树算法根据数据的属性采用树状结构创建决策模型, 决策树模型经常用来解决分类和回归问题。常见的算法包括:分类及回归树(Classification And Regression Tree,CART),ID3 (Iterative Dichotomiser 3),C4.5,Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随机森林(Random Forest),多元自适应回归样条(MARS)以及梯度推动机(Gradient Boosting Machine,GBM)。
4). 贝叶斯方法:贝叶斯方法算法是基于贝叶斯定理的一类算法,主要用来解决分类和回归问题。常见算法包括:朴素贝叶斯算法,平均单依赖估计(Averaged One-Dependence Estimators,AODE),以及Bayesian Belief Network(BBN)。
5). 基于核的算法:基于核的算法中最著名的莫过于支持向量机(SVM)了。基于核的算法把输入数据映射到一个高阶的向量空间,在这些高阶向量空间里,有些分类或者回归问题可以更容易的解决。常见的基于核的算法包括:支持向量机(Support Vector Machine,SVM), 径向基函数(Radial Basis Function,RBF),以及线性判别分析(Linear Discriminate Analysis,LDA)等。
6). 聚类算法:聚类,就像回归同样,有时候人们描述的是一类问题,有时候描述的是一类算法。聚类算法一般按照中心点或者分层的方式对输入数据进行归并。因此的聚类算法都试图找到数据的内在结构,以便按照最大的共同点将数据进行归类。常见的聚类算法包括 k-Means算法以及指望最大化算法(Expectation Maximization,EM)。
7). 下降维度算法:像聚类算法同样,下降维度算法试图分析数据的内在结构,不过下降维度算法是以非监督学习的方式试图利用较少的信息来概括或者解释数据。这类算法能够用于高维数据的可视化或者用来简化数据以便监督式学习使用。常见的算法包括:主成份分析(Principle Component Analysis,PCA),偏最小二乘回归(Partial Least Square Regression,PLS),Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS), 投影追踪(Projection Pursuit)等。
8). 关联规则学习:关联规则学习经过寻找最可以解释数据变量之间关系的规则,来找出大量多元数据集中有用的关联规则。常见算法包括 Apriori算法和Eclat算法等。
9). 集成算法:集成算法用一些相对较弱的学习模型独立地就一样的样本进行训练,而后把结果整合起来进行总体预测。集成算法的主要难点在于究竟集成哪些独立的较弱的学习模型以及如何把学习结果整合起来。这是一类很是强大的算法,同时也很是流行。常见的算法包括:Boosting,Bootstrapped Aggregation(Bagging),AdaBoost,堆叠泛化(Stacked Generalization,Blending),梯度推动机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。
10). 人工神经网络:人工神经网络算法模拟生物神经网络,是一类模式匹配算法。一般用于解决分类和回归问题。人工神经网络是机器学习的一个庞大的分支,有几百种不一样的算法。(其中深度学习就是其中的一类算法,咱们会单独讨论),重要的人工神经网络算法包括:感知器神经网络(Perceptron Neural Network), 反向传递(Back Propagation),Hopfield网络,自组织映射(Self-Organizing Map, SOM)。学习矢量量化(Learning Vector Quantization, LVQ)。
RF:经过对训练数据样本以及属性进行有放回的抽样(针对某一个属性随机选择样本)这里有两种,一种是每次都是有放回的采样,有些样本是重复的,组成和原始数据集样本个数同样的数据集;另一种是不放回的抽样,抽取出大约60%的训练信息。由今生成一颗CART树,剩下的样本信息做为袋外数据,用来看成验证集计算袋外偏差测试模型;把抽取出的样本信息再放回到原数据集中,再从新抽取一组训练信息,再以此训练数据集生成一颗CART树。这样依次生成多颗CART树,多颗树组成森林,而且他们的生成都是经过随机采样的训练数据生成,所以叫随机森林。RF能够用于数据的回归,也能够用于数据的分类。回归时是由多颗树的预测结果求均值;分类是由多棵树的预测结果进行投票。正式因为它的随机性,RF有极强的防止过拟合的特性。因为他是由CART组成,所以它的训练数据不须要进行归一化,由于每课的创建过程都是经过选择一个能最好的对数据样本进行选择的属性来创建分叉,所以有以上好处的同时也带来了一个缺点,那就是忽略了属性与属性之间的关系。
K-meas:基本K-Means算法的思想很简单,事先肯定常数K,常数K意味着最终的聚类类别数,首先随机选定初始点为质心,并经过计算每个样本与质心之间的类似度(这里为欧式距离),将样本点归到最类似的类中,接着,从新计算每一个类的质心(即为类中心),重复这样的过程,知道质心再也不改变,最终就肯定了每一个样本所属的类别以及每一个类的质心。因为每次都要计算全部的样本与每个质心之间的类似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。
初始化常数K,随机选取初始点为质心
重复计算一下过程,直到质心再也不改变
计算样本与每一个质心之间的类似度,将样本归类到最类似的类中
从新计算质心
输出最终的质心以及每一个类
● 用mapreduce实现10亿级以上数据的kmeans
参考回答:
输入:全局变量centers,偏移量key,样本value
输出:<key’,value>对,其中key’是最近中心的索引,value’是样本信息的字符串
从value构造样本的instance;
minDis=Double.MAX_VALUE; Index=-1; For i=0 to centers.length do dis=ComputeDist(instance,centers[i]); If dis<minDis{ minDis=dis; index=i; } End For
把index做为key’;
把不一样维度的values构形成value’;
输出<key’,value’>对;
End
注意这里的Step 2和Step 3初始化了辅助变量minDis和index;Step 4经过计算找出了与样本最近的中心点,函数ComputeDist(instance,centers[i])返回样本和中心点centers[i]的距离;Step 8输出了用来进行下一个过程(combiner)的中间数据。
Combine函数. 每一个map任务完成以后,咱们用combiner去合并同一个map任务的中间结果。由于中间结果是存储在结点的本地磁盘上,因此这个过程不会耗费网络传输的代价。在combine函数中,咱们把属于相同簇的values求和。为了计算每一个簇的对象的平均值,咱们须要记录每一个map的每一个簇中样本的总数。Combine函数的伪代码见算法2.
算法2.combine(key,V)
输入:key为簇的索引,V为属于该簇的样本列表
输出:<key’,value’>对,key’为簇的索引,value’是由属于同一类的全部样本总和以及样本数所组成的字符串。
初始化一个数组,用来记录同一类的全部样本的每一个维度的总和,样本是V中的元素;
初始化一个计数器num为0来记录属于同一类的样本总数;
While(V.hasNext()){
从V.next()构造样本实例instance;
把instance的不一样维度值相加到数组
num++;
}
把key做为key’;
构造value’:不一样维度的求和结果+num;
输出<key’,value’>对;
End
Reduce函数. Reduce函数的输入数据由每一个结点的combine函数得到。如combine函数所描述,输入数据包括部分样本(同一类)的求和以及对应样本数。在reduce函数中,咱们能够把同一类的全部样本求和而且计算出对应的样本数。所以,咱们能够获得用于下一轮迭代的新中心。Reduce函数的伪代码见算法3。
算法3.Reduce(key,V)
输入:key为簇的索引,V为来自不一样结点的部分总和的样本列表
输出:<key’,value’>对,key’为簇的索引,value’是表明新的聚类中心的字符串
初始化一个数组,用来记录同一类的全部样本的每一个维度的总和,样本是V中的元素;
初始化一个计数器NUM为0来记录属于同一类的样本总数;
While(V.hasNext()){
从V.next()构造样本实例instance;
把instance的不一样维度值相加到数组
NUM+=num;
}
数组的每一个元素除以NUM来得到新的中心坐标;
把key做为key’;
构造value’为全部中心坐标的字符串;
输出<key’,value’>对;
End
● Kmeans
参考回答:
初始化常数K,随机选取初始点为质心
重复计算一下过程,直到质心再也不改变
计算样本与每一个质心之间的类似度,将样本归类到最类似的类中
从新计算质心
输出最终的质心以及每一个类
● 协同过滤中的算法怎么细分
参考回答:
● FM公式
参考回答:

● FM公式
参考回答:
