def METHOD_NAME(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.METHOD_NAME(self, train_set, val_set)
    if self.trainable:
        from .gcmc import Model
        self.model = Model(
            activation_model=self.activation_model,
            gcn_agg_units=self.gcn_agg_units,
            gcn_out_units=self.gcn_out_units,
            gcn_dropout=self.gcn_dropout,
            gcn_agg_accum=self.gcn_agg_accum,
            share_param=self.share_param,
            gen_r_num_basis_func=self.gen_r_num_basis_func,
            verbose=self.verbose,
            seed=self.seed,
        )
        self.model.train(
            train_set,
            val_set,
            max_iter=self.max_iter,
            learning_rate=self.learning_rate,
            optimizer=self.optimizer,
            train_grad_clip=self.train_grad_clip,
            train_valid_interval=self.train_valid_interval,
            train_early_stopping_patience=self.train_early_stopping_patience,
            train_min_learning_rate=self.train_min_learning_rate,
            train_decay_patience=self.train_decay_patience,
            train_lr_decay_factor=self.train_lr_decay_factor,
        )
    return self