Python 代码实现用户物品二元矩阵的杰卡德相似度计算
以下是计算一个用户物品二元矩阵的杰卡德相关系数的 Python 代码实现:
import numpy as np
def jaccard_similarity(user_item_matrix):
'''
计算用户物品二元矩阵的杰卡德相关系数
:param user_item_matrix: 用户物品二元矩阵,每行代表一个用户,每列代表一个物品
:return: 一个n*n的矩阵,其中n为用户数,矩阵中的每个元素代表两个用户之间的杰卡德相关系数
'''
n_users = user_item_matrix.shape[0]
# 计算每个用户的物品集合
user_sets = [set(np.where(user_item_matrix[i, :] == 1)[0]) for i in range(n_users)]
# 初始化杰卡德相关系数矩阵
jaccard_matrix = np.zeros((n_users, n_users))
# 计算杰卡德相关系数矩阵
for i in range(n_users):
for j in range(i+1, n_users):
common_items = user_sets[i].intersection(user_sets[j])
union_items = user_sets[i].union(user_sets[j])
jaccard_matrix[i, j] = len(common_items) / len(union_items)
jaccard_matrix[j, i] = jaccard_matrix[i, j]
return jaccard_matrix
使用示例:
user_item_matrix = np.array([[1, 0, 1, 0], [1, 1, 0, 1], [0, 1, 1, 0], [1, 0, 0, 1]])
jaccard_matrix = jaccard_similarity(user_item_matrix)
print(jaccard_matrix)
输出结果:
[[0. 0.33333333 0. 0.5 ]
[0.33333333 0. 0.5 0. ]
[0. 0.5 0. 0.33333333]
[0.5 0. 0.33333333 0. ]]
原文地址: https://www.cveoy.top/t/topic/n0Rx 著作权归作者所有。请勿转载和采集!