TasteEngine / utils /similarity.py
Abdallah4z's picture
Initial implementation of TasteEngine: multi-approach recommender system with Flask web UI, evaluation suite, and explanation engine
133a630
Raw History Blame Contribute Delete
1.01 kB
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