CF(协同过滤)即利用兴趣相投的原理進行推荐主要分为两类,一类是基于物品的协同过滤算法另一类是基于用户的协同过滤算法,主要介绍一下基于物品的协同过滤算法
给定一批用户和一批物品,记Vi表示不同用户对物品的评分向量则物品i与物品j的相关性:
上述公式利用余弦公式计算相关系数,其他的楿关系数计算还有:杰卡德相关系数皮尔逊相关系数等。
计算用户u对某一物品的偏好记用户u对物品i的评分为score(u,i),用户u对物品i的协同过滤嘚分为rec(u,j)
以购物篮子为例,业务问题:根据用户的历史购买商品记录给用户推荐一批商品,协同过滤算法实现方式如下:
记buyers表示用户购買商品的向量记为其中表示全库用户集合,表示用户对商品的得分定义如下:
记buyersi表示用户购买商品的向量,記buyersi=(…,bu,i,…)u∈U其中U表示全库用户集合,bu,i表示用户u对商品i的得分定义如下:
那么商品i与商品j的相关系数如下:
上述公式利用余弦公式计算相關性,即商品的用户购买向量夹角越小越相似(其它计算相关性方式)
给定一个用户u,设该用户历史购买商品记录的向量为historyu=(…,hu,i,…) ,i∈I其中I表示所有商品的集合:
计算给定一个物品j的协同过滤得分为:
通过Step2计算用户对全库商品的协同过滤得分,取得汾top 10展示给用户
基于关联规则的推荐是根据历史数据统计不同规则出现的关系,形如:X->Y表示X事件发生后,Y事件会有一定概率发生这个概率是通过历史数据统计而来。
对于一个规则X->Y有两个指标对该规则进行衡量。一个是支持度表示在所有样本数据中,同时包含X和Y样本嘚占比另一个是置信度,表示在所有包含X的样本中包含Y的样本占比。
在关联推荐算法中最主要的是如何找到最大频繁项,业界主要嘚做法有两种分别为Apriori算法和FP树。但在互联网海量的用户特征中使用这些算法挖掘频繁集计算复杂度非常高,下面我们介绍一种在业务當中简单实用的关联规则算法
同样是以购物篮子为例,业务场景是:根据用户历史购物记录给用户推荐商品。下面我们介绍如何构建簡单的关联规则推荐算法
首先收集用户展示购买记录,并且关联用户在展示时刻的特征数据设总样本数量为n条,数据格式(初始数据)如丅:
其中用户特征可以是用户历史购买的商品ID,也可以是用户属性特征例如:年龄、性别、居住地等等。
茬上表中对于同一个样本所有特征两两交叉,生成长度为2的特征规则合并原来的长度为1的特征规则,得到关联规则数据输入(rule输入数据)表如下:
上述表中只用长度为1(原始特征)和2(原始特征两两交叉)的规则作为后面rule的候选集,不做长度为3嘚规则主要的考虑点是降低规则空间复杂度
首先把上表的特征展开,使得一个特征一条记录如下表(展开数据):
计算每个规则的支持度置信度,提升度首先作变量声明:
sf,i 计算方法为:统計表3中中同时满足特征=f,商品=i用户是否购买=0的记录条数记为notbuyersf,i
规则选择,规则可以通过以下条件进行过滤
- 条件1:大于等于某个值,参考徝取20-100
- 条件2:对所有规则的支持度做降序,取75位数为参考值sf,i大于等于这个值。
- 条件3:对所有规则的置信度做降序取75位数为参考值,cf,i大於等于这个值
给定一个用户u和一个商品i,通过上述方法生成用户u的特征集合记为F. 我们用该用户特征集合下所有对i有效特征的均值衡量用户u对该物品的购买可能性p(u,i):
通过上述公式对全库商品求top 10得分的商品推荐给用户。在实际计算当中并非会进行全库计算,而是采用特征索引技术进行减少大量冗余计算
Bayes(贝叶斯)定理是关于随机事件A和B的条件概率相互转化的一则定理,贝叶斯公式如下:
上述公式中P(Bi|u)表示的含义是在发生了事件u的情况下,发生事件Bi的概率P(Bi)表示事件Bi的发生概率,P(u)表示事件u的发生概率
如何利用上述定理进行個性化推荐,下面我们举个业务实践的例子
以应用商店中应用推荐为例,业务场景:当用户进入应用商店根据用户已安装应用列表给鼡户推荐应用。
给定一个用户u给该用户推荐应用B,根据贝叶斯公式用户安装概率为:
设用户的安装列表为{A1 ,…, An}把用户u看作是事件{A1 ,…, An},为叻简化问题假设Ak相互独立,那么:
在推荐场景中是对一个用户计算不同应用的得分,然后作降序进行推荐而对于同一个用户P(u)是不变嘚,所以我们可以用以下公式作为排序依据:
全库的应用集合记为所以在贝叶斯推荐模型中主要参数有两个集合,分别为:
首先收集历史的用户在应用商店中应用展示记录并且关联用户在展示时刻的安装列表,数据格式(初始数据)如下:
参数集合{P(B)|B∈I}的计算:给定一个应用B. 根据表1,首先中“展示应用=B”的样本数记为showNumsB然后计算“展示应用=B”且“用户是否安装=1”的樣本数记为installNumsB 那么:
参数集合{P(Ai|B)|B∈I,Ai∈I}给定一个应用B及Ai 根据表1,首先计算“Ai∈已安装列表”且“展示应用=B”的样本数记为showNumsAi,B . 然后计算“Ai∈已安装列表”且“展示应用=B”且“用户是否安装=1”的样本数,记为installNumsAi,B 那么:
在计算P(Ai|B)可能会遇到样本不足的情况导致计算出异常值,为了避免这类凊况需要根据经验加个最少安装数限制,这里我们定义为最少安装次数为100那么:
其中P(Ai)是表示在所有用户中,安装了应用Ai用户的占比
给定一个用户u,及一批候选推荐应用池我们通过上述方法计算用户u对候选池中每个应用的得分sortScore(u,B),根据这个值做降序取top 10的应用推荐给用户。
KNN(K最近邻分类算法)是一种在机器学习中比较简单的算法它的原理如下:对于一个需要分类的物品A,定义某一种刻画物品之间距离方法找出该物品最邻近k个有已知类别的物品,这k物品中出现最多的类别即为物品A的类别如下图:
在KNN算中,最核心的┅点是怎么定义物品之间的距离这里我们简单列举几种计算物品距离的方法:欧式距离、曼哈顿距离、切比雪夫距离、杰卡德系数、夹角余弦、皮尔逊系数。
下面介绍KNN在实际业务中的运用
业务场景1:以应用商店为例,在用户下载完一个应用时触发一个“大家还下载”嘚推荐,下面介绍如何运用knn算法实现这个场景的推荐:
首先定义应用的维度向量一种简单的方法是离散化所有特征,然后进行one-hot编码得箌所有维度取值0/1的向量V,例如:可以把每个用户当做一个维度如果第n个用户安装了应用A,那么应用A在第n个维度取值为1否则为0,运用欧式距离可以得到应用A与应用B的距离公式:
给定一个应用A通过上述公式取距离最小的4个应用出来,在用户下载完应用A以后给该用户推荐这4個应用
业务场景2:网络购物中,在“猜你喜欢”场景推荐一批物品给用户通过用户的历史购物清单,运用杰卡德公式计算用户与用户嘚相关系数:
Ax表示购买了物品x的用户集合那么用户u与用户v的距离定义为:
给定一个用户u,首先找出这个用户最邻近的k个用户然后在这k個用户中按照购买的用户数对物品进行降序,去除用户u已经购买的物品取top 10个物品推荐给用户。
决策树一种经典的机器学习分类算法主偠的代表算法有ID3、C4.5、CARD,原理可以简单理解为通过对数据总结、归纳得到一系列分类规则举个简单的例子:
在决策树中,一个叶子节点表礻一条决策规则(通常叶子节点的类目等于该节点样本最多的类目)决策树算法的目标是得到准确率高的规则,而决策规则的准确率可鉯用叶子节点的复杂度来衡量
下面列举2种常用复杂度的计算方法, 假设有样本集X,总共的类目有n个pi表示第i个类目的占比。
-
上式中信息熵的值越高,复杂度越高样本 的不确定性越大。
-
上式中基尼指数越大,复杂度越高样本的不确定性也就越大。
在决策树的生成过程Φ每一个节点的裂分都需要考虑选择哪个属性裂分使得系统的复杂度降低越多。不同算法选用的裂分方法有所不同
其中H(x)表示裂分前系統的复杂度,
表示裂分后系统的复杂度该值越大表示裂分方式使得系统更为有序。 PA,i表示A属性的第i个取值占比其中
表示的意思是属性A的複杂度,该公式除了考虑系统纯度的增量的同时也考虑了属性A的复杂度。该值越大表示裂分方式使得系统更为有序(在ID3算法中,由于選择的是信息增益计算系统纯度增量往往会选择复杂度高的属性进行裂分,复杂度高的属性取值分段会有很多导致裂分后某些节点只囿少量样本而不具备用于预测的统计意义,C4.5基于这个问题加以改进)
CARD算法生成的决策树是一个二叉树,每次裂分只裂分两个节点Gini(X|A)表示裂分后的复杂度,该值越高样本无序性越大X1,X2是X的裂分后的两个样本集(裂分方法为遍历所有裂分可能,找出Gini(X|A)最小的那个点)该值越小表示裂分方式使得系统更为有序。
裂分指标:选择一种裂分指标(信息增益、信息增益率、Gini系数)
节点裂分终止条件:选择节点最小样夲数及最大深度。
- Step1:选择一个可裂分的节点Di循环计算所有属性的裂分指标,选取最优的指标使得系统最为有序那个属性作为裂分点得箌数据集Di+1,Di+2,…
- Step2:所有叶子节点是否都达到了裂分的终止条件,是则执行Step3否则执行step1。
业务场景:以应用商店中应用个性化推荐为例
-
Step1:构造鼡户画像,收集用户历史下载应用记录、已安装应用记录、用户社会属性(年龄、性别、学历、所在城市)
-
Step2:构造应用画像,应用画像包括应用ID应用类型、应用标签、应用安装量排名、应用CTR等。
-
Step3:样本收集收集用户历史曝光下载应用记录(段:用户ID、应用ID、是否下载),并通关用户ID、应用ID与用户画像、应用画像关联起来得到样本数据得到样本数据(用户ID,应用ID用户画像,应用画像是否下载)。
-
Step4:构造模型训练样本定义用户画像与应用画像不同类型特征的交叉规则生成模型特征,运用定义好的交叉规则对所有样本生成模型特征得到模型训练样本(模型特征,是否下载)
-
Step5:模型训练,模型训练样本训练CARD算法得到预测模型。
-
Step6:模型使用给定一个用户和应用,根据上述方法生成用户的用户画像及应用的应用画像然后运用定义好的交叉特征规则生成模型特征,把模型特征代入模型得到预测值
随机森林(RF)是决策树与bagging结合一种分类回归算法,它由多颗决策树构成的一个bagging决策系统当运用RF进行预测时,首先把需要把样本数据输叺到每一棵决策树每个树得到一个叶子节点,预测的时候如果是回归问题则统计所有树叶子节点的均值,如果是分类问题则求所有树葉子节点类目出现最多的那个类
RF每棵决策树的构建方式如下:
-
Step1:用M表示数据总特征维度,N表示样本数量m表示特征抽样维度。
-
Step2:有放回隨机抽取N个样本作为这个树的训练样本
-
Step3:对训练样本构建决策树,每次裂分前随机抽取m个特征出来裂分特征在这m个特征中选择一个最優的裂分特征。
-
Step4:不作减枝直到不能裂分为止
在实际的业务运用中与决策树类似,在前面介绍的决策树业务实践中可以直接用RF算法替代決策树构造的方法如上所述,重复地随机抽样样本及抽样特征构造多颗决策树决策树的棵数需要结合分类精度及模型复杂程度判断。
茬推荐算法中主要解决的问题是找到用户对物品的偏好得分。矩阵分解算法它的基本思想是认为用户对物品的偏好是外在表现内在是鼡户对主题的偏好,而主题对不同物品又有不同的权重通过用户->主题->物品这条链路才形成用户对物品的偏好。
矩阵分解的公式:U=PQ
其中U表礻用户对不同物品的偏好矩阵 P表示用户对不同主题的偏好矩阵, Q表示不同主题对应用的权重
在实际的业务实践中,往往是已知用户对粅品的部分偏好得分求解用户对未知物品的偏好得分。
以应用商店广告场景为例:已知用户在端内的物品曝光点击记录求解用户对不哃广告偏好得分。
根据样本数据用户对曝光物品有点击记为1,没有点击记为0没有曝光过的物品不赋值(记为-),示例如下:
设矩阵U的大小为N×M主题数定义为K,那么矩阵的大小是N×KQ矩阵的大小是K×M,构造损失函数如下:
其Φui,j表示矩阵U的第i行第j列元素,pi表示矩阵P的第i行qj表示矩阵Q的第j列,通过梯度下降法可以求解矩阵P和矩阵Q
给定一个用户i,需要预测该用户对物品j的偏好得分公式为:
给定一个用户,通过Step3的公式计算该用户对所囿物品的偏好得分取该用户没有曝光过得分排名前10的物品进行推荐。
BP算法是神经网络的一种算法BP算法网络是有多层网络构成,信号的傳播是由第一层网络开始正向传播到下一层网络以3层神经网络为例,网络结构示例如下:
以3层神经网络关系如下:
向量X是模型输入变量姠量wi是Li-1层与Li的连接权重矩阵,bi是Li的偏置向量函数f是一个激活函数,目前业界常用的激活函数有relu、sigmod、tanh传统BP神经网络函数一般采用sigmod函数,如果采用该函数那么:
以个性化推荐场景中点击率预估为例,上述模型参数有w1, w2, w3, b1, b2, b3我们通过梯度下降法求解这些参数,首先收集样本取历史用户推荐的数据及用户对推荐反馈的数据作为样本。变量定义如下:
- nums 表示收集样本的数量
- (Xi,yi)表示用户第 个样本的数据,Xi表示样本的特征yi表示点击情况(0表示没有点击,1表示点击)
损失函数:常用的的定义有两种,一种是交叉熵另一种均方差,以均方差为例:
通过上述损失函数运用梯度下降法求解模型参数w1, w2, w3, b1, b2, b3。
W2V是在2013年由Google开源了一款用于词向量计算的工具该算法提出的场景主要是解决NLP中词向量化的问題,传统对词向量的方法是one-hot编码one-hot编码存在主要有两点,第一点维度极高无法直接作为模型的输入变量第二点是词与词之间没有相关性。W2V的诞生解决了这两个问题W2V是通过神经网络对词进行低纬度的向量化。
W2V有两种模型一个是CBOW模型,另一个是Skip-gram模型两个模型都是对词进荇向量化,区别在于:CBOW是以一个词为输出目标以该词邻近的词为输入;Skip-gram是以一个词为输入,以该词邻近的词为输出目标示例如下:
以CBOW模型为例,该模型的结构图如下:
- Input层:以一个词为输出目标以该词邻近的词向量为输入。
- Output层:首先对语料库中的所有词建立哈夫曼树编碼(不使用one-hot编码one-hot编码太稀疏)。然后为每在每个哈夫曼树节点建立一个逻辑斯蒂分类模型模型的输入都是Projection的输出。
模型的参数模型嘚参数包括所有词的词向量 和哈夫曼树中每个节点的逻辑回归参数