目录
常用相似度计算公式
协同过滤算法中最重要的部分是要计算物品间的相似度,对于不同的场景,可以应用不同的相似度计算公式来计算相似度,常用的相似度计算公式如下所示:
同现相似度(Co Occurrence)
同现相似度公式
w ( x , y ) = ∣ N ( x ) ∩ N ( y ) ∣ ∣ N ( x ) ∣ w(x,y)=\frac{|N(x)\cap{N(y)}|}{|N(x)|} w(x,y)=∣N(x)∣∣N(x)∩N(y)∣
公式中分母是喜欢物品x的用户数,而分子则是同时对物品x和物品y感兴趣的用户数。因此,上述公式可用理解为对物品x感兴趣的用户有多大概率也对y感兴趣 (和关联规则类似)
但上述的公式存在一个问题,如果物品y是热门物品,有很多人都喜欢,则会导致W(x, y)很大,接近于1。因此会造成任何物品都和热门物品交有很大的相似度。为此我们用如下公式进行修正:
改进的同现相似度公式
w ( x , y ) = ∣ N ( x ) ∩ N ( y ) ∣ ∣ N ( x ) ∣ ∣ N ( y ) ∣ w(x,y)=\frac{|N(x)\cap{N(y)}|}{\sqrt{|N(x)||N(y)|}} w(x,y)=∣N(x)∣∣N(y)∣∣N(x)∩N(y)∣
这个格式惩罚了物品y的权重,因此减轻了热门物品和很多物品相似的可能性。(也归一化了)
欧几里得相似度(Eucledian Similarity)
欧几里得相似度根据欧几里得距离计算而来,距离越近相似度越高,反之相反。
欧几里得距离公式
d X , Y = ∑ i = 1 n ( x i − y i ) 2 \ d_{X,Y}=\sqrt{ \sum_{i=1}^n(x_i-y_i)^2} dX,Y=i=1∑n(xi−yi)2
皮尔逊相似度
皮尔逊相关系数,即概率论中的相关系数,取值范围[-1,+1]。当大于零时,两个变量正相关,当小于零时表示两个向量负相关。
皮尔逊积矩相关系数公式
ρ X , Y = c o v ( X , Y ) σ x σ y = E ( ( X − μ x ) ( Y − μ y ) ) σ x σ y = E ( X Y ) − E ( X ) E ( Y ) E ( X 2 ) − E 2 ( X ) E ( Y 2 ) − E 2 ( Y ) \rho_{X,Y}=\frac{cov(X,Y)}{\sigma_{x}\sigma_{y}}=\frac{E((X-\mu_x)(Y-\mu_y))}{\sigma_{x}\sigma_{y}}=\frac{E(XY)-E(X)E(Y)}{\sqrt{E(X^2)-E^2(X)}\sqrt{E(Y^2)-E^2(Y)}} ρX,Y=σxσycov(X,Y)=σxσyE((X−μx)(Y−μy))=E(X2)−E2(X)E(Y2)−E2(Y)E(XY)−E(X)E(Y)
余弦相似度(Cosine Similarity)
利用多维空间两点与所设定的点形成夹角的余弦值范围为[-1,1],值越大,说明夹角越大,两点相距就越远,相似度就越小。
余弦计算公式
s i m X , Y = X Y ∣ ∣ X ∣ ∣ ∣ ∣ Y ∣ ∣ = ∑ i = 1 n ( x i y i ) ∑ i = 1 n ( x i ) 2 ∗ ∑ i = 1 n ( y i ) 2 sim_{X,Y}=\frac{XY}{||X||||Y||}=\frac{ \sum_{i=1}^n(x_iy_i)}{\sqrt{\sum_{i=1}^n(x_i)^2}*\sqrt{\sum_{i=1}^n(y_i)^2}} simX,Y=∣∣X∣∣∣∣Y∣∣XY=∑i=1n(xi)2∗∑i=1n(yi)2∑i=1n(xiyi)
Tanimoto 相似度(Jaccard 系数)
Tanimoto相似度也称为Jaccard系数,是Cosine相似度扩展,多用于文档相似度就算。此相似度不考虑评价值,只考虑两个集合共同个体数量。
Jaccard 系数公式
s i m ( x , y ) = X ∩ Y ∣ ∣ X ∣ ∣ + ∣ ∣ Y ∣ ∣ − ∣ ∣ X ∩ Y ∣ ∣ sim(x,y)=\frac{X\cap{Y}}{||X||+||Y||-||X\cap{Y}||} sim(x,y)=∣∣X∣∣+∣∣Y∣∣−∣∣X∩Y∣∣X∩Y