
    0Phc9                     X    d dl Z d dlZddlmZmZ ddlmZ ddlm	Z	  G d d          Z
dS )    N   )_safe_indexingcheck_random_state)check_matplotlib_support)_validate_style_kwargsc                   x    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dS )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                "    || _         || _        d S Ny_truey_pred)selfr   r   s      `/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/metrics/_plot/regression.py__init__zPredictionErrorDisplay.__init__Q   s        Nresidual_vs_predicted)kindscatter_kwargsline_kwargsc                   t          | j        j         d           d}||vr)t          dd                    |           d|d          ddlm} |i }|i }d	d
d}dddd}t          ||          }t          ||          }i ||}i ||}||                                \  }	}|dk    r-t          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 || _        |                    dd           |                    t          j        ||
d                     |                    t          j        ||
d                     nw |j        t          j        | j                  t          j	        | j                  gddgfi |d         | _         |j        | j        | j        | j        z
  fi || _        d\  }}|                    ||           || _        |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pyplotr   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.plotU   s   T 	!DN$;!B!B!BCCCH}$$)=)A)A ) )) ) )  
 	('''''!NK+5!D!D(/#DQQ/0FWW,-@+NNE2EnE<,<<:LLNNEAr(((BF4;//1D1DEEIBF4;//1D1DEEI I&I(> BM DJ "[$+FF@NFF&BJvvHHHHDM MM'iM888MM"+iBBBCCCMM"+iBBBCCCC $$bfT[&9&9:A    	DJ
 'BJT[4;6 :H DM RNFF
fV,,,yr   i  )r   	subsamplerandom_stater;   r   r   c          
          t          | j         d           |                    |          }
|                     ||
||||||	          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   rE   rF   r;   r   r   )r   r&   predictfrom_predictions)cls	estimatorXyr   rE   rF   r;   r   r   r   s              r   from_estimatorz%PredictionErrorDisplay.from_estimator   sf    t 	!CL!A!A!ABBB""1%%##%)# $ 	
 	
 		
r   c                `   t          | j         d           t          |          }t          |          }	t	          |t
          j                  r|dk    rt          d| d          nKt	          |t
          j                  r1|dk    s|dk    rt          d| d          t          |	|z            }|S||	k     rM|
                    t          j        |	          |	          }
t          ||
d
          }t          ||
d
          } | ||          }|                    ||||          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.N)size)axisr   )r;   r   r   r   )r   r&   r   len
isinstancenumbersIntegralr'   Realintchoicer-   aranger   r/   )rJ   r   r   r   rE   rF   r;   r   r   	n_samplesindicesvizs               r   rI   z'PredictionErrorDisplay.from_predictions&  s{   l 	!CL!C!C!CDDD),77KK	i!122 	3A~~ Q)QQQ    	7<00 	3A~~a /	 / / /   I	122I Y%:%:"))")I*>*>Y)OOG#FG!<<<F#FG!<<<Fc
 
 

 xx)#	  
 
 	
r   r   )	r&   
__module____qualname____doc__r   r/   classmethodrN   rI    r   r   r	   r	      s        A AF   f %f f f f fP  %f
 f
 f
 f
 [f
P  %v
 v
 v
 v
 [v
 v
 v
r   r	   )rU   numpyr-   utilsr   r   utils._optional_dependenciesr   utils._plottingr   r	   rb   r   r   <module>rg      s         7 7 7 7 7 7 7 7 D D D D D D 5 5 5 5 5 5P
 P
 P
 P
 P
 P
 P
 P
 P
 P
r   