
    -iK                     J    S SK Jr  SSKJrJrJr  SSKJrJr   " S S\5      r	g)	    )Counter   )"_BinaryClassifierCurveDisplayMixin_despine_validate_style_kwargs   )average_precision_scoreprecision_recall_curvec                       \ rS rSrSrSSSSS.S jr SSSSSS.S jjr\SSS	SSSSSSS
.	S j5       r\SSSSSSSSS.S j5       r	Sr
g)PrecisionRecallDisplay   a  Precision Recall visualization.

It is recommended to use
:func:`~sklearn.metrics.PrecisionRecallDisplay.from_estimator` or
:func:`~sklearn.metrics.PrecisionRecallDisplay.from_predictions` to create
a :class:`~sklearn.metrics.PrecisionRecallDisplay`. All parameters are
stored as attributes.

For general information regarding `scikit-learn` visualization tools, see
the :ref:`Visualization Guide <visualizations>`.
For guidance on interpreting these plots, refer to the :ref:`Model
Evaluation Guide <precision_recall_f_measure_metrics>`.

Parameters
----------
precision : ndarray
    Precision values.

recall : ndarray
    Recall values.

average_precision : float, default=None
    Average precision. If None, the average precision is not shown.

estimator_name : str, default=None
    Name of estimator. If None, then the estimator name is not shown.

pos_label : int, float, bool or str, default=None
    The class considered as the positive class. If None, the class will not
    be shown in the legend.

    .. versionadded:: 0.24

prevalence_pos_label : float, default=None
    The prevalence of the positive label. It is used for plotting the
    chance level line. If None, the chance level line will not be plotted
    even if `plot_chance_level` is set to True when plotting.

    .. versionadded:: 1.3

Attributes
----------
line_ : matplotlib Artist
    Precision recall curve.

chance_level_ : matplotlib Artist or None
    The chance level line. It is `None` if the chance level is not plotted.

    .. versionadded:: 1.3

ax_ : matplotlib Axes
    Axes with precision recall curve.

figure_ : matplotlib Figure
    Figure containing the curve.

See Also
--------
precision_recall_curve : Compute precision-recall pairs for different
    probability thresholds.
PrecisionRecallDisplay.from_estimator : Plot Precision Recall Curve given
    a binary classifier.
PrecisionRecallDisplay.from_predictions : Plot Precision Recall Curve
    using predictions from a binary classifier.

Notes
-----
The average precision (cf. :func:`~sklearn.metrics.average_precision_score`) in
scikit-learn is computed without any interpolation. To be consistent with
this metric, the precision-recall curve is plotted without any
interpolation as well (step-wise style).

You can change this style by passing the keyword argument
`drawstyle="default"` in :meth:`plot`, :meth:`from_estimator`, or
:meth:`from_predictions`. However, the curve will not be strictly
consistent with the reported average precision.

Examples
--------
>>> import matplotlib.pyplot as plt
>>> from sklearn.datasets import make_classification
>>> from sklearn.metrics import (precision_recall_curve,
...                              PrecisionRecallDisplay)
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.svm import SVC
>>> X, y = make_classification(random_state=0)
>>> X_train, X_test, y_train, y_test = train_test_split(X, y,
...                                                     random_state=0)
>>> clf = SVC(random_state=0)
>>> clf.fit(X_train, y_train)
SVC(random_state=0)
>>> predictions = clf.predict(X_test)
>>> precision, recall, _ = precision_recall_curve(y_test, predictions)
>>> disp = PrecisionRecallDisplay(precision=precision, recall=recall)
>>> disp.plot()
<...>
>>> plt.show()
N)average_precisionestimator_name	pos_labelprevalence_pos_labelc                L    X@l         Xl        X l        X0l        XPl        X`l        g N)r   	precisionrecallr   r   r   )selfr   r   r   r   r   r   s          _/var/www/html/venv/lib/python3.13/site-packages/sklearn/metrics/_plot/precision_recall_curve.py__init__PrecisionRecallDisplay.__init__r   s%     -"!2"$8!    F)nameplot_chance_levelchance_level_kwdespinec                   U R                  XS9u  U l        U l        nSS0nU R                  b  Ub  U SU R                  S S3US'   O(U R                  b  S	U R                  S 3US'   OUb  X'S'   [	        Xv5      nU R                  R
                  " U R                  U R                  40 UD6u  U l        U R                  b  S
U R                   S3OSn	SU	-   n
SU	-   nU R                  R                  U
SUSSS9  U(       ay  U R                  c  [        S5      eSU R                  S S3SSS.nUc  0 n[	        X5      nU R                  R
                  " SU R                  U R                  440 UD6u  U l        OSU l        U(       a  [        U R                  5        SU;   d  U(       a  U R                  R                  SS9  U $ )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.

name : str, default=None
    Name of precision recall curve for labeling. If `None`, use
    `estimator_name` if not `None`, otherwise no labeling is shown.

plot_chance_level : bool, default=False
    Whether to plot the chance level. The chance level is the prevalence
    of the positive label computed from the data passed during
    :meth:`from_estimator` or :meth:`from_predictions` call.

    .. versionadded:: 1.3

chance_level_kw : dict, default=None
    Keyword arguments to be passed to matplotlib's `plot` for rendering
    the chance level line.

    .. versionadded:: 1.3

despine : bool, default=False
    Whether to remove the top and right spines from the plot.

    .. versionadded:: 1.6

**kwargs : dict
    Keyword arguments to be passed to matplotlib's `plot`.

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

Notes
-----
The average precision (cf. :func:`~sklearn.metrics.average_precision_score`)
in scikit-learn is computed without any interpolation. To be consistent
with this metric, the precision-recall curve is plotted without any
interpolation as well (step-wise style).

You can change this style by passing the keyword argument
`drawstyle="default"`. However, the curve will not be strictly
consistent with the reported average precision.
)axr   	drawstylez
steps-postNz (AP = z0.2f)labelzAP = z (Positive label:  Recall	Precision)g{Gzg)\(?equal)xlabelxlimylabelylimaspecta  You must provide prevalence_pos_label when constructing the PrecisionRecallDisplay object in order to plot the chance level line. Alternatively, you may use PrecisionRecallDisplay.from_estimator or PrecisionRecallDisplay.from_predictions to automatically set prevalence_pos_labelzChance level (AP = kz--)r#   color	linestyle)r      z
lower left)loc)_validate_plot_paramsax_figure_r   r   plotr   r   line_r   setr   
ValueErrorchance_level_r   legend)r   r    r   r   r   r   kwargsdefault_line_kwargsline_kwargsinfo_pos_labelr(   r*   default_chance_level_line_kwchance_level_line_kws                 r   r5   PrecisionRecallDisplay.plot   s   z (,'A'AR'A'S$$,*L9!!-$2B& 6 6t<A>  ( ##/-243I3I$2O+P(+/(,-@Idkk4>>Q[Q 7;nn6P  02VX 	 N*~- 	 	
 ((0 @  /t/H/H.NaP!,( &"$#9,$  %)HHMM**D,E,EF% '%!T "&DTXXk!%6HHOOO-r   auto)	sample_weightdrop_intermediateresponse_methodr   r   r    r   r   r   c       	         j    U R                  UUUUUUS9u  pnU R                  " UU4UUUUU	U
UUS.UD6$ )a
  Plot precision-recall curve given an estimator and some data.

For general information regarding `scikit-learn` visualization tools, see
the :ref:`Visualization Guide <visualizations>`.
For guidance on interpreting these plots, refer to the :ref:`Model
Evaluation Guide <precision_recall_f_measure_metrics>`.

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

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

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

sample_weight : array-like of shape (n_samples,), default=None
    Sample weights.

drop_intermediate : bool, default=False
    Whether to drop some suboptimal thresholds which would not appear
    on a plotted precision-recall curve. This is useful in order to
    create lighter precision-recall curves.

    .. versionadded:: 1.3

response_method : {'predict_proba', 'decision_function', 'auto'},             default='auto'
    Specifies whether to use :term:`predict_proba` or
    :term:`decision_function` as the target response. If set to 'auto',
    :term:`predict_proba` is tried first and if it does not exist
    :term:`decision_function` is tried next.

pos_label : int, float, bool or str, default=None
    The class considered as the positive class when computing the
    precision and recall metrics. By default, `estimators.classes_[1]`
    is considered as the positive class.

name : str, default=None
    Name for labeling curve. If `None`, no name is used.

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

plot_chance_level : bool, default=False
    Whether to plot the chance level. The chance level is the prevalence
    of the positive label computed from the data passed during
    :meth:`from_estimator` or :meth:`from_predictions` call.

    .. versionadded:: 1.3

chance_level_kw : dict, default=None
    Keyword arguments to be passed to matplotlib's `plot` for rendering
    the chance level line.

    .. versionadded:: 1.3

despine : bool, default=False
    Whether to remove the top and right spines from the plot.

    .. versionadded:: 1.6

**kwargs : dict
    Keyword arguments to be passed to matplotlib's `plot`.

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

See Also
--------
PrecisionRecallDisplay.from_predictions : Plot precision-recall curve
    using estimated probabilities or output of decision function.

Notes
-----
The average precision (cf. :func:`~sklearn.metrics.average_precision_score`)
in scikit-learn is computed without any interpolation. To be consistent
with this metric, the precision-recall curve is plotted without any
interpolation as well (step-wise style).

You can change this style by passing the keyword argument
`drawstyle="default"`. However, the curve will not be strictly
consistent with the reported average precision.

Examples
--------
>>> import matplotlib.pyplot as plt
>>> from sklearn.datasets import make_classification
>>> from sklearn.metrics import PrecisionRecallDisplay
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.linear_model import LogisticRegression
>>> X, y = make_classification(random_state=0)
>>> X_train, X_test, y_train, y_test = train_test_split(
...         X, y, random_state=0)
>>> clf = LogisticRegression()
>>> clf.fit(X_train, y_train)
LogisticRegression()
>>> PrecisionRecallDisplay.from_estimator(
...    clf, X_test, y_test)
<...>
>>> plt.show()
)rE   r   r   )rC   r   r   rD   r    r   r   r   )!_validate_and_get_response_valuesfrom_predictions)cls	estimatorXyrC   rD   rE   r   r   r    r   r   r   r;   y_preds                  r   from_estimator%PrecisionRecallDisplay.from_estimator  sv    x #&"G"G+ #H #
4 ##
 (//+
 
 	
r   )rC   rD   r   r   r    r   r   r   c          	          U R                  XX5US9u  pV[        UUUUUS9u  pn[        XXSS9n[        U5      nUU   [	        UR                  5       5      -  nU " UUUUUUS9nUR                  " SUUUU	U
S.UD6$ )a
  Plot precision-recall curve given binary class predictions.

For general information regarding `scikit-learn` visualization tools, see
the :ref:`Visualization Guide <visualizations>`.
For guidance on interpreting these plots, refer to the :ref:`Model
Evaluation Guide <precision_recall_f_measure_metrics>`.

Parameters
----------
y_true : array-like of shape (n_samples,)
    True binary labels.

y_pred : array-like of shape (n_samples,)
    Estimated probabilities or output of decision function.

sample_weight : array-like of shape (n_samples,), default=None
    Sample weights.

drop_intermediate : bool, default=False
    Whether to drop some suboptimal thresholds which would not appear
    on a plotted precision-recall curve. This is useful in order to
    create lighter precision-recall curves.

    .. versionadded:: 1.3

pos_label : int, float, bool or str, default=None
    The class considered as the positive class when computing the
    precision and recall metrics.

name : str, default=None
    Name for labeling curve. If `None`, name will be set to
    `"Classifier"`.

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

plot_chance_level : bool, default=False
    Whether to plot the chance level. The chance level is the prevalence
    of the positive label computed from the data passed during
    :meth:`from_estimator` or :meth:`from_predictions` call.

    .. versionadded:: 1.3

chance_level_kw : dict, default=None
    Keyword arguments to be passed to matplotlib's `plot` for rendering
    the chance level line.

    .. versionadded:: 1.3

despine : bool, default=False
    Whether to remove the top and right spines from the plot.

    .. versionadded:: 1.6

**kwargs : dict
    Keyword arguments to be passed to matplotlib's `plot`.

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

See Also
--------
PrecisionRecallDisplay.from_estimator : Plot precision-recall curve
    using an estimator.

Notes
-----
The average precision (cf. :func:`~sklearn.metrics.average_precision_score`)
in scikit-learn is computed without any interpolation. To be consistent
with this metric, the precision-recall curve is plotted without any
interpolation as well (step-wise style).

You can change this style by passing the keyword argument
`drawstyle="default"`. However, the curve will not be strictly
consistent with the reported average precision.

Examples
--------
>>> import matplotlib.pyplot as plt
>>> from sklearn.datasets import make_classification
>>> from sklearn.metrics import PrecisionRecallDisplay
>>> from sklearn.model_selection import train_test_split
>>> from sklearn.linear_model import LogisticRegression
>>> X, y = make_classification(random_state=0)
>>> X_train, X_test, y_train, y_test = train_test_split(
...         X, y, random_state=0)
>>> clf = LogisticRegression()
>>> clf.fit(X_train, y_train)
LogisticRegression()
>>> y_pred = clf.predict_proba(X_test)[:, 1]
>>> PrecisionRecallDisplay.from_predictions(
...    y_test, y_pred)
<...>
>>> plt.show()
)rC   r   r   )r   rC   rD   )r   rC   )r   r   r   r   r   r   )r    r   r   r   r    )!_validate_from_predictions_paramsr
   r	   r   sumvaluesr5   )rI   y_truerM   rC   rD   r   r   r    r   r   r   r;   r   r   _r   class_countr   vizs                      r   rH   'PrecisionRecallDisplay.from_predictions  s    ` ??-SW @ 
	  6'/ 
	1 4i
 fo*95K<N<N<P8QQ/!5
 xx 
/+
 
 	
r   )
r   r3   r9   r   r4   r6   r   r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r5   classmethodrN   rH   __static_attributes__rQ   r   r   r   r      s    aP !9& A AF  P
 P
d  Q
 Q
r   r   N)
collectionsr   utils._plottingr   r   r   _rankingr	   r
   r   rQ   r   r   <module>rd      s)      
 G]
? ]
r   