目录
一、相似度计算方法
1.1欧几里得距离(欧氏距离)
最初用于计算欧几里德空间中两个点的距离,假设 x,y 是 n 维空间的两个点,它们之间的欧几里德距离是:
可以看出,当 n=2 时,欧几里德距离就是平面上两个点的距离。当用欧几里德距离表示相似度,一般采用以下公式进行转换:距离越小,相似度越大。
类名:EuclideanDistanceSimilarity
原理:利用欧式距离d定义的相似度s,s=1 / (1+d)。
范围:[0,1],值越大,说明d越小,也就是距离越近,则相似度越大。
说明:同皮尔森相似度一样,该相似度也没有考虑重叠数对结果的影响,同样地,Mahout通 过增加一个枚举类型(Weighting)的参数来使得重叠数也成为计算相似度的影响因子。
公式如下:
1.2皮尔逊相关系数(百度用来判断tiele相似度的算法)
皮尔逊相关系数一般用于计算两个定距变量间联系的紧密程度,它的取值在 [-1,+1] 之间。 sx, sy是 x 和 y 的样品标准偏差。
类名:PearsonCorrelationSimilarity
原理:用来反映两个变量线性相关程度的统计量
范围:[-1,1],绝对值越大,说明相关性越强,负相关对于推荐的意义小。
说明:1、 不考虑重叠的数量;2、 如果只有一项重叠,无法计算相似性(计算过程被除数有n-1);3、 如果重叠的值都相等,也无法计算相似性(标准差为0,做除数)。
该相似度并不是最好的选择,也不是最坏的选择,只是因为其容易理解,在早期研究中经常被提起。使用Pearson线性相关系数必须假设数据是成对地从正态分布中取得的,并且数据至少在逻辑范畴内必须是等间距的数据。Mahout中,为皮尔森相关计算提供了一个扩展,通过增加一个枚举类型(Weighting)的参数来使得重叠数也成为计算相似度的影响因子。
公式如下:
1.3 Cosine 相似度
Cosine 相似度被广泛应用于计算文档数据的相似度:
类名: UncenteredCosineSimilarity
原理:多维空间两点与所设定的点形成夹角的余弦值。
范围:[-1,1],值越大,说明夹角越大,两点相距就越远,相似度就越小。
说明:在数学表达中,如果对两个项的属性进行了数据中心化,计算出来的余弦相似度和皮尔森相似度是一样的,在mahout中,实现了数据中心化的过程,所以皮尔森相似度值也是数据中心化后的余弦相似度。另外在新版本中,Mahout提供了UncenteredCosineSimilarity类作为计算非中心化数据的余弦相似度。
公式如下ss:
二、协同过滤
2.1基于用户的协同过滤(用的很少了)
例如有3个用户对4个产品进行打分如下所示:
A,B,C可以组成评分向量与购买向量。通过相似度计算,A与B,C比较可以发现,A与C最近,例如C买了物品A,C,D,而用户A买了A,C所以可以将D推荐给用户A
2.1.1 基于用户的协同过滤要解决的问题
(1)已知用户的评分矩阵Matrix R(一般都是非常稀疏的)
(2)我们需要推断出矩阵中空格empty cells 处的值
2.1.2 基于用户协同过滤要解决的问题
(1)对于一个新用户(什么都没有购买)很难找到邻居用户(不好推荐)
(2)对于一个物品(好的物品,也是用户需要的),所有最近的邻居都在其上没有多少打分(但是恰巧最近的邻居都没有买这个物品,那么这个好物品就卖不出去了)
2.1.3 针对存在问题的基础解决方案
(1)相似度计算最好使用皮尔逊相似度
(2)考虑共同打分物体的数目,如乘上min(n,N)/N 其中n表示共同打分数,N表示指定的阈值
(3)对打分进行归一化处理
(4)设置一个相似度阈值
2.1.4 基于用户的协同过滤为什么不流行
(1)稀疏问题:由于商品的数量太多,而人购买的少,所以对于某一个商品的评价矩阵大多数都是0,只有少数的1
(2)由于协同过滤是基于统计的方式进行计算的,对于数百万的用户两两之间计算相似度,计算量太大
(3)人是善变的,今天喜欢,过几天就不喜欢了
2.2 基于物品的协同过滤
有三个用户对三个物品的评分如下:
通过相似度计算发现物品A和物品C的相似度最高,因此我们就可以把物品C推荐给用户C
2.2.1 基于物品协同过滤的优势
(1)计算性能高,通常用户的数量远大于物品的数量
(2)可预先计算保留,物品并不善变
2.2.2 基于物品协同过滤的案例分析
有六个电源,12个用户对其进行打分如下所示:
例如我现在想知道第五个用户是否喜欢第一类电源?
假如计算大于3.5表示喜欢,则进行推荐,否则表示不喜欢不进行推荐
step1:计算相似度(选取皮尔森相似度)。上图中右图表示计算出的相似度,正的表示正相关,负的表示负相关
step2:判断。通过观察发现最大的相似度是0.41 和0.59
step3:计算
step4:结论。发现2.6<3.5小于定的阈值所有不推荐。
2.3 基于用户和物品的协同过滤算法比较
三、冷启动问题
由于在协同过滤的时候,不管是基于用户的协同过滤还是基于物品的都是在乎的是评分,而没用在意物品的内在属性。所以两者协同过滤方式都存在冷启动问题。
参考资料:
https://www.cnblogs.com/luodaxia/p/12699545.html