o
    Ú­j "  ã                
   @   s  d Z ddlmZmZ ddlZddlZddlmZ ddl	m
Z
mZmZ ddlmZmZ ddlmZ d	d
lmZ dededdfdd„Zdededdfdd„Zdedededdfdd„Zdededdfdd„Zdededededdf
dd„Zdededdfdd„Zdededdfdd„ZdS )zTests for evaluation metrics.é    )ÚDictÚListNé   )Úconcat)ÚDMatrixÚQuantileDMatrixÚ_parse_eval_str)ÚXGBClassifierÚ	XGBRanker)Útrainé   )ÚDeviceÚtree_methodÚdeviceÚreturnc                 C   sn  t  d¡}|jddddd�\}}tj|jd�}td| |d�}|j|||d	� |jd
dddd�\}}|jdd� t	| 
¡ jt||ƒdfgd�ƒ}|d d }g }	g }
d}g }t|ƒD ]&}|jd
dddd�\}}|	 |¡ |
 |¡ tj|j|tjd�}| |¡ qYt|ƒ}t|	ƒ}t|
ƒ}t	| 
¡ jt|||d	�dfgd�ƒ}|d d  d¡s©J ‚|d d }||ksµJ ‚dS )z3Test for precision with ranking and classification.zsklearn.datasetsi   é   r   iç  )Ú	n_samplesÚ
n_featuresÚ	n_classesÚrandom_state)Úshape)Ún_estimatorsr   r   )Úqidi   éÊ  zpre@32)Úeval_metricÚXy)Úevalsr   é   )r   Ú
fill_valueÚdtyper   N)ÚpytestÚimportorskipÚmake_classificationÚnpÚzerosr   r
   ÚfitÚ
set_paramsr   Úget_boosterÚeval_setr   ÚrangeÚappendÚfullÚuint64r   Úendswith)r   r   ÚdatasetsÚXÚyr   ÚltrÚresultÚscore_0ÚX_listÚy_listÚn_query_groupsÚq_listÚiÚqÚscore_1© r;   úT/var/www/html/CropPilot/venv/lib/python3.10/site-packages/xgboost/testing/metrics.pyÚcheck_precision_score   sD   

ÿ
ÿ 
ÿ

ÿr=   c           	         s
  ddl m} ddlm‰ tj d¡}|dd|d�\}‰t|ˆƒ}i }t| dd	|d
œ||dfg|d�}| 	|¡‰ˆˆˆd	d�}tj
 |d d d |¡ g d¢‰ t| dˆ d|dœ||dfg|d�}| 	|¡‰t ‡ ‡‡‡fdd„tdƒD ƒ¡}tj
 |d d d |¡ dS )zTest for the `quantile` loss.r   )Úmake_regression)Úmean_pinball_lossé   é€   r   )r   Úquantileg333333Ó?)r   r   Úquantile_alphar   ÚTrain)r   Úevals_result©Úalphaéÿÿÿÿ)g      Ð?g      à?g      è?zreg:quantileerror)r   r   rC   Ú	objectiver   c                    s*   g | ]}ˆˆˆd d …|f ˆ | d�‘qS )NrF   r;   )Ú.0r8   ©rG   r?   Úpredtr0   r;   r<   Ú
<listcomp>h   s   * z(check_quantile_error.<locals>.<listcomp>N)Úsklearn.datasetsr>   Úsklearn.metricsr?   r#   ÚrandomÚRandomStater   r   Úinplace_predictÚtestingÚassert_allcloseÚmeanr)   )	r   r   r>   Úrngr/   r   rE   ÚboosterÚlossr;   rK   r<   Úcheck_quantile_error@   sH   
ü÷
ûö
ÿrY   r   c                 C   sö   ddl m} ddlm} tj d¡}d}||||d|d�\}}t||ƒ}	t| |ddd	œ|	d
d�}
|
 	|	¡}|||ƒ}t
|
 |	¡ d¡d
 ƒ}tjj||dd� |j|jŽ }|
 	t|ƒ¡}|||ƒ}t
|
 t||ƒ¡ d¡d
 ƒ}tjj||dd� dS )z6TestROC AUC metric on a binary classification problem.r   ©r"   ©Úroc_auc_scorer   é
   )Ún_informativeÚn_redundantr   Úauczbinary:logistic)r   r   r   rI   r   ©Únum_boost_roundú:ç�íµ ÷Æ°>©ÚrtolN)rN   r"   rO   r\   r#   rP   rQ   r   r   ÚpredictÚfloatÚevalÚsplitrS   rT   Úrandnr   )r   r   r   r"   r\   rV   r   r/   r0   r   rW   ÚscoreÚskl_aucr`   r;   r;   r<   Úrun_roc_auc_binarym   s<   
û
üø



rn   c                 C   s¬   ddl m} |dddddd�\}}t| d	d
|d�}|j||||fgd� | ¡ d d
 d }t| dd
|d�}|j||||fgd� | ¡ d d
 d }tjjd|dd� dS )z?Test for PR AUC metric on a multi-class classification problem.r   rZ   é@   é   é   r   r   )r^   r   r   r   Úaucpr©r   r   r   r   ©r(   Úvalidation_0rH   r]   g      ð?ç{®Gáz„?re   N)rN   r"   r	   r%   rE   r#   rS   rT   )r   r   r"   r/   r0   ÚclfrE   r;   r;   r<   Úrun_pr_auc_multi“   s   ÿÿrx   Úweightedc                 C   sF  ddl m} ddlm} tj d¡}d}d}||||d||d�\}	}
|r6| |¡}|| ¡ 8 }|| 	¡  }nd}t
|	|
|d	�}t| d
d||dœ|dd�}| |¡}||
|d|dd�}t| |¡ d¡d ƒ}tjj||dd� |j|	jŽ }	| t
|	|d	�¡}||
|d|dd�}t| t
|	|
|d	�¡ d¡d ƒ}tjj||dd� dS )z@Test for ROC AUC metric on a multi-class classification problem.r   rZ   r[   r   r]   r   )r^   r_   r   r   N)Úweightr`   zmulti:softprob)r   r   rI   Ú	num_classr   r   ra   ry   Úovr)ÚaverageÚsample_weightÚmulti_classrc   rd   re   gñhãˆµøä>)rN   r"   rO   r\   r#   rP   rQ   rk   ÚminÚmaxr   r   rg   rh   ri   rj   rS   rT   r   )r   r   ry   r   r"   r\   rV   r   r   r/   r0   Úweightsr   rW   rl   rm   r`   r;   r;   r<   Úrun_roc_auc_multi§   sT   
ú
û÷

ÿ
ÿ"rƒ   c                 C   s€   ddl m} |ddddd�\}}t| dd	d
|d�}t g d¢¡}|j|||||fg|gd� | ¡ d d
 }|d dks>J ‚dS )z,Test for PR AUC metric on a ranking problem.r   rZ   rA   r   r   r   ©r   r   rp   zrank:pairwiserr   )r   r   rI   r   r   )é    r…   ro   )Úgroupr(   Ú
eval_groupru   rH   ç®Gáz®ï?N)rN   r"   r
   r#   Úarrayr%   rE   )r   r   r"   r/   r0   r1   ÚgroupsÚresultsr;   r;   r<   Úrun_pr_auc_ltrÞ   s&   ûûrŒ   c                 C   sü   ddl m} ddlm}m} |ddddd�\}}t| d	d
|d�}|j||||fgd� | ¡ d d
 d }| |¡dd…d	f }	|||	ƒ\}
}}|||
ƒ}t	j
j||dd� t| dd
|d�}|j||||fgd� | ¡ d d
 d }t	j
jd|dd� dS )z:Test for PR AUC metric on a binary classification problem.r   rZ   )r`   Úprecision_recall_curverA   r   r   r   r„   r   rr   rs   rt   ru   rH   Nrv   re   r]   rˆ   )rN   r"   rO   r`   r�   r	   r%   rE   Úpredict_probar#   rS   rT   )r   r   r"   r`   r�   r/   r0   rw   rE   Úy_scoreÚ	precisionÚrecallÚ_Úpraucr;   r;   r<   Úrun_pr_auc_binaryö   s$   ÿ
ÿr”   )Ú__doc__Útypingr   r   Únumpyr#   r    Úcompatr   Úcorer   r   r   Úsklearnr	   r
   Útrainingr   Úutilsr   Ústrr=   rY   Úintrn   rx   Úboolrƒ   rŒ   r”   r;   r;   r;   r<   Ú<module>   s@    ÿÿ
þ1-&ÿÿÿÿ
þ7