网页模板网站有那些,网站建设与设计毕业shej,wordpress适合做博客的主题,舆情分析师招聘协同过滤
协同过滤算法一般是通过用户之前的喜好或者相似的用户的喜好来推荐商品
基于领域的协同过滤算法一般有两种算法#xff1a;
基于用户的协同过滤算法(UserCF):基于与用户相似用户的喜好进行推荐基于物品的协同过滤算法(ItemCF):基于用户喜好的物品寻找相似的物品进…
协同过滤
协同过滤算法一般是通过用户之前的喜好或者相似的用户的喜好来推荐商品
基于领域的协同过滤算法一般有两种算法
基于用户的协同过滤算法(UserCF):基于与用户相似用户的喜好进行推荐基于物品的协同过滤算法(ItemCF):基于用户喜好的物品寻找相似的物品进行推荐
对于以上两种算法而言我们要进行相似性的对比首先需要进行相似度的计算为相似度的计算可以使用以下方法。
相似性度量方法
相似度度量可以使用很多指标其本质还是计算不同事物之间的距离那么距离越大相似性越小距离越小相似性越大那么除了学习资料中提到的3个系数之外我觉得也可以使用欧式距离曼哈顿距离切比雪夫距离等等。但在这里我就只说明学习资料中几个系数。其他指标可以参考https://www.cnblogs.com/duanchw-37/archive/2012/08/24/2654019.html
杰卡德相似系数给出定义
simuv∣N(u)∩N(v)∣∣N(u)∣∪∣N(v)∣sim_{uv} \frac{|N(u) \cap N(v)|}{|N(u)| \cup |N(v)|}simuv∣N(u)∣∪∣N(v)∣∣N(u)∩N(v)∣
其中N(u)代表喜欢物品u的用户的集合
余弦相似度
余弦相似度可以抽象的想象以下两个向量在坐标系中的余弦夹角越小那么它们的角度的余弦值就越接近于1所以可以给出定义:
simuv∣N(u)∣∩∣N(v)∣∣N(u)⋅∣N(v)∣sim_{uv} \frac{|N(u)| \cap |N(v)|}{\sqrt{|N(u) \cdot |N(v)|}}simuv∣N(u)⋅∣N(v)∣∣N(u)∣∩∣N(v)∣
与杰卡德系数相比余弦相似度的改变在于将分母中的“并”改变为“乘”
python中提供了计算余弦相似度的函数
from sklearn.metrics.pairwise import cosine_similarityi [1, 0, 0, 0]
j [1, 0.5, 0.5, 0]cosine_similarity([a,b])皮尔逊相关系数
皮尔逊相关系数在统计学中经常被提到在这里也很好理解用来解释两个事物之间的相关性所以可以作为相似性度量的一个指标。对于相关系数的理解我们利用概率论与数理统计中的协方差进行理解下面给出定义
sim(u,v)∑i∈I(rui−r‾u)(rvi−r‾v)∑i∈I(rui−r‾u)2∑i∈I(rvi−r‾v)2sim(u,v) \frac{\sum_{i\in I}(r_{ui}-\overline{r}_u)(r_{vi}-\overline{r}_v)}{\sqrt{\sum_{i\in I}(r_{ui}-\overline{r}_u)^2}\sqrt{\sum_{i\in I}(r_{vi}-\overline{r}_v)^2}}sim(u,v)∑i∈I(rui−ru)2∑i∈I(rvi−rv)2∑i∈I(rui−ru)(rvi−rv)
其中r‾u\overline{r}_uru表示为用户打的所有分数的期望/物品被打的所有分的期望。
其中皮尔逊相关系数可以结合余弦相似度的计算方法
计算r‾u与r‾v→将余弦相似度的计算公式中的分子改成减去r‾u和r‾v计算\overline{r}_u与\overline{r}_v \rightarrow 将余弦相似度的计算公式中的分子改成减去\overline{r}_u和\overline{r}_v计算ru与rv→将余弦相似度的计算公式中的分子改成减去ru和rv
python中也给出了计算皮尔逊相关系数的函数
from scipy.stats import pearsonri [1, 0, 0, 0]
j [1, 0.5, 0.5, 0]
pearsonr(i, j)当然我们也可以直接使用numpy库中的coefcorr函数进行计算
import numpy as npi [1, 0, 0, 0]
j [1, 0.5, 0.5 , 0]
np.coefcorr(i, j)给出一个三个相似性度量系数的比较
杰卡德系数余弦相似度皮尔逊相关系数利用两个集合之间的交集来显示集合之间的相互覆盖率来体现集合间的相似度利用特征向量之间的夹角来体现两个集合之间的相似度在余弦相似度的基础上利用了期望的信息进行修正减小了用户评分偏置的影响。
基于用户的协同过滤——UserCF
UserCF的主要思想是对于一个用户找到与其相似的用户将该用户喜好的物品推荐给该用户。
所以首要目的即找到一个与当前用户相似的用户集合。
给出一个例子进行解释
物品1物品2物品3物品4物品5Alice5344?用户131233用户243435用户333154用户415521
对于这个例子来说因为在这里物品5对于Alice而言是缺失的那么每个用户的特征向量其实就只有4个维度那么我们下面我们分别用余弦相似度和皮尔逊相似度去计算一下用户之间的相似度。 利用余弦相似度计算 利用皮尔逊相关系数计算 计算出用户之间的相似度之后此时我们需要补全二维表格中空缺的那个值一般可以我们可以取与Alice相似的N个用户的评分的平均值但是这样子无法保证用户的标准相同所以在这里我们不采用该种方法于是我们将用户打分的均值利用进来有如下公式 Ri,jRi‾∑k1n(Si,k(Rk,j−R‾k))∑k1nSj,kR_{i,j} \overline{R_i} \frac{\sum_{k1}^n(S_{i,k}(R_{k,j}-\overline{R}_k))}{\sum_{k1}^n S_{j,k}}Ri,jRi∑k1nSj,k∑k1n(Si,k(Rk,j−Rk)) 其中Ri,jR_{i,j}Ri,j为用户i对物品j的打分R‾i\overline{R}_iRi是用户i对所有物品打分的平均值,Si,kS_{i,k}Si,k为用户i与k的相似度(在这里我们利用用户之间的相似度进行加权求和)。 假设我们取前2个最相似用户那么如果采用余弦相似度皮尔逊相关系数也是相同步骤去计算用户相似度那么有用户1和用户2与Alice最相似于是我们利用他们两个的评分去计算缺失得分。 利用上面的公式我们可以计算出其得分为4.87 利用计算出的得分我们可以对多个物品进行排序其中有
物品1物品2物品3物品4物品5Alice53444.87
于是推荐顺序为15342
下面谈谈UserCF的缺点
对于UserCF而言要求用户之间相似但是比如说利用用户打分的特征向量不同用户之间的购买物品的重复率可能较低导致无法找到较相似的用户或者足够数量的用户所以对于正反馈获取困难的场景UserCF并不适用维护相似度矩阵的开销较大不适合大用户数据量
基于物品的协同过滤——ItemCF
基于物品的协同过滤ItemCF利用用户过去的数据去为用户推荐物品即利用物品之间的相似性去进行推荐而不是利用用户之间的相似性去推荐商品。算法认为物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都喜欢物品B对于物品的打分而言 还是用UserCF的例子来解释
物品1物品2物品3物品4物品5Alice5344?用户131233用户243435用户333154用户415521
在这里如何评判物品之间的相似度呢我们以每个用户为该物品打的分为特征。如物品1的特征向量为(3,4,3,1)(3, 4, 3, 1)(3,4,3,1)因为Alice对物品5的打分缺失所以在这里Alice的打分在计算相似度时并不用计算入。 那么在这里我们还是利用余弦相似度进行物品相似度的计算
在这里我们要计算物品5与其他物品的相似度所以观察结果可以发现物品5与其他几个物品的相似度分别为0.994,0.739,0.723,0.9400.994, 0.739, 0.723, 0.9400.994,0.739,0.723,0.940所以选择相似度较高的前两个物品即物品1和4。 同样的我们利用 Ri,jRi‾∑k1n(Si,k(Rk,j−R‾k))∑k1nSj,kR_{i,j} \overline{R_i} \frac{\sum_{k1}^n(S_{i,k}(R_{k,j}-\overline{R}_k))}{\sum_{k1}^n S_{j,k}}Ri,jRi∑k1nSj,k∑k1n(Si,k(Rk,j−Rk)) 去计算缺失数据此时Si,jS_{i,j}Si,j的值代表物品i与j的相似度则最终我们可以计算出来得分为4.6 那么将得分排序
物品1物品2物品3物品4物品5Alice53444.6
则选取两个物品进行推荐我们选择物品1和物品5
协同过滤算法的改进
对于协同过滤算法我们可以对其的相关度的计算方法进行改进
对于一号计算相关度的公式如果物品i很受欢迎那很多喜欢物品j的人也喜欢物品i那么wijw_{ij}wij就会变得很大那么对于物品i而言很多物品和物品i的相关度都会很大即存在不合理性所以我们可以引入N(j)N(j)N(j)来惩罚物品i的热度如二号所示但是如果物品i十分受欢迎导致所有人都会买i那么wijw_{ij}wij还是会很大俗称Harry Potter Problem所以在这里我们控制N(j)N(j)N(j)和N(i)N(i)N(i)的权重来定制不同的惩罚程度如三号所示。 此外对于ItemCF而言我们需要对用户活跃度进行惩罚存在刷单现象仅针对ItemCF所以出现四号的计算方法。 解释一下第四个式子N(u)N(u)N(u)在这里代表用户uuu的活跃程度那么对于既喜欢物品iii又喜欢物品jjj的用户而言如果用户uuu的活跃度越高那么这个用户的评价的权重就越低。 协同过滤算法的分析
协同过滤算法存在泛化能力弱的问题导致协同过滤算法无法将相似物品的相似信息推广到其他物品上(这么解释就是两个物品我们知道他们很相似但是为什么相似我们是不知道的所以无法利用这两个物品之间的相似程度去为其他物品之间是否相似提供信息我们只能单纯地知道它们相似)从而导致热门物体具有较强的头部效应导致它和其他很多物品相似而尾部物品由于特征向量稀疏导致不经常被推荐。不过话虽然这么说但是不是有个指标叫新颖程度吗那尾部物品的新颖程度应该比较高吧那这样它作为指标的话尾部物品还是很大程度可以占用一定比例的。 个人觉得还是因为协同过滤算法并没有用上语义的信息只能单纯的依赖其他信息。
参考资料
https://www.cnblogs.com/duanchw-37/archive/2012/08/24/2654019.html