File size: 1,008 Bytes
133a630
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity as sklearn_cosine


def cosine_similarity(matrix):
    return sklearn_cosine(matrix)


def pearson_similarity(matrix):
    matrix_centered = matrix - np.nanmean(matrix, axis=1, keepdims=True)
    matrix_centered = np.nan_to_num(matrix_centered, nan=0.0)
    mask = ~np.isnan(matrix)
    with np.errstate(divide="ignore", invalid="ignore"):
        norm = np.sqrt(np.nansum(matrix_centered ** 2, axis=1, keepdims=True))
        norm[norm == 0] = 1
        matrix_norm = matrix_centered / norm
    return matrix_norm @ matrix_norm.T


def adjusted_cosine_similarity(matrix):
    user_mean = np.nanmean(matrix, axis=1, keepdims=True)
    matrix_centered = matrix - user_mean
    matrix_centered = np.nan_to_num(matrix_centered, nan=0.0)
    return sklearn_cosine(matrix_centered.T)


def jaccard_similarity(set1, set2):
    intersection = len(set1 & set2)
    union = len(set1 | set2)
    return intersection / union if union > 0 else 0