o
    Ú­jž!  ã                   @   sì   d Z ddlZddlmZmZm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mZ ddlmZmZ dd	lmZ d
dlmZ d
dlmZm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dfdd„Z deddfdd„Z!dS )z#Tests for estimating the intercept.é    N)ÚDictÚListÚOptional)Úsoftmax)Úmake_classificationÚmake_multilabel_classificationÚmake_regressioné   )ÚBoosterÚDMatrixÚQuantileDMatrix)ÚXGBClassifierÚXGBRegressor)Útrainé   ©Úget_basescore)ÚDeviceÚnon_increasingÚtree_methodÚdeviceÚreturnc           
   
      sÜ  dt jdt jddf‡ ‡fdd„}tddd	�\}}|||ƒ tdd
dd�\}}|||ƒ 	ddt jdt jdtt j dtt f‡ ‡fdd„}tddd	�\}}|||ƒ tdd
ddd�\}}|||ƒ tdddddd�\}}|||ƒ}t j 	t  
t|ƒ¡d¡ t jj	t  
|¡ddd� t  t|ƒdk¡s“J ‚t j|t  t  |¡t  t  t j¡jg¡g¡d�d |jd  }t jj	t|ƒ|dd� t j d¡}|jdd|jd fd�}	||||	ƒ}t j 	t  
t|ƒ¡d¡ t  t|ƒdk¡sìJ ‚dS )zTest for init estimation.ÚXÚyr   Nc           	         sÖ   t ˆddˆ d�}|j| || |fgd� t|ƒ}| ¡ d d d }|jdkr(dn|jd }tj|fdtjd�}t ˆˆ dd|d	�}|j| || |fgd� t|ƒ}| ¡ d d d }t 	||¡ 
¡ rcJ ‚||k siJ ‚d S )
Nr   ©r   Ú	max_depthÚn_estimatorsr   ©Úeval_setÚvalidation_0Úrmser   ç      à?©ÚshapeÚ
fill_valueÚdtype)r   r   r   r   Ú
base_score)r   Úfitr   Úevals_resultÚndimr#   ÚnpÚfullÚfloat32ÚiscloseÚany)	r   r   ÚregÚbase_score_0Úscore_0Ú	n_targetsÚ	interceptÚbase_score_1Úscore_1©r   r   © úV/var/www/html/CropPilot/venv/lib/python3.10/site-packages/xgboost/testing/intercept.pyÚrun_reg   s(   ÿûz$run_init_estimation.<locals>.run_regi   é   )Ú	n_samplesÚrandom_stateé   )r;   r2   r<   Úwc           
         sf  t ˆddˆ d�}|d ur|j| ||| |fg|gd� n|j| || |fgd� t|ƒ}|jdkr:| ¡ d d d }n
| ¡ d d	 d }|jdkrKdn|jd }tj|fd
tj	d�}t ˆddˆ |d�}|d urv|j| ||| |fg|gd� n|j| || |fgd� t|ƒ}|jdkr•| ¡ d d d }	n
| ¡ d d	 d }	t 
||¡ ¡ r©J ‚||	d k s±J ‚|S )Nr   r   )Úsample_weightr   Úsample_weight_eval_setr   r	   r   Úloglossr   Úmloglossr!   r"   )r   r   r   r   r&   g-Cëâ6?)r   r'   r   Ú
n_classes_r(   r)   r#   r*   r+   r,   r-   r.   )
r   r   r>   Úclfr0   r1   r2   r3   r4   r5   r6   r7   r8   Úrun_clf8   sB   ÿÿ
ûÿ
z$run_init_estimation.<locals>.run_clfé   )r;   Ún_labelsÚ	n_classesr<   é   r   )r;   r<   rH   Ún_informativeÚn_redundantç      ð?ç        g�íµ ÷Æ°>)Úatol)Úbins©ÚrtoléÊ  r   )ÚlowÚhighÚsize)N)r*   Úndarrayr   r   r   Úfloatr   r   ÚtestingÚassert_allcloseÚsumr   ÚallÚ	histogramÚconcatenateÚuniqueÚarrayÚfinfor,   Úmaxr#   ÚrandomÚdefault_rngÚuniform)
r   r   r9   r   r   rE   r3   Únp_intÚrngr>   r7   r6   r8   Úrun_init_estimation   sT    

ÿÿÿÿþ,

ÿ


ÿ
&ÿþýÿrg   Úweightedc                 C   s¾  t j d¡}ddlm} d}t|d|d�\}}|r;|j|d�}|| ¡ 8 }t|||d�}	d	d
i}
|j	||fi |
¤Ž}n
t||ƒ}	t  
|¡}t| |d|dœ|	dd�}t| d|dœ|	dd�}t | ¡ ¡}t | ¡ ¡}t|ƒt|ƒkstJ ‚|jdd�}t|d�}t | ¡ ¡}t|ƒt|ƒks�J ‚t| |d d|dœ|	dd�}t | ¡ ¡}t j t|ƒt  t|ƒ¡d ¡ i }t| |ddddœ|	d|	dfg|d� |d d }|d dk s×J ‚t|ƒsÝJ ‚dS )zTest for adaptive trees.rR   r   )Ústatsé   é   )r<   )rU   )ÚweightÚpercentile_ranké2   zreg:absoluteerror)r   r&   Ú	objectiver   r   ©Únum_boost_round)r   ro   r   Úubj)Ú
raw_format)Ú
model_filerL   çš™™™™™é?)r   r   ro   Ú	subsampleÚetaé
   ÚTrain)rq   Úevalsr(   Úmaeéÿÿÿÿg      4@N)r*   rb   ÚRandomStateÚsklearn.utilsri   r   ÚnormalÚminr   Ú_weighted_percentileÚmedianr   ÚjsonÚloadsÚsave_configr   Úsave_rawr
   rX   rY   Úasarrayr   )r   rh   r   rf   ri   r;   r   r   r>   ÚXyÚkwargsr&   Ú	booster_0Ú	booster_1Úconfig_0Úconfig_1Úraw_boosterÚ	booster_2Úconfig_2r(   r{   r7   r7   r8   Úrun_adaptive…   sŽ   
ÿÿÿ

üø
ýù	
üø
ÿûõr‘   c                 C   sÌ   t ddddgd�\}}t||ƒ}td| dœ|dd	�}td
| dœ|dd	�}td| dœ|dd	�}tj dd„ |||fD ƒ| ¡ ¡ t ddgdd�\}}tdd| dœt||ƒdd	�}t|ƒ}tjj|ddd� dS )z!Exp family has a closed solution.é€   r	   ru   gš™™™™™É?)r;   rH   Úweightsúbinary:logistic©ro   r   r   rp   zreg:logisticzbinary:logitrawc                 S   s   g | ]}t |ƒ‘qS r7   r   )Ú.0Úmr7   r7   r8   Ú
<listcomp>ê   s    z"run_exp_family.<locals>.<listcomp>ié  )r“   r<   g      @)ro   Úscale_pos_weightr   r!   gü©ñÒMbP?rP   N)r   r   r   r*   rX   rY   Úmeanr   )r   r   r   rˆ   rD   r/   Úclf1Úscorer7   r7   r8   Úrun_exp_familyÞ   s$   
ÿÿ"
ýr�   c                    s*   dt ddf‡ fdd„}|dƒ |dƒ dS )z3Test https://github.com/dmlc/xgboost/issues/11499 .Úvr   Nc                    sL   t t dgdgg¡| | gd�}tdˆ dœ|dƒ}t|ƒ}|d | ks$J ‚d S )NrL   )Úlabelr”   r•   r   r   )r   r*   r‡   r   r   )rž   ÚdtrainÚbstr3   ©r   r7   r8   Úrunù   s   ýz$run_logistic_degenerate.<locals>.runrM   rL   )rW   )r   r£   r7   r¢   r8   Úrun_logistic_degenerateö   s   
r¤   )"Ú__doc__rƒ   Útypingr   r   r   Únumpyr*   Úscipy.specialr   Úsklearn.datasetsr   r   r   Úcorer
   r   r   Úsklearnr   r   Útrainingr   Úupdaterr   Úutilsr   r   Ústrrg   Úboolr‘   r�   r¤   r7   r7   r7   r8   Ú<module>   s    oY