class_docstr: Probabilistic Collaborative Representation Learning.
  
  Parameters
  ----------
  k: int, optional, default: 100
      The dimension of the latent factors.
      
  z_dims: Numpy 1d array, optional, default: [300]
      The dimensions of the hidden intermdiate layers 'z' in the order         [dim(z_L), ...,dim(z_1)], please refer to Figure 1 in the orginal paper for more details.
  
  max_iter: int, optional, default: 300
      Maximum number of iterations (number of epochs) for variational PCRL.
      
  batch_size: int, optional, default: 300
      The batch size for SGD.
      
  learning_rate: float, optional, default: 0.001
      The learning rate for SGD.
  
  aux_info: see "cornac/examples/pcrl_example.py" in the GitHub repo for an example of how to use         cornac's graph modality provide item auxiliary data (e.g., context, text, etc.) for PCRL.
  
  name: string, optional, default: 'PCRL'
      The name of the recommender model.
  
  trainable: boolean, optional, default: True
      When False, the model is not trained and Cornac assumes that the model already         pre-trained (Theta, Beta and Xi are not None). 
      
  w_determinist: boolean, optional, default: True
      When True, determinist wheights "W" are used for the generator network,         otherwise "W" is stochastic as in the original paper.
  
  init_params: dictionary, optional, default: None
      List of initial parameters, e.g., init_params = {'G_s':G_s, 'G_r':G_r, 'L_s':L_s, 'L_r':L_r}.
      
      Theta: ndarray, shape (n_users, k)
          The expected user latent factors.
  
      Beta: ndarray, shape (n_items, k)
          The expected item latent factors.
  
      G_s: ndarray, shape (n_users, k)
          Represent the "shape" parameters of Gamma distribution over Theta.
          
      G_r: ndarray, shape (n_users, k)
          Represent the "rate" parameters of Gamma distribution over Theta. 
      
      L_s: ndarray, shape (n_items, k)
          Represent the "shape" parameters of Gamma distribution over Beta.
          
      L_r: ndarray, shape (n_items, k)
          Represent the "rate" parameters of Gamma distribution over Beta. 
      
  References
  ----------
  * Salah, Aghiles, and Hady W. Lauw. Probabilistic Collaborative Representation Learning for Personalized Item Recommendation.     In UAI 2018.
docstr: 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
code: 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)
  
      if self.trainable:
          from .pcrl import PCRL_
  
          # 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,
          }
  
          # instanciate pcrl
          # train_aux_info = train_set.item_graph.matrix[:self.train_set.num_items, :self.train_set.num_items]
          pcrl_ = PCRL_(
              train_set=train_set,
              k=self.k,
              z_dims=self.z_dims,
              n_epoch=self.max_iter,
              batch_size=self.batch_size,
              learning_rate=self.learning_rate,
              B=1,
              w_determinist=self.w_determinist,
              init_params=init_params,
          ).learn(train_set)
  
          self.Theta = np.array(pcrl_.Gs) / np.array(pcrl_.Gr)
          self.Beta = np.array(pcrl_.Ls) / np.array(pcrl_.Lr)
  
          # overwrite init_params for future fine-tuning
          self.Gs = pcrl_.Gs
          self.Gr = pcrl_.Gr
          self.Ls = pcrl_.Ls
          self.Lr = pcrl_.Lr
  
      elif self.verbose:
          print(
              "%s is trained already (trainable = False)" % (self.name)
          )
  
      return self
  
file_path: cornac/cornac/models/pcrl/recom_pcrl.py
imports: import numpy
  from ..recommender import Recommender
  from ..recommender import ANNMixin, MEASURE_DOT
label_desc: Use image node_id 2 for calling the PCRL obj's underlying member method code with example usage: obj.fit(train_set, val_set) and returns: self