用户\物品 | A | B | C | D | E |
101 | 1 | 1 | 0 | 0 | 1 |
102 | 0 | 1 | 0 | 1 | 0 |
103 | 1 | 1 | 1 | 1 | 1 |
104 | 1 | 1 | 0 | 1 | 0 |
105 | 1 | 1 | 0 | 0 | 1 |
106 | 0 | 0 | 0 | 1 | 0 |
107 | 1 | 0 | 0 | 0 | 0 |
从物品->用户矩阵,来计算物品相似度矩阵
Matlab代码计算A、C的相似度:
A=[
1 0 1 1 1 0 1;
0 0 1 0 0 0 0]
D=pdist(A,'jaccard')
coefficient=1-D
得到Jaccard距离和Jaccard系数
D =
0.8000
coefficient =
0.2000
Python代码计算C、A的相似度:
matV = mat([[0,0,1,0,0,0,0],[1,0,1,1,1,0,1]])
print ("CA的jaccard系数:", 1-dist.pdist(matV,'jaccard'))
得到
CA的jaccard系数: [ 0.2]
手算
A向量: 1 0 1 1 1 0 1
C向量:0 0 1 0 0 0 0
A∩C=
A∪C不是7,而是如下:
A、C都是零的不算入并集内
所以最后结果是1/5=0.2
与百度解释吻合:
http://baike.baidu.com/link?url=5E1CRNk--Dt_gNfN30s748fkQfJgXpunsq9OnnGzhkHv5boY9fLvbsEl3JjMBkosh7qC48NcG96f7CwhfHX5MTq-A7oQmXzlJfAshM_thWg2C8H8jNY0TCF41WFd70Xd