class_docstr: Random Forest classifier. Uses a collection of classification trees that
  trains on random subsets of the data using a random subsets of the features.
  
  Parameters:
  -----------
  n_estimators: int
      The number of classification trees that are used.
  max_features: int
      The maximum number of features that the classification trees are allowed to
      use.
  min_samples_split: int
      The minimum number of samples needed to make a split when building a tree.
  min_gain: float
      The minimum impurity required to split the tree further. 
  max_depth: int
      The maximum depth of a tree.
code: def __init__(
      self,
      n_estimators=100,
      max_features=None,
      min_samples_split=2,
      min_gain=0,
      max_depth=float("inf"),
  ):
      self.n_estimators = n_estimators  # Number of trees
      self.max_features = (
          max_features  # Maxmimum number of features per tree
      )
      self.min_samples_split = min_samples_split
      self.min_gain = (
          min_gain  # Minimum information gain req. to continue
      )
      self.max_depth = max_depth  # Maximum depth for tree
      self.progressbar = progressbar.ProgressBar(widgets=bar_widgets)
  
      # Initialize decision trees
      self.trees = []
      for _ in range(n_estimators):
          self.trees.append(
              ClassificationTree(
                  min_samples_split=self.min_samples_split,
                  min_impurity=min_gain,
                  max_depth=self.max_depth,
              )
          )
  
file_path: ML-From-Scratch/mlfromscratch/supervised_learning/random_forest.py
imports: from __future__ import division, print_function
  import numpy
  import math
  import progressbar
  from mlfromscratch.utils import divide_on_feature, train_test_split, get_random_subsets, normalize
  from mlfromscratch.utils import accuracy_score, calculate_entropy
  from mlfromscratch.unsupervised_learning import PCA
  from mlfromscratch.supervised_learning import ClassificationTree
  from mlfromscratch.utils.misc import bar_widgets
  from mlfromscratch.utils import Plot
label_desc: Use image node_id 1 to create a new RandomForest object  with example: obj = RandomForest(n_estimators, max_features, min_samples_split, min_gain, max_depth)