以下是计算一个用户物品二元矩阵的杰卡德相关系数的 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录