class_docstr: The ModelVisualizer class wraps a Scikit-Learn estimator (usually a
  predictive model like a regressor, classifier, or clusterer) so that all
  functionality that belongs to the estimator can be accessed from the
  visualizer, thereby allowing visualzers to be proxies for model objects,
  simply drawing on behalf of the wrapped model.
  
  Parameters
  ----------
  estimator : a Scikit-Learn estimator
      A Scikit-Learn estimator to wrap functionality for, usually regressor,
      classifier, or clusterer predictive model. If the estimator is not fitted,
      it is fit when the visualizer is fitted, unless otherwise specified by
      ``is_fitted``.
  
  ax : matplotlib Axes, default: None
      The axis to plot the figure on. If None is passed in the current axes
      will be used (or generated if required).
  
  fig : matplotlib Figure, default: None
      The figure to plot the Visualizer on. If None is passed in the current
      plot will be used (or generated if required).
  
  is_fitted : bool or str, default="auto"
      Specify if the wrapped estimator is already fitted. If False, the estimator
      will be fit when the visualizer is fit, otherwise, the estimator will not be
      modified. If "auto" (default), a helper method will check if the estimator
      is fitted before fitting it again.
  
  kwargs : dict
      Keyword arguments that are passed to the base class and may influence
      the visualization as defined by other Visualizers.
  
  Notes
  -----
  Model visualizers can wrap either fitted or unfitted models.
class_docstr_tok: ["The","ModelVisualizer","class","wraps","a","Scikit-Learn","estimator","(","usually","a","predictive","model","like","a","regressor",",","classifier",",","or","clusterer",")","so","that","all","functionality","that","belongs","to","the","estimator","can","be","accessed","from","the","visualizer",",","thereby","allowing","visualzers","to","be","proxies","for","model","objects",",","simply","drawing","on","behalf","of","the","wrapped","model",".","Parameters","--","--","--","--","--","estimator",":","a","Scikit-Learn","estimator","A","Scikit-Learn","estimator","to","wrap","functionality","for",",","usually","regressor",",","classifier",",","or","clusterer","predictive","model",".","If","the","estimator","is","not","fitted",",","it","is","fit","when","the","visualizer","is","fitted",",","unless","otherwise","specified","by","``","is_fitted","``",".","ax",":","matplotlib","Axes",",","default",":","None","The","axis","to","plot","the","figure","on",".","If","None","is","passed","in","the","current","axes","will","be","used","(","or","generated","if","required",")",".","fig",":","matplotlib","Figure",",","default",":","None","The","figure","to","plot","the","Visualizer","on",".","If","None","is","passed","in","the","current","plot","will","be","used","(","or","generated","if","required",")",".","is_fitted",":","bool","or","str",",","default=","''","auto","''","Specify","if","the","wrapped","estimator","is","already","fitted",".","If","False",",","the","estimator","will","be","fit","when","the","visualizer","is","fit",",","otherwise",",","the","estimator","will","not","be","modified",".","If","``","auto","''","(","default",")",",","a","helper","method","will","check","if","the","estimator","is","fitted","before","fitting","it","again",".","kwargs",":","dict","Keyword","arguments","that","are","passed","to","the","base","class","and","may","influence","the","visualization","as","defined","by","other","Visualizers",".","Notes","--","--","-","Model","visualizers","can","wrap","either","fitted","or","unfitted","models","."]
docstr: After v0.24 - scikit-learn is able to determine that ``self.estimator`` is
  nested and fetches its params using ``estimator__param``. This functionality is
  pretty cool but it's a pretty big overhaul to change our "wrapped" estimator API
  to a "nested" estimator API, therefore we override ``get_params`` to flatten out
  the estimator params.
code: def get_params(self, deep=True):
      """
      After v0.24 - scikit-learn is able to determine that ``self.estimator`` is
      nested and fetches its params using ``estimator__param``. This functionality is
      pretty cool but it's a pretty big overhaul to change our "wrapped" estimator API
      to a "nested" estimator API, therefore we override ``get_params`` to flatten out
      the estimator params.
      """
      params = super(ModelVisualizer, self).get_params(deep=deep)
      for param in list(params.keys()):
          if param.startswith("estimator__"):
              params[param[len("estimator__") :]] = params.pop(param)
      return params
  
imports: import math
  import warnings
  import matplotlib.pyplot
  from sklearn.base import BaseEstimator
  from yellowbrick.utils import get_model_name
  from yellowbrick.utils.wrapper import Wrapper
  from yellowbrick.utils.helpers import check_fitted
  from yellowbrick.exceptions import YellowbrickWarning
  from yellowbrick.exceptions import YellowbrickValueError, YellowbrickTypeError
label_desc: Use image node_id 2 for calling the ModelVisualizer obj's underlying member method code with example usage: obj.get_params(deep) and returns: params