Spaces:
Sleeping
Sleeping
Initial implementation of TasteEngine: multi-approach recommender system with Flask web UI, evaluation suite, and explanation engine
133a630 Download utils/similarity.py from Abdallah4Zain/TasteEngine: direct link, hf CLI and curl.
- Browser
- Download file 1.01 kB
-
https://huggingface.co/spaces/Abdallah4Zain/TasteEngine/resolve/main/utils/similarity.py
- Command line
-
hf download hf://spaces/Abdallah4Zain/TasteEngine/utils/similarity.py
-
curl -L -o similarity.py https://huggingface.co/spaces/Abdallah4Zain/TasteEngine/resolve/main/utils/similarity.py
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 | |