code: def _objective_function(self, data_align, data_sup, labels, w, s, theta,
                              bias):
          
          subjects = len(data_align)
  
          # Compute the SRM  loss
          f_val = 0.0
          for subject in range(subjects):
              samples = data_align[subject].shape[1]
              f_val += (1 - self.alpha) * (0.5 / samples) \
                  * np.linalg.norm(data_align[subject] - w[subject].dot(s),
                                   'fro')**2
  
          # Compute the MLR loss
          f_val += self._loss_lr(data_sup, labels, w, theta, bias)
  
          return f_val
docs: Compute the objective function of the Semi-Supervised SRM
  
          See :eq:`sssrm-eq`.
  
          Parameters
          ----------
  
          data_align : list of 2D arrays, element i has shape=[voxels_i, n_align]
              Each element in the list contains the fMRI data for alignment of
              one subject. There are n_align samples for each subject.
  
          data_sup : list of 2D arrays, element i has shape=[voxels_i, samples_i]
              Each element in the list contains the fMRI data of one subject for
              the classification task.
  
          labels : list of arrays of int, element i has shape=[samples_i]
              Each element in the list contains the labels for the data samples
              in data_sup.
  
          w : list of array, element i has shape=[voxels_i, features]
              The orthogonal transforms (mappings) :math:`W_i` for each subject.
  
          s : array, shape=[features, samples]
              The shared response.
  
          theta : array, shape=[classes, features]
              The MLR class plane parameters.
  
          bias : array, shape=[classes]
              The MLR class biases.
  
  
          Returns
          -------
  
          f_val : float
              The SS-SRM objective function evaluated based on the parameters to
              this function.