U
    ^»{jUÂ  ã                
   @   sÞ  d Z ddlZddl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 ddlmZ ddlmZ ddlmZmZ dd	lmZmZ dd
lmZmZ ddlmZ ddlmZmZ ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6 eegZ7ddgddgddgddgddgddggZ8ddddddgZ9ddgddgddggZ:dddgZ;eddddd d!�\Z<Z=e)e=ƒZ=ej> ?d¡Z@e A¡ ZBe@ CeBjDjE¡ZFeBjGeF eB_GeBjDeF eB_DejH Id"d#¡d$d%„ ƒZJejH Id"d#¡d&d'„ ƒZKejH Id"d(¡ejH Id)d*¡d+d,„ ƒƒZLejH Id)d*¡ejH Id-d.¡d/d0„ ƒƒZMd1d2„ ZNejH Id3ee<e=feeBjGeBjDfg¡d4d5„ ƒZOd6d7„ ZPd8d9„ ZQd:d;„ ZRd<d=„ ZSd>d?„ ZTd@dA„ ZUdBdC„ ZVdDdE„ ZWejH IdFe7¡dGdH„ ƒZXdIdJ„ ZYdKdL„ ZZdMdN„ Z[dOdP„ Z\dQdR„ Z]dSdT„ Z^dUdV„ Z_ejH IdWe7¡dXdY„ ƒZ`ejH IdWe7¡dZd[„ ƒZaejH Id\ed]fed^fed_fed]fed^fed_fg¡d`da„ ƒZbdbdc„ Zcddde„ Zddfdg„ ZeejH Idhe7¡didj„ ƒZfejH Idhe7¡dkdl„ ƒZgejH Idhe7¡dmdn„ ƒZhejH Idhe7¡dodp„ ƒZiejH Idqe7¡drds„ ƒZjejH Idhe7¡dtdu„ ƒZkejH Idhe7¡dvdw„ ƒZlejH Idhe7¡dxdy„ ƒZmejH Idhe7¡dzd{„ ƒZnejH Idhe7¡d|d}„ ƒZoejH Idhe7¡d~d„ ƒZpd€d�„ ZqejH Idhe7¡d‚dƒ„ ƒZrd„d…„ Zsd†d‡„ Ztdˆd‰„ ZudŠd‹„ ZvejH IdŒe7¡d�dŽ„ ƒZwejH IdŒe7¡d�d�„ ƒZxd‘d’„ Zyd“d”„ Zzd•d–„ Z{d—d˜„ Z|e6ejH Id™eef¡ejH Idšee
e	f¡d›dœ„ ƒƒƒZ}ejH IdWeeg¡d�dž„ ƒZ~dŸd „ Zd¡d¢„ Z€d£d¤„ Z�d¥d¦„ Z‚ejHjId§eeefee‚efeeefgd¨d©dªgd«�d¬d­„ ƒZƒd®d¯„ Z„d°d±„ Z…d²d³„ Z†dS )´zP
Testing for the gradient boosting module (sklearn.ensemble.gradient_boosting).
é    N)Úassert_allclose)Ú
coo_matrixÚ
csc_matrixÚ
csr_matrix)Úexpit)Údatasets)Úclone)Úmake_classificationÚmake_regression)ÚDummyClassifierÚDummyRegressor)ÚGradientBoostingClassifierÚGradientBoostingRegressor)Úpredict_stages)ÚDataConversionWarningÚNotFittedError)ÚLinearRegression)Úmean_squared_error)Útrain_test_split)Úmake_pipeline)Úscale)ÚNuSVR)Úcheck_random_stateÚ
tosequence)ÚNoSampleWeightWrapper)ÚInvalidParameterError)Úassert_array_almost_equalÚassert_array_equalÚskip_if_32bitéþÿÿÿéÿÿÿÿé   é   é   éd   é   é   é
   é   )Ú	n_samplesÚ
n_featuresZn_informativeÚnoiseÚrandom_stateÚloss©Úlog_lossÚexponentialc              	   C   s¦   t | d|d�}t t¡� | t¡ W 5 Q R X | tt¡ t	| t¡t
ƒ dt|jƒks\t‚|jd d… |jdd …  }t |dk¡sŠt‚| t¡}|jdks¢t‚d S )Nr'   ©r-   Ún_estimatorsr,   r    r!   ç        )é   r'   r!   )r   ÚpytestÚraisesÚ
ValueErrorÚpredictÚTÚfitÚXÚyr   Útrue_resultÚlenÚestimators_ÚAssertionErrorÚtrain_score_ÚnpÚanyÚapplyÚshape)r-   Úglobal_random_seedÚclfZlog_loss_decreaseÚleaves© rI   úl/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/ensemble/tests/test_gradient_boosting.pyÚtest_classification_toy:   s      ÿ
rK   c                 C   s  t jd|d�\}}d}|d |… ||d …  }}|d |… ||d …  }}dd| |dœ}	tf ddi|	—Ž}
|
 ||¡ tf dd	i|	—Ž}| ||¡ |
 ||¡| ||¡k s°t‚d
d| |dœ}	tf ddi|	—Ž}| ||¡ tf ddi|	—Ž}| ||¡ | ||¡| ||¡k�st‚d S )NéÐ  ©r)   r,   iô  r!   ç      ð?)Ú	max_depthÚlearning_rater-   r,   r2   r'   é2   éÈ   )r2   rP   r-   r,   rO   Úmax_leaf_nodes)r   Úmake_hastie_10_2r   r:   Úscorer@   )r-   rF   r;   r<   Z	split_idxÚX_trainÚX_testÚy_trainÚy_testZcommon_paramsZgbrt_10_stumpsZgbrt_50_stumpsZgbrt_stumpsZgbrt_10_nodesrI   rI   rJ   Útest_classification_syntheticO   s0    üürZ   )Úsquared_errorÚabsolute_errorÚhuberÚ	subsample)rN   ç      à?c           
   
   C   s”   t  ttƒ¡}d }d |d| fD ]n}td| d|d|dd�}|jtt|d� | t¡}|jdksbt	‚| 
t¡}tt|ƒ}	|	dk s‚t	‚|d k	rŠ|}q d S )	Nr"   é   r%   r_   )r2   r-   rO   r^   Úmin_samples_splitr,   rP   ©Úsample_weight)r$   r`   gš™™™™™©?)rB   Úonesr>   Úy_regr   r:   ÚX_regrD   rE   r@   r8   r   )
r-   r^   rF   rd   Zlast_y_predrc   ÚregrH   Úy_predÚmserI   rI   rJ   Útest_regression_dataset}   s(    ù



	rj   rc   )Nr!   c                 C   sv   |dkrt  ttjƒ¡}tdd|| d�}|jtjtj|d� | tjtj¡}|dksXt	‚| 
tj¡}|jdksrt	‚d S )Nr!   r$   r/   ©r2   r-   r,   r^   rb   çÍÌÌÌÌÌì?)é–   r$   r#   )rB   rd   r>   ÚirisÚtargetr   r:   ÚdatarU   r@   rD   rE   )r^   rc   rF   rG   rU   rH   rI   rI   rJ   Ú	test_iris¦   s    ürq   c                 C   sŒ  t | ƒ}ddddd| dœ}tjd|dd	�\}}|d d
… |d d
…  }}|d
d … |d
d …  }}tf |Ž}	|	 ||¡ t||	 |¡ƒ}
|
dk s”t‚tjd|d�\}}|d d
… |d d
…  }}|d
d … |d
d …  }}tf |Ž}	|	 ||¡ t||	 |¡ƒ}
|
dk �st‚tj	d|d�\}}|d d
… |d d
…  }}|d
d … |d
d …  }}tf |Ž}	|	 ||¡ t||	 |¡ƒ}
|
dk �sˆt‚d S )Nr$   r%   r"   çš™™™™™¹?r[   )r2   rO   ra   rP   r-   r,   é°  rN   ©r)   r,   r+   rR   g      @rM   g     ˆ£@gš™™™™™™?)
r   r   Úmake_friedman1r   r:   r   r8   r@   Zmake_friedman2Zmake_friedman3)rF   r,   Zregression_paramsr;   r<   rV   rX   rW   rY   rG   ri   rI   rI   rJ   Útest_regression_syntheticº   s:    ú



rv   zGradientBoosting, X, yc                 C   s2   | ƒ }t |dƒrt‚| ||¡ t |dƒs.t‚d S )NÚfeature_importances_)Úhasattrr@   r:   )ÚGradientBoostingr;   r<   ZgbdtrI   rI   rJ   Útest_feature_importancesæ   s    
rz   c              	   C   sœ   t d| d�}t t¡� | t¡ W 5 Q R X | tt¡ t	| 
t¡tƒ | t¡}t |dk¡sdt‚t |dk¡svt‚|jj|jdd�dd�}t	|tƒ d S )Nr$   ©r2   r,   r3   rN   r!   ©Zaxisr   )r   r5   r6   r7   Úpredict_probar9   r:   r;   r<   r   r8   r=   rB   Úallr@   Úclasses_ÚtakeÚargmax)rF   rG   Úy_probarh   rI   rI   rJ   Útest_probability_logö   s    
rƒ   c               	   C   sN   ddddddg} t ddd�}d}tjt|d�� |jtt| d� W 5 Q R X d S )Nr   r!   r$   r{   zty contains 1 class after sample_weight trimmed classes with zero weights, while a minimum of 2 classes are required.©Úmatchrb   )r   r5   r6   r7   r:   r;   r<   )rc   rG   ÚmsgrI   rI   rJ   Ú$test_single_class_with_sample_weight
  s    ÿr‡   c               	   C   s°   t jddd�\} }t| ƒ}tddd�}| | |¡ t |j¡ dd¡}d}t	j
t|d�� t|j||j|ƒ W 5 Q R X t | ¡}t	j
tdd�� t|j||j|ƒ W 5 Q R X d S )	Nr$   r!   rM   r{   r    z3When X is a sparse matrix, a CSR format is expectedr„   z X should be C-ordered np.ndarray)r   rT   r   r   r:   rB   ÚzerosrE   Zreshaper5   r6   r7   r   r?   rP   Úasfortranarray)Úxr<   Zx_sparse_cscrG   rU   Úerr_msgZ	x_fortranrI   rI   rJ   Ú test_check_inputs_predict_stages  s    
rŒ   c           	      C   s�   t jd| d�\}}|d d… |dd …  }}|d d… |dd …  }}tddddd| d�}| ||¡ | || |¡¡}|d	k sŒtd
| ƒ‚d S )Néà.  rM   rL   r$   é   r"   rr   )r2   ra   rO   rP   Úmax_featuresr,   r_   zGB failed with deviance %.4f)r   rT   r   r:   Z_lossÚdecision_functionr@   )	rF   r;   r<   rV   rW   rX   rY   Úgbrtr/   rI   rI   rJ   Útest_max_feature_regression%  s    úr’   c                    s¢   | ƒ ‰ ˆ j ˆ j }}t|||d�\}}}}tdddd|d�}| ||¡ t |j¡ddd… }	‡ fd	d
„|	D ƒ}
|
d dks€t‚t	|
dd… ƒdddhksžt‚dS )a  Test that Gini importance is calculated correctly.

    This test follows the example from [1]_ (pg. 373).

    .. [1] Friedman, J., Hastie, T., & Tibshirani, R. (2001). The elements
       of statistical learning. New York: Springer series in statistics.
    ©r,   r]   rr   r4   r$   )r-   rP   rS   r2   r,   Nr    c                    s   g | ]}ˆ j | ‘qS rI   )Zfeature_names)Ú.0Ús©Z
californiarI   rJ   Ú
<listcomp>R  s     z6test_feature_importance_regression.<locals>.<listcomp>r   ZMedIncr!   r%   Z	LongitudeZAveOccupZLatitude)
rp   ro   r   r   r:   rB   Zargsortrw   r@   Úset)Zfetch_california_housing_fxtrF   r;   r<   rV   rW   rX   rY   rg   Z
sorted_idxZsorted_featuresrI   r–   rJ   Ú"test_feature_importance_regression9  s&    
  ÿûr™   c                  C   sF  t jddd�\} }| j\}}| d d… }|d d… }tdd d�}| ||¡ |j|ksZt‚tdd d�}| ||¡ |j|ks€t‚tddd�}| ||¡ |jt|d ƒks®t‚tddd�}| ||¡ |jtt	 
|¡ƒksÞt‚tddd�}| ||¡ |jtt	 |¡ƒk�st‚tdd	| jd  d�}| ||¡ |jdk�sBt‚d S )
Nr�   r!   rM   rL   )r2   r�   ç333333Ó?ÚsqrtÚlog2g{®Gáz„?)r   rT   rE   r   r:   Zmax_features_r@   r   ÚintrB   r›   rœ   )r;   r<   Ú_r*   rV   rX   r‘   rI   rI   rJ   Útest_max_features]  s,    
rŸ   c               	   C   s°   t jdddd�\} }| d d… |d d…  }}| dd … }tƒ }t t¡� tj| |¡tj	d� W 5 Q R X | 
||¡ | |¡}| |¡D ]}|j|jksŒt‚qŒt||ƒ d S )Nrs   r!   rN   rt   rR   ©Zdtype)r   ru   r   r5   r6   r7   rB   ÚfromiterÚstaged_predictÚfloat64r:   r8   rE   r@   r   )r;   r<   rV   rX   rW   rG   rh   rI   rI   rJ   Útest_staged_predict~  s     
r¤   c            	   	   C   s  t jddd�\} }| d d… |d d…  }}| dd … |dd …  }}tdd�}t t¡� tj| |¡tj	d� W 5 Q R X | 
||¡ | |¡D ]}|j|jks’t‚q’t| |¡|ƒ | |¡D ].}|jd |jd ksÞt‚d	|jd ksÂt‚qÂt| |¡|ƒ d S )
Nrs   r!   rM   rR   é   ©r2   r    r   r"   )r   rT   r   r5   r6   r   rB   r¡   Zstaged_predict_probar£   r:   r¢   rE   r@   r   r8   r   r}   )	r;   r<   rV   rX   rW   rY   rG   rh   Zstaged_probarI   rI   rJ   Útest_staged_predict_proba“  s    
 r§   Ú	Estimatorc           	   
   C   sº   t j |¡}|jdd�}d|d d …df   t¡d }| ƒ }| ||¡ dD ]h}t|d| d ƒ}|d krjqLtj	dd	�� t
||ƒƒ}W 5 Q R X d|d d d …< t  |d dk¡sLt‚qLd S )
N)r'   r#   )Úsizer%   r   r!   )r8   r�   r}   Zstaged_T)Úrecord)rB   ÚrandomÚRandomStateÚuniformZastyper�   r:   ÚgetattrÚwarningsÚcatch_warningsÚlistr~   r@   )	r¨   rF   Úrngr;   r<   Ú	estimatorÚfuncZstaged_funcZstaged_resultrI   rI   rJ   Útest_staged_functions_defensive®  s    rµ   c                  C   s¨   t ddd�} |  tt¡ t|  t¡tƒ dt| j	ƒks:t
‚zdd l}W n tk
rb   dd l}Y nX |j| |jd�}d } | |¡} t|  t¡tƒ dt| j	ƒks¤t
‚d S )Nr$   r!   r{   r   )Úprotocol)r   r:   r;   r<   r   r8   r9   r=   r>   r?   r@   ÚcPickleÚImportErrorÚpickleÚdumpsÚHIGHEST_PROTOCOLÚloads)rG   r¹   Zserialized_clfrI   rI   rJ   Útest_serializationÁ  s    
r½   c               	   C   s”   t ddd�} t t¡� |  tt ttƒ¡¡ W 5 Q R X t	ddd�} |  tt ttƒ¡¡ |  
t d¡g¡ ttjdtjd�|  
t d¡g¡ƒ d S )Nr$   r!   r{   r"   )r!   r    )r   r5   r6   r7   r:   r;   rB   rd   r>   r   r8   r²   Úrandr   r£   ©rG   rI   rI   rJ   Útest_degenerate_targetsÕ  s     rÀ   c                 C   s\   t dddd| d�}| tt¡ | t¡}t ddd| d�}| tt¡ | t¡}t||ƒ d S )Nr$   Úquantiler%   r_   )r2   r-   rO   Úalphar,   r\   )r2   r-   rO   r,   )r   r:   rf   re   r8   r   )rF   Zclf_quantileZ
y_quantileZclf_aeZy_aerI   rI   rJ   Útest_quantile_lossã  s$    û
ü
rÃ   c                  C   sV   t ddd�} ttttƒƒ}|  t|¡ t|  t	¡tttt
ƒƒƒ dt| jƒksRt‚d S )Nr$   r!   r{   )r   r   ÚmapÚstrr<   r:   r;   r   r8   r9   r=   r>   r?   r@   )rG   Zsymbol_yrI   rI   rJ   Útest_symbol_labelsü  s
    rÆ   c                  C   sZ   t ddd�} tjttjd�}|  t|¡ t|  t	¡tjt
tjd�ƒ dt| jƒksVt‚d S ©Nr$   r!   r{   r    )r   rB   Úasarrayr<   Zfloat32r:   r;   r   r8   r9   r=   r>   r?   r@   )rG   Zfloat_yrI   rI   rJ   Útest_float_class_labels  s
    rÉ   c               	   C   s~   t ddd�} tjttjd�}|d d …tjf }d}tjt|d�� |  	t
|¡ W 5 Q R X t|  t¡tƒ dt| jƒkszt‚d S )Nr$   r!   r{   r    z†A column-vector y was passed when a 1d array was expected. Please change the shape of y to \(n_samples, \), for example using ravel().r„   )r   rB   rÈ   r<   Úint32Znewaxisr5   Zwarnsr   r:   r;   r   r8   r9   r=   r>   r?   r@   )rG   Úy_Zwarn_msgrI   rI   rJ   Útest_shape_y  s    ÿrÌ   c                  C   s6  t  t¡} tddd�}| | t¡ t| t¡t	ƒ dt
|jƒksDt‚t  t¡} tddd�}| | t¡ t| t¡t	ƒ dt
|jƒksˆt‚t jtt jd�}t  |¡}tddd�}| t|¡ t| t¡t	ƒ dt
|jƒksÜt‚t jtt jd�}t  |¡}tddd�}| t|¡ t| t¡t	ƒ dt
|jƒk�s2t‚d S rÇ   )rB   r‰   r;   r   r:   r<   r   r8   r9   r=   r>   r?   r@   ZascontiguousarrayrÈ   rÊ   )ZX_rG   rË   rI   rI   rJ   Útest_mem_layout'  s,    



rÍ   ÚGradientBoostingEstimatorc              	   C   sZ   | dddd�}|  tt¡ |jjd dks.t‚t|jd d… t ddd	d
dg¡dd� d S )Nr$   r!   r_   ©r2   r,   r^   r   rŽ   gR¸…ëQÈ?g333333Ã?g¸…ëQ¸¾?g)\�Âõ(¼¿g)\�Âõ(¼?r"   )Údecimal)	r:   r;   r<   Úoob_improvement_rE   r@   r   rB   Úarray)rÎ   r³   rI   rI   rJ   Útest_oob_improvementD  s      ÿýrÓ   c                 C   s¨   t jddd�\}}| dddd�}| ||¡ |jjd dks@t‚|jd t |j¡ksZt‚| ddddd	�}| ||¡ |jjd dk sŠt‚|jd t |j¡ks¤t‚d S )
Nr$   r!   rM   r_   rÏ   r   r    rŽ   )r2   r,   r^   Ún_iter_no_change)	r   rT   r:   Úoob_scores_rE   r@   r5   ÚapproxÚ
oob_score_)rÎ   r;   r<   r³   rI   rI   rJ   Útest_oob_scoresT  s$      ÿürØ   z(GradientBoostingEstimator, oob_attributerÑ   rÕ   r×   c              	   C   sL   t jddd�\}}| dddd�}| ||¡ t t¡� |j W 5 Q R X dS )zZ
    Check that we raise an AttributeError when the OOB statistics were not computed.
    r$   r!   rM   rN   rÏ   N)r   rT   r:   r5   r6   ÚAttributeErrorÚoob_attribute)rÎ   rÚ   r;   r<   r³   rI   rI   rJ   Útest_oob_attributes_errorj  s    ýrÛ   c                  C   sþ   t ddddd�} |  tjtj¡ |  tjtj¡}|dks<t‚| jjd | j	ksRt‚| j
jd | j	ksht‚| j
d t | j¡ks‚t‚t ddddd	d
�} |  tjtj¡ |  tjtj¡}| jjd | j	k sÊt‚| j
jd | j	k sàt‚| j
d t | j¡ksút‚d S )Nr$   r/   r!   r_   rk   rl   r   r    rŽ   )r2   r-   r,   r^   rÔ   )r   r:   rn   rp   ro   rU   r@   rÑ   rE   r2   rÕ   r5   rÖ   r×   )r³   rU   rI   rI   rJ   Útest_oob_multilcass_iris„  s0       ÿûrÜ   c                  C   s¬   dd l } ddlm} | j}|ƒ | _tddddd�}| tt¡ | j}|| _| d¡ | 	¡  
¡ }d dgd	gd
  ¡d }||ks†t‚tdd„ | ¡ D ƒƒ}d|ks¨t‚d S )Nr   ©ÚStringIOr$   r!   çš™™™™™é?)r2   r,   Úverboser^   ú ú%10sú%16sr#   )ÚIterú
Train LosszOOB ImproveúRemaining Timec                 s   s   | ]
}d V  qdS ©r!   NrI   ©r”   ÚlrI   rI   rJ   Ú	<genexpr>¾  s     z&test_verbose_output.<locals>.<genexpr>é   ©ÚsysÚiorÞ   Ústdoutr   r:   r;   r<   ÚseekÚreadlineÚrstripÚjoinr@   ÚsumÚ	readlines©rí   rÞ   Z
old_stdoutrG   Zverbose_outputÚheaderZtrue_headerZn_linesrI   rI   rJ   Útest_verbose_output¤  s&       ÿ
rø   c                  C   sª   dd l } ddlm} | j}|ƒ | _tdddd�}| tt¡ | j}|| _| d¡ | 	¡  
¡ }d dgd	gd  ¡d
 }||ks„t‚tdd„ | ¡ D ƒƒ}d|ks¦t‚d S )Nr   rÝ   r$   r!   r"   )r2   r,   rà   rá   râ   rã   )rä   rå   ræ   c                 s   s   | ]
}d V  qdS rç   rI   rè   rI   rI   rJ   rê   Ú  s     z+test_more_verbose_output.<locals>.<genexpr>rì   rö   rI   rI   rJ   Útest_more_verbose_outputÃ  s    
rù   ÚClsc                 C   s°   t jd|d�\}}| dd|d�}| ||¡ | ddd|d�}| ||¡ |jdd� | ||¡ | tkr€t| |¡| |¡ƒ n,t| |¡| |¡ƒ t| |¡| |¡ƒ d S )	Nr$   rM   rR   r!   ©r2   rO   r,   T©r2   rO   Ú
warm_startr,   r¦   )	r   rT   r:   Ú
set_paramsr   r   r8   r   r}   ©rú   rF   r;   r<   ÚestÚest_wsrI   rI   rJ   Útest_warm_startß  s        ÿr  c                 C   sz   t jd|d�\}}| dd|d�}| ||¡ | ddd|d�}| ||¡ |jdd� | ||¡ t| |¡| |¡ƒ d S )	Nr$   rM   i,  r!   rû   Trü   r¦   )r   rT   r:   rþ   r   r8   rÿ   rI   rI   rJ   Útest_warm_start_n_estimatorsö  s       ÿr  c                 C   sˆ   t jddd�\}}| dddd�}| ||¡ |jddd� | ||¡ |jd	 jdksZt‚tdd
ƒD ]}|j| df jdksdt‚qdd S )Nr$   r!   rM   T©r2   rO   rý   én   r"   ©r2   rO   ©r   r   é   r   )r   rT   r:   rþ   r?   rO   r@   Úrange)rú   r;   r<   r   ÚirI   rI   rJ   Útest_warm_start_max_depth  s    r  c                 C   sv   t jddd�\}}| ddd�}| ||¡ | dddd�}| ||¡ |jdd� | ||¡ t| |¡| |¡ƒ d S )	Nr$   r!   rM   r  Tr  F)rý   )r   rT   r:   rþ   r   r8   )rú   r;   r<   r   Zest_2rI   rI   rJ   Útest_warm_start_clear  s    r  ry   c                 C   s  t jddd�\}}d}| |ddddd�}| ||¡ |j|j }}t|ƒ|ksRt‚|d t |¡ksht‚d}|j	|d	� ||¡ t|jƒ|ks’t‚t
|jd
|… |ƒ |j	|dd� ||¡ |j|k	sÊt‚|j|k	sØt‚t
|j|ƒ |jt |¡ksøt‚|d t |¡k�st‚d
S )zZ
    Check that the states of the OOB scores are cleared when used with `warm_start`.
    r$   r!   rM   r_   T)r2   rO   r^   rý   r,   r    rR   r¦   NF©r2   rý   )r   rT   r:   rÕ   r×   r>   r@   r5   rÖ   rþ   r   )ry   r;   r<   r2   r³   Z
oob_scoresZ	oob_scoreZn_more_estimatorsrI   rI   rJ   Ú test_warm_start_state_oob_scores%  s.    ûr  c              	   C   s^   t jddd�\}}| dddd�}| ||¡ |jdd� t t¡� | ||¡ W 5 Q R X d S )Nr$   r!   rM   Tr  éc   r¦   )r   rT   r:   rþ   r5   r6   r7   ©rú   r;   r<   r   rI   rI   rJ   Ú$test_warm_start_smaller_n_estimatorsE  s    r  c                 C   sh   t jddd�\}}| ddd�}| ||¡ t|ƒ}|j|jdd� | ||¡ t| |¡| |¡ƒ d S )Nr$   r!   rM   r  Tr  )r   rT   r:   r   rþ   r2   r   r8   )rú   r;   r<   r   Zest2rI   rI   rJ   Ú"test_warm_start_equal_n_estimatorsP  s    r  c                 C   sÌ   t jddd�\}}| dddd�}| ||¡ |jddd� | ||¡ t|jd d… t d¡ƒ t|jd d… t d¡ƒ |jd	d … d
k 	¡ s”t
‚|jd	d … d
k 	¡ s®t
‚|jd t |j¡ksÈt
‚d S )Nr$   r!   rM   Tr  r  r_   )r2   r^   iöÿÿÿr3   r    )r   rT   r:   rþ   r   rÑ   rB   rˆ   rÕ   r~   r@   r5   rÖ   r×   r  rI   rI   rJ   Útest_warm_start_oob_switch^  s    r  c                 C   sØ   t jddd�\}}| ddddd�}| ||¡ | dddddd�}| ||¡ |jdd	� | ||¡ t|jd d… |jd d… ƒ t|jd d… |jd d… ƒ |jd
 t |j	¡ksºt
‚|jd
 t |j	¡ksÔt
‚d S )Nr$   r!   rM   rR   r_   )r2   rO   r^   r,   T©r2   rO   r^   r,   rý   r¦   r    )r   rT   r:   rþ   r   rÑ   rÕ   r5   rÖ   r×   r@   )rú   r;   r<   r   r  rI   rI   rJ   Útest_warm_start_oobq  s"        ÿr  c           
      C   sB  t jddd�\}}tttg}| dddddd�}| ||¡ | |¡ |jdd� | ||¡ | |¡}|D ]Ò}||ƒ}| dddddd�}| ||¡ | |¡ |jdd� | ||¡ | |¡}	t|j	d d… |j	d d… ƒ |j
d	 t |j¡ksøt‚t|j
d d… |j
d d… ƒ |j
d	 t |j¡k�s2t‚t||	ƒ qjd S )
Nr$   r!   rM   r_   Tr  rR   r¦   r    )r   rT   r   r   r   r:   r8   rþ   r   rÑ   rÕ   r5   rÖ   r×   r@   )
rú   r;   r<   Zsparse_matrix_typeZ	est_denseZy_pred_denseZsparse_constructorÚX_sparseZ
est_sparseZy_pred_sparserI   rI   rJ   Útest_warm_start_sparse…  sN    
    ÿ

û

 ÿ ÿr  c                 C   sš   t jd|d�\}}| d|dd�}| d|dd�}| ||¡ |jdd� | ||¡ t |¡}| ||¡ |jdd� | ||¡ t| |¡| |¡ƒ d S )Nr$   rM   r!   T)r2   r,   rý   r  r¦   )r   rT   r:   rþ   rB   r‰   r   r8   )rú   rF   r;   r<   Zest_cZest_fortranZ	X_fortranrI   rI   rJ   Útest_warm_start_fortran®  s    
r  c                 C   s   | dkrdS dS dS )z#Returns True on the 10th iteration.é	   TFNrI   )r
  r   ÚlocalsrI   rI   rJ   Úearly_stopping_monitorÂ  s    r  c                 C   sˆ  t jddd�\}}| ddddd�}|j||td� |jdks@t‚|jjd d	ksTt‚|jjd d	ksht‚|j	jd d	ks|t‚|j
jd d	ks�t‚|j
d
 t |j¡ksªt‚|jdd� | ||¡ |jdksÐt‚|jjd dksät‚|jjd dksøt‚|j	jd dk�st‚|j
jd dk�s$t‚|j
d
 t |j¡k�s@t‚| dddddd�}|j||td� |jdk�srt‚|jjd d	k�sˆt‚|jjd d	k�sžt‚|j	jd d	k�s´t‚|j
jd d	k�sÊt‚|j
d
 t |j¡k�sæt‚|jddd� | ||¡ |jdk�st‚|jjd dk�s&t‚|jjd dk�s<t‚|j	jd dk�sRt‚|j
jd dk�sht‚|j
d
 t |j¡k�s„t‚d S )Nr$   r!   rM   r¥   r_   )r2   rO   r,   r^   )Zmonitorr   r'   r    r`   r¦   T)r2   rO   r,   r^   rý   Fr  )r   rT   r:   r  r2   r@   r?   rE   rA   rÑ   rÕ   r5   rÖ   r×   rþ   r  rI   rI   rJ   Útest_monitor_early_stoppingÊ  sN        ÿr  c                  C   s‚   ddl m}  tjddd�\}}d}tdd d|d d�}| ||¡ |jd	 j}|j|ks\t	‚|j
|j
| k jd |d ks~t	‚d S )
Nr   ©Ú	TREE_LEAFr$   r!   rM   r%   r¥   ©r2   rO   r,   rS   r  )Úsklearn.tree._treer  r   rT   r   r:   r?   Útree_rO   r@   Úchildren_leftrE   )r  r;   r<   Úkr   ÚtreerI   rI   rJ   Útest_complete_classificationø  s       ÿr%  c                  C   sb   ddl m}  d}tdd d|d d�}| tt¡ |jd j}|j|j| k j	d |d ks^t
‚d S )Nr   r  r%   r¥   r!   r  )r    r   )r   r  r   r:   rf   re   r?   r!  r"  rE   r@   )r  r#  r   r$  rI   rI   rJ   Útest_complete_regression	  s       ÿr&  c                 C   sd   t dd� tt¡}t| t¡tƒ}tdd| ddd�}| tt¡ | t¡}tt|ƒ}||k s`t‚d S )NZmean)ZstrategyrŽ   r!   Úzeror_   )r2   rO   r,   ÚinitrP   )r   r:   rf   re   r   r8   r   r@   )rF   ZbaselineZmse_baseliner   rh   Zmse_gbdtrI   rI   rJ   Útest_zero_estimator_reg  s    û

r)  c                 C   s�   t j}t t j¡}tdd| dd�}| ||¡ | ||¡dksBt‚|dk}d||< d|| < tdd| dd�}| ||¡ | ||¡dksŒt‚d S )Nr¥   r!   r'  )r2   rO   r,   r(  g¸…ëQ¸î?r   )	rn   rp   rB   rÒ   ro   r   r:   rU   r@   )rF   r;   r<   r   ÚmaskrI   rI   rJ   Útest_zero_estimator_clf+  s*       ÿ
   ÿr+  ÚGBEstimatorc                 C   st   t jddd�\}}d}| d|d� ||¡}|jd j}|jdksDt‚| dd� ||¡}|jd j}|jdkspt‚d S )Nr$   r!   rM   r%   )rO   rS   r  )rO   )r   rT   r:   r?   r!  rO   r@   )r,  r;   r<   r#  r   r$  rI   rI   rJ   Útest_max_leaf_nodes_max_depthB  s    r-  c                 C   sH   t jddd�\}}| dd�}| ||¡ |jjD ]}|jdks0t‚q0d S )Nr$   r!   rM   rr   )Úmin_impurity_decrease)r   rT   r:   r?   Zflatr.  r@   )r,  r;   r<   r   r$  rI   rI   rJ   Útest_min_impurity_decreaseR  s
    
r/  c                  C   sp   t ddd�} |  ddgddggddg¡ | jjd dks<t‚|  ddgddggddg¡ | jjd dkslt‚d S )Nr'   Tr  r   r!   r"   r#   )r   r:   r?   rE   r@   r¿   rI   rI   rJ   Ú%test_warm_start_wo_nestimators_change^  s
    r0  c              	   C   sÊ   t dd| d�}t t¡� | t¡ W 5 Q R X | tt¡ t	| 
t¡tƒ | t¡}t |dk¡sft‚t |dk¡sxt‚| t¡ ¡ }t|d d …df td| ƒƒ |jj|jdd�d	d�}t	|tƒ d S )
Nr0   r$   r1   r3   rN   r!   r"   r|   r   )r   r5   r6   r7   r}   r9   r:   r;   r<   r   r8   r=   rB   r~   r@   r�   Zravelr   r   r   r€   r�   )rF   rG   r‚   rU   rh   rI   rI   rJ   Útest_probability_exponentialh  s       ÿ
r1  c                  C   s|   ddgddgddgddgg} ddddg}ddddg}dD ]>}t dd|d�}|j| ||d� | ddgg¡d dks8t‚q8d S )	Nr!   r   )r]   r[   r\   rÁ   rN   r"   )rP   r2   r-   rb   r_   )r   r:   r8   r@   ©r;   r<   rc   r-   ÚgbrI   rI   rJ   Ú*test_non_uniform_weights_toy_edge_case_reg€  s    r4  c                  C   sv   ddgddgddgddgg} ddddg}ddddg}dD ]8}t d|d�}|j| ||d� t| ddgg¡dgƒ q8d S )Nr!   r   r.   rŽ   )r2   r-   rb   )r   r:   r   r8   r2  rI   rI   rJ   Ú*test_non_uniform_weights_toy_edge_case_clf‹  s    r5  ÚEstimatorClassÚsparse_matrixc           	      C   sX  t jddddd�\}}|d d …df }||ƒ}| ddddd	� ||¡}| ddddd	� ||¡}t| |¡| |¡ƒ t| |¡| |¡ƒ t|j|jƒ t| |¡| |¡ƒ t| |¡| |¡ƒ t| tƒ�rTt| 	|¡| 	|¡ƒ t| 
|¡| 
|¡ƒ t| |¡| |¡ƒ t| |¡| |¡ƒ t| |¡| |¡ƒD ]\}}t||ƒ �q>d S )
Nr   rQ   r!   r¥   )r,   r)   r*   Ú	n_classesr'   r"   gH¯¼šò×z>)r2   r,   rO   r.  )r   Zmake_multilabel_classificationr:   r   rD   r8   rw   Ú
issubclassr   r}   Zpredict_log_probar�   ÚzipZstaged_decision_function)	r6  r7  r<   r;   r  ZdenseÚsparseZ
res_sparseÚresrI   rI   rJ   Útest_sparse_input–  sd       ÿ
   ÿ þ   ÿ þ ÿ ÿ ÿþr=  c           
      C   s´   t ddd�\}}d}| |dddddd�}| |ddddd	d�}t||dd
�\}}}}	| ||¡ | ||¡ |j|j  k r‚|k sˆn t‚| ||	¡dksœt‚| ||	¡dks°t‚d S )Néè  r   rM   r'   rr   r#   é*   )r2   rÔ   rP   rO   r,   Ztolgü©ñÒMbP?r“   gffffffæ?)r	   r   r:   Ún_estimators_r@   rU   )
rÎ   r;   r<   r2   Zgb_large_tolZgb_small_tolrV   rW   rX   rY   rI   rI   rJ   Ú%test_gradient_boosting_early_stoppingÃ  s0    ú	ú	rA  c                  C   sh   t ddd�\} }tddddd�}| | |¡ td	dddd�}| | |¡ |jdksVt‚|jd	ksdt‚d S )
Nr>  r   rM   rQ   rr   r#   r?  )r2   rP   rO   r,   r`   )r	   r   r:   r   r@  r@   )r;   r<   ÚgbcÚgbrrI   rI   rJ   Ú-test_gradient_boosting_without_early_stoppingé  s"       ÿ   ÿrD  c                  C   s  t ddd�\} }tddddddd	�}t|ƒjd
d�}t|ƒjdd�}tddddddd�}t|ƒjd
d�}t|ƒjdd�}t| |dd�\}}	}
}| ||
¡ | ||
¡ |j|jks¶t‚| ||
¡ | ||
¡ |j|jksÞt‚| ||
¡ | ||
¡ |j|jk �st‚|j|jk �st‚d S )Nr>  r   rM   r$   r'   rr   r#   r?  )r2   rÔ   Úvalidation_fractionrP   rO   r,   rš   )rE  r¥   ©rÔ   )r2   rÔ   rP   rO   rE  r,   r“   )	r	   r   r   rþ   r   r   r:   r@  r@   )r;   r<   rB  Zgbc2Zgbc3rC  Zgbr2Zgbr3rV   rW   rX   rY   rI   rI   rJ   Ú*test_gradient_boosting_validation_fractionü  s@    úúrG  c               	   C   s\   ddgddgddgddgg} ddddg}t dd�}tjtdd	�� | | |¡ W 5 Q R X d S )
Nr!   r"   r#   r%   rŽ   r   rF  z0The least populated class in y has only 1 memberr„   ©r   r5   r6   r7   r:   )r;   r<   rB  rI   rI   rJ   Útest_early_stopping_stratified'  s    
 ÿrI  c                   C   s   t ddd�S )Nr#   r!   )r8  Zn_clusters_per_class)r	   rI   rI   rI   rJ   Ú_make_multiclass3  s    rJ  z!gb, dataset_maker, init_estimatorzbinary classificationzmulticlass classificationZ
regression)Zidsc              	   C   sˆ   |ƒ \}}t j |¡ d¡}|ƒ }| |d�j|||d� t|ƒ ƒ}| |d� ||¡ tjtdd�� | |d�j|||d� W 5 Q R X d S )Nr$   ©r(  rb   z*estimator.*does not support sample weightsr„   )	rB   r«   r¬   r¾   r:   r   r5   r6   r7   )r3  Zdataset_makerZinit_estimatorrF   r;   r<   rc   Zinit_estrI   rI   rJ   Ú test_gradient_boosting_with_init7  s    

rL  c               	   C   sÊ   t dd�\} }ttƒ ƒ}t|d�}| | |¡ tjtdd��" |j| |t 	| j
d ¡d� W 5 Q R X d}d|› d	�}tjtt |¡d��8 td
|d�}t|d�}|j| |t 	| j
d ¡d� W 5 Q R X d S )Nr   r“   rK  z>The initial estimator Pipeline does not support sample weightsr„   rb   g      ø?zIThe 'nu' parameter of NuSVR must be a float in the range (0.0, 1.0]. Got z	 instead.Úauto)ÚgammaÚnu)r
   r   r   r   r:   r5   r6   r7   rB   rd   rE   r   ÚreÚescaper   )r;   r<   r(  r3  Z
invalid_nur‹   rI   rI   rJ   Ú)test_gradient_boosting_with_init_pipelineV  s     

þ&
ÿ
rR  c               	   C   sd   dggd } ddgdgd  }t dddd�}tjtdd	�� | | |¡ W 5 Q R X t ddd
d�}d S )Nr!   r'   r   r&   rŽ   rß   )rÔ   r,   rE  z0The training data after the early stopping splitr„   gš™™™™™Ù?rH  )r;   r<   r3  rI   rI   rJ   Útest_early_stopping_n_classest  s"      ÿ ÿ  ÿrS  c                  C   s>   t  d¡} t  d¡}tƒ  | |¡}t|jt jdt jd�ƒ d S )N)r'   r'   )r'   r'   r    )rB   rˆ   rd   r   r:   r   rw   r£   )r;   r<   rC  rI   rI   rJ   Ú'test_gbr_degenerate_feature_importancesŠ  s    

rT  )‡Ú__doc__rP  r¯   ÚnumpyrB   r5   Znumpy.testingr   Zscipy.sparser   r   r   Zscipy.specialr   Zsklearnr   Zsklearn.baser   Zsklearn.datasetsr	   r
   Zsklearn.dummyr   r   Zsklearn.ensembler   r   Z#sklearn.ensemble._gradient_boostingr   Zsklearn.exceptionsr   r   Zsklearn.linear_modelr   Zsklearn.metricsr   Zsklearn.model_selectionr   Zsklearn.pipeliner   Zsklearn.preprocessingr   Zsklearn.svmr   Zsklearn.utilsr   r   Zsklearn.utils._mockingr   Zsklearn.utils._param_validationr   Zsklearn.utils._testingr   r   r   ZGRADIENT_BOOSTING_ESTIMATORSr;   r<   r9   r=   rf   re   r«   r¬   r²   Z	load_irisrn   Zpermutationro   r©   Úpermrp   ÚmarkZparametrizerK   rZ   rj   rq   rv   rz   rƒ   r‡   rŒ   r’   r™   rŸ   r¤   r§   rµ   r½   rÀ   rÃ   rÆ   rÉ   rÌ   rÍ   rÓ   rØ   rÛ   rÜ   rø   rù   r  r  r  r  r  r  r  r  r  r  r  r  r  r%  r&  r)  r+  r-  r/  r0  r1  r4  r5  r=  rA  rD  rG  rI  rJ  rL  rR  rS  rT  rI   rI   rI   rJ   Ú<module>   s@  (
    ÿ


-',þþ
	$!


úþ
 










(

-


 ÿ( ÿ
#+ýù	
