class_docstr: Tree-based GAM classifier.
  Uses cyclical boosting to fit a GAM with small trees.
  Simplified version of the explainable boosting machine described in https://github.com/interpretml/interpret
  Only works for binary classification.
  Fits a scalar bias to the mean.
docstr: Params
  ------
  n_boosting_rounds : int
      Number of boosting rounds for the cyclic boosting.
  max_leaf_nodes : int
      Maximum number of leaf nodes for the trees in the cyclic boosting.
  learning_rate: float
      Learning rate for the cyclic boosting.
  boosting_strategy : str ["cyclic", "greedy"]
      Whether to use cyclic boosting (cycle over features) or greedy boosting (select best feature at each step)
  validation_frac: float
      Fraction of data to use for early stopping.
  random_state : int
      Random seed.
docstr_tok: ["Params","--","--","--","n_boosting_rounds",":","int","Number","of","boosting","rounds","for","the","cyclic","boosting",".","max_leaf_nodes",":","int","Maximum","number","of","leaf","nodes","for","the","trees","in","the","cyclic","boosting",".","learning_rate",":","float","Learning","rate","for","the","cyclic","boosting",".","boosting_strategy",":","str","[","``","cyclic","''",",","``","greedy","''","]","Whether","to","use","cyclic","boosting","(","cycle","over","features",")","or","greedy","boosting","(","select","best","feature","at","each","step",")","validation_frac",":","float","Fraction","of","data","to","use","for","early","stopping",".","random_state",":","int","Random","seed","."]
code: def __init__(
      self,
      n_boosting_rounds=100,
      max_leaf_nodes=3,
      learning_rate: float = 0.01,
      boosting_strategy="cyclic",
      validation_frac=0.15,
      random_state=None,
  ):
      """
      Params
      ------
      n_boosting_rounds : int
          Number of boosting rounds for the cyclic boosting.
      max_leaf_nodes : int
          Maximum number of leaf nodes for the trees in the cyclic boosting.
      learning_rate: float
          Learning rate for the cyclic boosting.
      boosting_strategy : str ["cyclic", "greedy"]
          Whether to use cyclic boosting (cycle over features) or greedy boosting (select best feature at each step)
      validation_frac: float
          Fraction of data to use for early stopping.
      random_state : int
          Random seed.
      """
      self.n_boosting_rounds = n_boosting_rounds
      self.max_leaf_nodes = max_leaf_nodes
      self.learning_rate = learning_rate
      self.boosting_strategy = boosting_strategy
      self.validation_frac = validation_frac
      self.random_state = random_state
  
imports: from copy import deepcopy
  import numpy
  import pandas
  from sklearn.base import BaseEstimator
  from sklearn.tree import DecisionTreeRegressor
  from sklearn.utils.validation import check_is_fitted
  from sklearn.utils import check_array
  from sklearn.utils.multiclass import check_classification_targets
  from sklearn.utils.validation import check_X_y
  from sklearn.utils.validation import _check_sample_weight
  from sklearn.model_selection import train_test_split
  from sklearn.metrics import accuracy_score, roc_auc_score
  from tqdm import tqdm
  import imodels
  from sklearn.base import RegressorMixin, ClassifierMixin
label_desc: Use image node_id 1 to create a new TreeGAMSimple object from inherited base classes: BaseEstimator with example: obj = TreeGAMSimple(n_boosting_rounds, max_leaf_nodes, learning_rate, boosting_strategy, validation_frac, random_state)