code: def fit(
      self,
      ctx: Context,
      train_data: DataFrame,
      validate_data: DataFrame = None,
  ) -> None:
      # data binning
      bin_info = binning(train_data, max_bin=self.max_bin)
      bin_data: DataFrame = train_data.bucketize(boundaries=bin_info)
      self._get_fid_name_mapping(train_data)
      logger.info("data binning done")
  
      # tree dimension
      self._set_tree_dim(ctx)
  
      # predict to help guest to get the warmstart scores
      if self._model_loaded:
          pred_ctx = ctx.sub_ctx("warmstart_predict")
          self.predict(pred_ctx, train_data)
  
      random_seeds = self._get_seeds(ctx)
      global_random_seed = next(random_seeds)
      for iter_idx, tree_ctx in ctx.on_iterations.ctxs_range(
          len(self._trees), len(self._trees) + self.num_trees
      ):
          tree_mode = ALL_FEAT
          if iter_idx < self._complete_secure:
              tree_mode = GUEST_FEAT_ONLY
          for tree_dim, tree_ctx_ in tree_ctx.on_iterations.ctxs_range(
              self._tree_dim
          ):
              tree = HeteroDecisionTreeHost(
                  max_depth=self.max_depth,
                  hist_sub=self._hist_sub,
                  global_random_seed=global_random_seed,
                  random_seed=next(random_seeds),
                  tree_mode=tree_mode,
              )
              tree.booster_fit(tree_ctx_, bin_data, bin_info)
              self._trees.append(tree)
              self._saved_tree.append(tree.get_model())
              self._update_feature_importance(
                  tree.get_feature_importance()
              )
              logger.info(
                  "fitting host decision tree {}, dim {} done".format(
                      iter_idx, tree_dim
                  )
              )
  
file_path: FATE/python/fate/ml/ensemble/algo/secureboost/hetero/host.py
imports: import random
  import os
  from fate.ml.ensemble.learner.decision_tree.hetero.host import HeteroDecisionTreeHost
  from fate.ml.ensemble.algo.secureboost.hetero._base import HeteroBoostingTree
  from fate.arch import Context
  from fate.arch.dataframe import DataFrame
  from fate.ml.ensemble.utils.binning import binning
  from fate.ml.ensemble.algo.secureboost.common.predict import predict_leaf_host
  from fate.ml.ensemble.learner.decision_tree.tree_core.decision_tree import GUEST_FEAT_ONLY, ALL_FEAT
  import logging
label_desc: Use image node_id 5 for calling the HeteroSecureBoostHost obj's underlying member method code with example usage: obj.fit(ctx, train_data, validate_data) without return types