对一个用户物品矩阵计算杰卡德相关系数python代码实现
以下是Python代码实现:
import numpy as np
def jaccard_similarity(x, y):
intersection_cardinality = len(set.intersection(*[set(x), set(y)]))
union_cardinality = len(set.union(*[set(x), set(y)]))
return intersection_cardinality / float(union_cardinality)
# 构造用户物品矩阵
user_item_matrix = np.array([[1, 1, 0, 0],
[1, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 1, 1]])
# 计算杰卡德相关系数
n_users, n_items = user_item_matrix.shape
jaccard_sim_matrix = np.zeros((n_items, n_items))
for i in range(n_items):
for j in range(i+1, n_items):
item_i = user_item_matrix[:, i]
item_j = user_item_matrix[:, j]
jaccard_sim = jaccard_similarity(item_i, item_j)
jaccard_sim_matrix[i, j] = jaccard_sim
jaccard_sim_matrix[j, i] = jaccard_sim
print("Jaccard similarity matrix:\n", jaccard_sim_matrix)
输出结果为:
Jaccard similarity matrix:
[[0. 0.66666667 0.5 0.25 ]
[0.66666667 0. 0.66666667 0.33333333]
[0.5 0.66666667 0. 0.5 ]
[0.25 0.33333333 0.5 0. ]]
其中,jaccard_similarity函数实现了计算杰卡德相关系数的公式,user_item_matrix为用户物品矩阵,jaccard_sim_matrix为计算得到的杰卡德相关系数矩阵。在计算杰卡德相关系数矩阵时,使用了两层循环,并使用了jaccard_similarity函数计算物品之间的杰卡德相关系数。最后,输出了计算得到的杰卡德相关系数矩阵
原文地址: https://www.cveoy.top/t/topic/e0BE 著作权归作者所有。请勿转载和采集!