Esempio n. 1
0
    def build(self):
        self._model = LightFM(no_components=self.rank,
                              item_alpha=self.item_alpha,
                              user_alpha=self.user_alpha,
                              loss=self.loss,
                              learning_rate=self.learning_rate,
                              learning_schedule=self.learning_schedule,
                              max_sampled=self.max_sampled,
                              random_state=self.seed)
        fit = getattr(self._model, self.fit_method)

        matrix = self.get_training_matrix()

        if self.item_features is not None:
            item_features = self.item_features.reindex(
                self.data.index.itemid.old.values, fill_value=[])
            self._item_features_csr, self.item_feature_labels = stack_features(
                item_features,
                add_identity=self.item_identity,
                normalize=True,
                dtype='f4')
        if self.user_features is not None:
            user_features = self.user_features.reindex(
                self.data.index.userid.training.old.values, fill_value=[])
            self._user_features_csr, self.user_feature_labels = stack_features(
                user_features,
                add_identity=self.user_identity,
                normalize=True,
                dtype='f4')

        with Timer(self.method, verbose=self.verbose):
            fit(matrix,
                item_features=self._item_features_csr,
                user_features=self._user_features_csr)
Esempio n. 2
0
    def build(self):
        user_item_matrix = self.get_training_matrix()
        if self.implicit:
            # np.sign allows for negative values as well
            user_item_matrix.data = np.sign(user_item_matrix.data)

        with Timer(self.method, verbose=self.verbose):
            i2i_matrix = user_item_matrix.T.dot(user_item_matrix)  # gives CSC format
            i2i_matrix.setdiag(0)  # exclude "self-links"
            i2i_matrix.eliminate_zeros()

        self._i2i_matrix = i2i_matrix
Esempio n. 3
0
    def build(self):
        # define iALS model instance
        self._model = implicit.als.AlternatingLeastSquares(factors=self.rank,
                                                           regularization=self.regularization,
                                                           iterations=self.num_epochs)

        # prepare input matrix for learning the model
        matrix = self.get_training_matrix() # user_by_item sparse matrix
        matrix.data = self.confidence(matrix.data, alpha=self.alpha, weight=self.weight_func)

        with Timer(self.method, verbose=self.verbose):
            # build the model
            # implicit takes item_by_user matrix as input, need to transpose
            self._model.fit(matrix.T)
Esempio n. 4
0
    def build(self):
        idx, val, shp = self.data.to_coo(tensor_mode=True)

        with Timer(self.method, verbose=self.verbose):
            users_factors, items_factors, feedback_factors, core = \
                tucker_als(idx, val, shp, self.mlrank,
                           growth_tol=self.growth_tol,
                           iters=self.num_iters,
                           batch_run=not self.show_output)

        self.factors[self.data.fields.userid] = users_factors
        self.factors[self.data.fields.itemid] = items_factors
        self.factors[self.data.fields.feedback] = feedback_factors
        self.factors['core'] = core
Esempio n. 5
0
    def build(self):
        idx, val, shp = self.data.to_coo(tensor_mode=True)

        with Timer(self.method, verbose=self.verbose):
            (users_factors, items_factors, feedback_factors,
             core) = hooi(idx,
                          val,
                          shp,
                          self.mlrank,
                          growth_tol=self.growth_tol,
                          num_iters=self.num_iters,
                          verbose=self.show_output,
                          parallel_ttm=self.parallel_ttm,
                          seed=self.seed)

        self.factors[self.data.fields.userid] = users_factors
        self.factors[self.data.fields.itemid] = items_factors
        self.factors[self.data.fields.feedback] = feedback_factors
        self.factors['core'] = core
Esempio n. 6
0
    def build(self, operator=None, return_factors='vh'):
        if operator is not None:
            svd_matrix = operator
        else:
            svd_matrix = self.get_training_matrix(dtype=np.float64)

        svd_params = dict(k=self.rank, return_singular_vectors=return_factors)

        with Timer(self.method, verbose=self.verbose):
            user_factors, sigma, item_factors = svds(svd_matrix, **svd_params)

        if user_factors is not None:
            user_factors = np.ascontiguousarray(user_factors[:, ::-1])
        if item_factors is not None:
            item_factors = np.ascontiguousarray(item_factors[::-1, :]).T
        if sigma is not None:
            sigma = np.ascontiguousarray(sigma[::-1])

        self.factors[self.data.fields.userid] = user_factors
        self.factors[self.data.fields.itemid] = item_factors
        self.factors['singular_values'] = sigma