
    {Kg58                     D    d dl Z d dlZddlmZmZ ddlmZ  G d d      Zy)    N   )_safe_indexingcheck_random_state)check_matplotlib_supportc                   j    e Zd ZdZd Z	 ddddddZedddddddd	       Zedddddddd
       Zy)PredictionErrorDisplaya  Visualization of the prediction error of a regression model.

    This tool can display "residuals vs predicted" or "actual vs predicted"
    using scatter plots to qualitatively assess the behavior of a regressor,
    preferably on held-out data points.

    See the details in the docstrings of
    :func:`~sklearn.metrics.PredictionErrorDisplay.from_estimator` or
    :func:`~sklearn.metrics.PredictionErrorDisplay.from_predictions` to
    create a visualizer. All parameters are stored as attributes.

    For general information regarding `scikit-learn` visualization tools, read
    more in the :ref:`Visualization Guide <visualizations>`.
    For details regarding interpreting these plots, refer to the
    :ref:`Model Evaluation Guide <visualization_regression_evaluation>`.

    .. versionadded:: 1.2

    Parameters
    ----------
    y_true : ndarray of shape (n_samples,)
        True values.

    y_pred : ndarray of shape (n_samples,)
        Prediction values.

    Attributes
    ----------
    line_ : matplotlib Artist
        Optimal line representing `y_true == y_pred`. Therefore, it is a
        diagonal line for `kind="predictions"` and a horizontal line for
        `kind="residuals"`.

    errors_lines_ : matplotlib Artist or None
        Residual lines. If `with_errors=False`, then it is set to `None`.

    scatter_ : matplotlib Artist
        Scatter data points.

    ax_ : matplotlib Axes
        Axes with the different matplotlib axis.

    figure_ : matplotlib Figure
        Figure containing the scatter and lines.

    See Also
    --------
    PredictionErrorDisplay.from_estimator : Prediction error visualization
        given an estimator and some data.
    PredictionErrorDisplay.from_predictions : Prediction error visualization
        given the true and predicted targets.

    Examples
    --------
    >>> import matplotlib.pyplot as plt
    >>> from sklearn.datasets import load_diabetes
    >>> from sklearn.linear_model import Ridge
    >>> from sklearn.metrics import PredictionErrorDisplay
    >>> X, y = load_diabetes(return_X_y=True)
    >>> ridge = Ridge().fit(X, y)
    >>> y_pred = ridge.predict(X)
    >>> display = PredictionErrorDisplay(y_true=y, y_pred=y_pred)
    >>> display.plot()
    <...>
    >>> plt.show()
    c                     || _         || _        y Ny_truey_pred)selfr   r   s      d/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/metrics/_plot/regression.py__init__zPredictionErrorDisplay.__init__M   s        Nresidual_vs_predicted)kindscatter_kwargsline_kwargsc                (   t        | j                  j                   d       d}||vr!t        ddj	                  |       d|d      ddlm} |i }|i }d	d
d}dddd}i ||}i ||}||j                         \  }	}|dk(  rDt        t        j                  | j                        t        j                  | j                              }
t        t        j                  | j                        t        j                  | j                              } |j                  ||
g||
gfi |d   | _        | j                  | j                  }}d\  }} |j                  ||fi || _        |j#                  dd       |j%                  t        j&                  ||
d             |j)                  t        j&                  ||
d             n |j                  t        j                  | j                        t        j                  | j                        gddgfi |d   | _         |j                  | j                  | j                  | j                  z
  fi || _        d\  }}|j+                  ||       || _        |j.                  | _        | S )a  Plot visualization.

        Extra keyword arguments will be passed to matplotlib's ``plot``.

        Parameters
        ----------
        ax : matplotlib axes, default=None
            Axes object to plot on. If `None`, a new figure and axes is
            created.

        kind : {"actual_vs_predicted", "residual_vs_predicted"},                 default="residual_vs_predicted"
            The type of plot to draw:

            - "actual_vs_predicted" draws the observed values (y-axis) vs.
              the predicted values (x-axis).
            - "residual_vs_predicted" draws the residuals, i.e. difference
              between observed and predicted values, (y-axis) vs. the predicted
              values (x-axis).

        scatter_kwargs : dict, default=None
            Dictionary with keywords passed to the `matplotlib.pyplot.scatter`
            call.

        line_kwargs : dict, default=None
            Dictionary with keyword passed to the `matplotlib.pyplot.plot`
            call to draw the optimal line.

        Returns
        -------
        display : :class:`~sklearn.metrics.PredictionErrorDisplay`

            Object that stores computed values.
        z.plot)actual_vs_predictedr   z`kind` must be one of z, z. Got z	 instead.r   Nztab:blueg?)coloralphablackgffffff?z--)r   r   	linestyler   )Predicted valueszActual valuesequaldatalim)
adjustable   )num)r   zResiduals (actual - predicted))xlabelylabel)r   	__class____name__
ValueErrorjoinmatplotlib.pyplotpyplotsubplotsmaxnpr   r   minplotline_scatterscatter_
set_aspect
set_xtickslinspace
set_ytickssetax_figurefigure_)r   axr   r   r   expected_kindpltdefault_scatter_kwargsdefault_line_kwargs_	max_value	min_valuex_datay_datar"   r#   s                   r   r.   zPredictionErrorDisplay.plotQ   sv   T 	!DNN$;$;#<E!BCH}$(=)A(B Chi) 
 	(!NK+5!D(/#DQE2EnE<,<<:LLNEAr((BFF4;;/1DEIBFF4;;/1DEI I&I(>BMDJ "[[$++FF@NFF&BJJvvHHDM MM'iM8MM"++iBCMM"++iBC $bffT[[&9:A  	DJ
 'BJJT[[4;;6:HDM RNFF
fV,yyr   i  )r   	subsamplerandom_stater:   r   r   c          
          t        | j                   d       |j                  |      }
| j                  ||
||||||	      S )a3  Plot the prediction error given a regressor and some data.

        For general information regarding `scikit-learn` visualization tools,
        read more in the :ref:`Visualization Guide <visualizations>`.
        For details regarding interpreting these plots, refer to the
        :ref:`Model Evaluation Guide <visualization_regression_evaluation>`.

        .. versionadded:: 1.2

        Parameters
        ----------
        estimator : estimator instance
            Fitted regressor or a fitted :class:`~sklearn.pipeline.Pipeline`
            in which the last estimator is a regressor.

        X : {array-like, sparse matrix} of shape (n_samples, n_features)
            Input values.

        y : array-like of shape (n_samples,)
            Target values.

        kind : {"actual_vs_predicted", "residual_vs_predicted"},                 default="residual_vs_predicted"
            The type of plot to draw:

            - "actual_vs_predicted" draws the observed values (y-axis) vs.
              the predicted values (x-axis).
            - "residual_vs_predicted" draws the residuals, i.e. difference
              between observed and predicted values, (y-axis) vs. the predicted
              values (x-axis).

        subsample : float, int or None, default=1_000
            Sampling the samples to be shown on the scatter plot. If `float`,
            it should be between 0 and 1 and represents the proportion of the
            original dataset. If `int`, it represents the number of samples
            display on the scatter plot. If `None`, no subsampling will be
            applied. by default, 1000 samples or less will be displayed.

        random_state : int or RandomState, default=None
            Controls the randomness when `subsample` is not `None`.
            See :term:`Glossary <random_state>` for details.

        ax : matplotlib axes, default=None
            Axes object to plot on. If `None`, a new figure and axes is
            created.

        scatter_kwargs : dict, default=None
            Dictionary with keywords passed to the `matplotlib.pyplot.scatter`
            call.

        line_kwargs : dict, default=None
            Dictionary with keyword passed to the `matplotlib.pyplot.plot`
            call to draw the optimal line.

        Returns
        -------
        display : :class:`~sklearn.metrics.PredictionErrorDisplay`
            Object that stores the computed values.

        See Also
        --------
        PredictionErrorDisplay : Prediction error visualization for regression.
        PredictionErrorDisplay.from_predictions : Prediction error visualization
            given the true and predicted targets.

        Examples
        --------
        >>> import matplotlib.pyplot as plt
        >>> from sklearn.datasets import load_diabetes
        >>> from sklearn.linear_model import Ridge
        >>> from sklearn.metrics import PredictionErrorDisplay
        >>> X, y = load_diabetes(return_X_y=True)
        >>> ridge = Ridge().fit(X, y)
        >>> disp = PredictionErrorDisplay.from_estimator(ridge, X, y)
        >>> plt.show()
        z.from_estimator)r   r   r   rD   rE   r:   r   r   )r   r%   predictfrom_predictions)cls	estimatorXyr   rD   rE   r:   r   r   r   s              r   from_estimatorz%PredictionErrorDisplay.from_estimator   sX    t 	!CLL>!AB""1%##%)# $ 	
 		
r   c                   t        | j                   d       t        |      }t        |      }	t	        |t
        j                        r|dk  rPt        d| d      t	        |t
        j                        r'|dk  s|dk\  rt        d| d      t        |	|z        }|G||	k  rB|j                  t        j                  |	      |      }
t        ||
d	      }t        ||
d	      } | ||
      }|j                  ||||      S )a  Plot the prediction error given the true and predicted targets.

        For general information regarding `scikit-learn` visualization tools,
        read more in the :ref:`Visualization Guide <visualizations>`.
        For details regarding interpreting these plots, refer to the
        :ref:`Model Evaluation Guide <visualization_regression_evaluation>`.

        .. versionadded:: 1.2

        Parameters
        ----------
        y_true : array-like of shape (n_samples,)
            True target values.

        y_pred : array-like of shape (n_samples,)
            Predicted target values.

        kind : {"actual_vs_predicted", "residual_vs_predicted"},                 default="residual_vs_predicted"
            The type of plot to draw:

            - "actual_vs_predicted" draws the observed values (y-axis) vs.
              the predicted values (x-axis).
            - "residual_vs_predicted" draws the residuals, i.e. difference
              between observed and predicted values, (y-axis) vs. the predicted
              values (x-axis).

        subsample : float, int or None, default=1_000
            Sampling the samples to be shown on the scatter plot. If `float`,
            it should be between 0 and 1 and represents the proportion of the
            original dataset. If `int`, it represents the number of samples
            display on the scatter plot. If `None`, no subsampling will be
            applied. by default, 1000 samples or less will be displayed.

        random_state : int or RandomState, default=None
            Controls the randomness when `subsample` is not `None`.
            See :term:`Glossary <random_state>` for details.

        ax : matplotlib axes, default=None
            Axes object to plot on. If `None`, a new figure and axes is
            created.

        scatter_kwargs : dict, default=None
            Dictionary with keywords passed to the `matplotlib.pyplot.scatter`
            call.

        line_kwargs : dict, default=None
            Dictionary with keyword passed to the `matplotlib.pyplot.plot`
            call to draw the optimal line.

        Returns
        -------
        display : :class:`~sklearn.metrics.PredictionErrorDisplay`
            Object that stores the computed values.

        See Also
        --------
        PredictionErrorDisplay : Prediction error visualization for regression.
        PredictionErrorDisplay.from_estimator : Prediction error visualization
            given an estimator and some data.

        Examples
        --------
        >>> import matplotlib.pyplot as plt
        >>> from sklearn.datasets import load_diabetes
        >>> from sklearn.linear_model import Ridge
        >>> from sklearn.metrics import PredictionErrorDisplay
        >>> X, y = load_diabetes(return_X_y=True)
        >>> ridge = Ridge().fit(X, y)
        >>> y_pred = ridge.predict(X)
        >>> disp = PredictionErrorDisplay.from_predictions(y_true=y, y_pred=y_pred)
        >>> plt.show()
        z.from_predictionsr   zWhen an integer, subsample=z should be positive.   z!When a floating-point, subsample=z should be in the (0, 1) range.)size)axisr   )r:   r   r   r   )r   r%   r   len
isinstancenumbersIntegralr&   Realintchoicer,   aranger   r.   )rI   r   r   r   rD   rE   r:   r   r   	n_samplesindicesvizs               r   rH   z'PredictionErrorDisplay.from_predictions  s%   l 	!CLL>1B!CD),7K	i!1!12A~ 1)<PQ  	7<<0A~a 7	{ C/ /  I	12I Y%:"))"))I*>Y)OG#FG!<F#FG!<F

 xx)#	  
 	
r   r
   )	r%   
__module____qualname____doc__r   r.   classmethodrM   rH    r   r   r   r   	   s    AF c %cJ  %f
 f
P  %v
 v
r   r   )	rT   numpyr,   utilsr   r   utils._optional_dependenciesr   r   ra   r   r   <module>re      s      7 DM
 M
r   