class_docstr: Maximum independence domain adaptation
  Args:
      n_components (int): Number of components to keep.
      kernel (str): "linear", "rbf", or "poly". Kernel to use for MIDA. Defaults to "linear".
      mu (float): Hyperparameter of the l2 penalty. Defaults to 1.0.
      eta (float): Hyperparameter of the label dependence. Defaults to 1.0.
      augmentation (bool): Whether using covariates as augment features. Defaults to False.
      kernel_params (dict or None): Parameters for the kernel. Defaults to None.
  
  References:
      [1] Yan, K., Kou, L. and Zhang, D., 2018. Learning domain-invariant subspace using domain features and
          independence maximization. IEEE transactions on cybernetics, 48(1), pp.288-299.
code: def __init__(
      self,
      n_components,
      kernel="linear",
      lambda_=1.0,
      mu=1.0,
      eta=1.0,
      augmentation=False,
      kernel_params=None,
  ):
      self.n_components = n_components
      self.kernel = kernel
      self.mu = mu
      self.eta = eta
      self.augmentation = augmentation
      if kernel_params is None:
          self.kernel_params = {}
      else:
          self.kernel_params = kernel_params
      self._label_binarizer = LabelBinarizer(pos_label=1, neg_label=-1)
      self._centerer = KernelCenterer()
      self.x_fit = None
  
imports: import logging
  import warnings
  import numpy
  from numpy.linalg import multi_dot
  from scipy import linalg
  from sklearn.base import BaseEstimator, TransformerMixin
  from sklearn.metrics.pairwise import pairwise_kernels
  from sklearn.preprocessing import KernelCenterer, LabelBinarizer
  from sklearn.utils.validation import check_is_fitted
  from tensorly.base import fold, unfold
  from tensorly.tenalg import multi_mode_dot
label_desc: Use image node_id 1 to create a new MIDA object from inherited base classes: BaseEstimator, TransformerMixin with example: obj = MIDA(n_components, kernel, lambda_, mu, eta, augmentation, kernel_params)