File size: 773 Bytes
2cc98e1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import numpy as np
from sklearn.base import BaseEstimator


class SimilarityRecommender(BaseEstimator):
    def __init__(self,
                 item_embeddings: np.ndarray,
                 mask_value: float = -np.inf):

        E = np.asarray(item_embeddings, dtype=np.float64)
        self.item_embeddings = E / np.linalg.norm(E, axis=1, keepdims=True)
        self.N_, self.d_ = self.item_embeddings.shape
        self.mask_value = mask_value

    def fit(self, X=None, y=None):
        return self

    def transform(self, X):
        X = np.asarray(X, dtype=np.float64)
        U = X @ self.item_embeddings
        U /= np.linalg.norm(U, axis=1, keepdims=True)
        scores = U @ self.item_embeddings.T
        scores[X != 0] = self.mask_value
        return scores