예제 #1
0
    def fit(self, train_set):
        """Fit the model to observations.

        Parameters
        ----------
        train_set: object of type TrainSet, required
            An object contraining the user-item preference in csr scipy sparse format,\
            as well as some useful attributes such as mappings to the original user/item ids.\
            Please refer to the class TrainSet in the "data" module for details.
        """

        Recommender.fit(self, train_set)
        X = sp.csc_matrix(self.train_set.matrix)

        # recover the striplet sparse format from csc sparse matrix X (needed to feed c++)
        (rid, cid, val) = sp.find(X)
        val = np.array(val, dtype='float32')
        rid = np.array(rid, dtype='int32')
        cid = np.array(cid, dtype='int32')
        tX = np.concatenate((np.concatenate(
            ([rid], [cid]), axis=0).T, val.reshape((len(val), 1))),
                            axis=1)
        del rid, cid, val

        if self.trainable:
            if self.hierarchical:
                res = hpf.hpf(tX, X.shape[0], X.shape[1], self.k,
                              self.max_iter, self.init_params)
            else:
                res = hpf.pf(tX, X.shape[0], X.shape[1], self.k, self.max_iter,
                             self.init_params)
            self.Theta = np.asarray(res['Z'])
            self.Beta = np.asarray(res['W'])
        elif self.verbose:
            print('%s is trained already (trainable = False)' % (self.name))
예제 #2
0
    def fit(self, train_set, val_set=None):
        """Fit the model to observations.

        Parameters
        ----------
        train_set: :obj:`cornac.data.Dataset`, required
            User-Item preference data as well as additional modalities.

        val_set: :obj:`cornac.data.Dataset`, optional, default: None
            User-Item preference data for model selection purposes (e.g., early stopping).

        Returns
        -------
        self : object
        """
        Recommender.fit(self, train_set, val_set)

        if self.trainable:
            # use pre-trained params if exists, otherwise from constructor
            init_params = {
                "G_s": self.Gs,
                "G_r": self.Gr,
                "L_s": self.Ls,
                "L_r": self.Lr,
            }

            X = sp.csc_matrix(self.train_set.matrix)
            # recover the striplet sparse format from csc sparse matrix X (needed to feed c++)
            (rid, cid, val) = sp.find(X)
            val = np.array(val, dtype="float32")
            rid = np.array(rid, dtype="int32")
            cid = np.array(cid, dtype="int32")
            tX = np.concatenate(
                (np.concatenate(
                    ([rid], [cid]), axis=0).T, val.reshape((len(val), 1))),
                axis=1,
            )
            del rid, cid, val

            if self.hierarchical:
                res = hpf.hpf(tX, X.shape[0], X.shape[1], self.k,
                              self.max_iter, self.seed, init_params)
            else:
                res = hpf.pf(tX, X.shape[0], X.shape[1], self.k, self.max_iter,
                             self.seed, init_params)
            self.Theta = np.asarray(res["Z"])
            self.Beta = np.asarray(res["W"])

            # overwrite init_params for future fine-tuning
            self.Gs = np.asarray(res["G_s"])
            self.Gr = np.asarray(res["G_r"])
            self.Ls = np.asarray(res["L_s"])
            self.Lr = np.asarray(res["L_r"])

        elif self.verbose:
            print("%s is trained already (trainable = False)" % (self.name))

        return self
예제 #3
0
    def fit(self, train_set, val_set=None):
        """Fit the model to observations.

        Parameters
        ----------
        train_set: :obj:`cornac.data.Dataset`, required
            User-Item preference data as well as additional modalities.

        val_set: :obj:`cornac.data.Dataset`, optional, default: None
            User-Item preference data for model selection purposes (e.g., early stopping).

        Returns
        -------
        self : object
        """
        Recommender.fit(self, train_set, val_set)
        X = sp.csc_matrix(self.train_set.matrix)

        # recover the striplet sparse format from csc sparse matrix X (needed to feed c++)
        (rid, cid, val) = sp.find(X)
        val = np.array(val, dtype='float32')
        rid = np.array(rid, dtype='int32')
        cid = np.array(cid, dtype='int32')
        tX = np.concatenate((np.concatenate(
            ([rid], [cid]), axis=0).T, val.reshape((len(val), 1))),
                            axis=1)
        del rid, cid, val

        if self.trainable:
            if self.hierarchical:
                res = hpf.hpf(tX, X.shape[0], X.shape[1], self.k,
                              self.max_iter, self.init_params)
            else:
                res = hpf.pf(tX, X.shape[0], X.shape[1], self.k, self.max_iter,
                             self.init_params)
            self.Theta = np.asarray(res['Z'])
            self.Beta = np.asarray(res['W'])
        elif self.verbose:
            print('%s is trained already (trainable = False)' % (self.name))

        return self