本帖最后由 喵十八 于 2018-10-30 08:25 编辑
问题导读
1. 协同过滤算法中的相似度计算公式有哪些?
2. 这些相似度计算公式的含义是什么?
3. 如何改进相似度计算公式?
关注最新经典文章,欢迎关注公众号
综述
对于协同过滤的推荐方法来说,最核心、重要的算法是相似度计算方法。具体的实现方法有很多种,最常用的方法有余弦相似度、Jaccard相似度等。Google对新闻的相似性计算采用的就是余弦相似度。 下面对各个相似度的计算方式及其改进,分别进行描述。
Jaccard 相似度
狭义Jaccard 相似度
杰卡德相似度(Jaccard similarity coefficient),也称杰卡德指数(Jaccard Index),是用来衡量两个集合相似度的一种指标。Jaccard相似指数用来度量两个集合之间的相似性,它被定义为两个集合交集的元素个数除以并集的元素个数。 计算公式如下:
如果 A,B都为空,则定义J(A,B) = 1
Jaccard 距离
用来计算样本集合之间的距离 即不相似的程度。定义如下
Jaccard距离也可以理解为两个样本集合并集和交集的差集除以两个样本的并集。即:
距离是所有有限集合上的一个指标。
扩展到测度
此外,还有关于测度的一个Jaccard距离版本。包括概率测度。 假设μ是定义在测度空间X上的测度,定义Jaccard相似度为
对应的Jaccard 距离为:
一个非对称(注意这里强调非对称)二元属性的相似度
在数据挖掘领域,常常需要比较两个具有布尔值属性的对象之间的距离,Jaccard距离就是常用的一种方法。给定两个比较对象A,B。A, B 均有n个二元属性,即每个属性取值为{0,1}。定义如下4个统计量:
:A,B属性值同时为0的属性个数
:A属性值为0且B属性值为1的属性个数
:A属性值为1且B属性值为0的属性个数
:A,B属性值同时为1的属性个数
如下图所示:
显然有:
Jaccard 相似度为:
Jaccard 距离为:
广义Jaccard相似度
给定两个n维向量 则 Jaccard 相似度定义如下:
给定两个关于 的非负函数 f 和 g ,则 Jaccard 系数定义如下:
在sklearn中实现
[mw_shl_code=python,true]
import numpy as np
from sklearn.metrics import jaccard_similarity_score
y_pred = [0, 2, 1, 3]
y_true = [0, 1, 2, 3]
jaccard_similarity_score(y_true, y_pred)
[/mw_shl_code]
余弦相似度
将向量根据坐标值,绘制到向量空间中。如最常见的二维空间。
求得他们的夹角,并得出夹角对应的余弦值,此余弦值就可以用来表征,这两个向量的相似性。夹角越小,余弦值越接近于1,它们的方向更加吻合,则越相似。 计算公式如下:
sklearn中实现余弦相似度
[mw_shl_code=python,true]from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
x=np.array([[3,4],[1,0]])
X=np.mat(x)
sim1=cosine_similarity(X)[/mw_shl_code]
User-IIF
使用余弦相似度是非常粗糙的。 以图书为例,如果两个用户都曾经买过《新华字典》,这丝毫不能说明他们兴趣相似,因为绝大多数中国人小时候都买过《新华字典》。但如果两个用户都买过《数据挖掘导论》,那可以认为他们的兴趣比较相似,因为只有研究数据挖掘的人才会买这本书。换句话说,两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。
因此, John S. Breese 提出了如下公式:
公式通过 惩罚项,惩罚了用户u和用户v共同兴趣列表中热门物品对他们相似度的影响 。
IUF
假设有这么一个用户,他是开书店的,并且买了当当网上80%的书准备用来自己卖。那么,他的购物车里包含当当网80%的书。假设当当网有100万本书,也就是说他买了80万本。这意味着存在这么一个用户,有80万本书两两之间就产生了相似度,也就是说,内存里即将诞生一个80万乘80万的稠密矩阵。
另外可以看到,这个用户虽然活跃,但是买这些书并非都是出于自身的兴趣,而且这些书覆盖了当当网图书的很多领域,所以这个用户对于他所购买书的两两相似度的贡献应该远远小于一
个只买了十几本自己喜欢的书的文学青年 。
John S. Breese在论文中提出了一个称为IUF(Inverse User Frequence),即用户活跃度对数的倒数的参数,他也认为活跃用户对物品相似度的贡献应该小于不活跃的用户,他提出应该增加IUF参数来修正物品相似度的计算公式 如下:
|
|