class_docstr: Double Ensemble Model
code: def __init__(
      self,
      base_model="gbm",
      loss="mse",
      num_models=6,
      enable_sr=True,
      enable_fs=True,
      alpha1=1.0,
      alpha2=1.0,
      bins_sr=10,
      bins_fs=5,
      decay=None,
      sample_ratios=None,
      sub_weights=None,
      epochs=100,
      early_stopping_rounds=None,
      **kwargs,
  ):
      self.base_model = base_model  # "gbm" or "mlp", specifically, we use lgbm for "gbm"
      self.num_models = num_models  # the number of sub-models
      self.enable_sr = enable_sr
      self.enable_fs = enable_fs
      self.alpha1 = alpha1
      self.alpha2 = alpha2
      self.bins_sr = bins_sr
      self.bins_fs = bins_fs
      self.decay = decay
      if sample_ratios is None:  # the default values for sample_ratios
          sample_ratios = [0.8, 0.7, 0.6, 0.5, 0.4]
      if sub_weights is None:  # the default values for sub_weights
          sub_weights = [1] * self.num_models
      if not len(sample_ratios) == bins_fs:
          raise ValueError(
              "The length of sample_ratios should be equal to bins_fs."
          )
      self.sample_ratios = sample_ratios
      if not len(sub_weights) == num_models:
          raise ValueError(
              "The length of sub_weights should be equal to num_models."
          )
      self.sub_weights = sub_weights
      self.epochs = epochs
      self.logger = get_module_logger("DEnsembleModel")
      self.logger.info("Double Ensemble Model...")
      self.ensemble = (
          []
      )  # the current ensemble model, a list contains all the sub-models
      self.sub_features = (
          []
      )  # the features for each sub model in the form of pandas.Index
      self.params = {"objective": loss}
      self.params.update(kwargs)
      self.loss = loss
      self.early_stopping_rounds = early_stopping_rounds
  
imports: import lightgbm
  import numpy
  import pandas
  from typing import Text, Union
  from ...model.base import Model
  from ...data.dataset import DatasetH
  from ...data.dataset.handler import DataHandlerLP
  from ...model.interpret.base import FeatureInt
  from ...log import get_module_logger
label_desc: Use image node_id 1 to create a new DEnsembleModel object from inherited base classes: Model, FeatureInt with example: obj = DEnsembleModel(base_model, loss, num_models, enable_sr, enable_fs, alpha1, alpha2, bins_sr, bins_fs, decay, sample_ratios, sub_weights, epochs, early_stopping_rounds)