U
    _»{j¬W  ã                
   @   sö  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	 d dl
mZmZmZmZmZ d dlmZ d dlmZmZmZ dd	„ Zej d
ejd ddgejd�gdfejddejgejd�gdfejdddged�gdfdg¡ej dddg¡ej dddg¡dd„ ƒƒƒZej dejd gd  dgd   d!g gejd�jd ddggfejdgd  dgd   dg ged�jddd"ggfg¡ej dd#dg¡d$d%„ ƒƒZ ej d&ddd dgd'fe ddd gddd!gg¡jd(fdddgd)fg¡d*d+„ ƒZ!d,d-„ Z"d.d/„ Z#ej d0d1d2g¡ej dddg¡ej dd3d4dg¡d5d6„ ƒƒƒZ$ejjd7e d8gd9 ¡d8fe d gd9 ¡d fejd:gd9 ed�d fgddd;gd<�ej ddd#d=g¡d>d?„ ƒƒZ%d@dA„ Z&dBdC„ Z'ej dd=dDdg¡dEdF„ ƒZ(ej )dG¡ej dd=dg¡dHdI„ ƒƒZ*dS )Jé    N)Úassert_allcloseÚassert_array_equal)ÚRandomForestRegressor)ÚRidge)ÚKFoldÚShuffleSplitÚStratifiedKFoldÚcross_val_scoreÚtrain_test_split)Úmake_pipeline)ÚKBinsDiscretizerÚLabelEncoderÚTargetEncoderc                 C   sð   t j|t jd�}t  |¡}|dkr¢t  |¡}t|ƒD ]h}|| |k }|jd }	|	dkr`|||< q4t  |¡}
|
| }|	|	|  }|t  |¡ d| |  ||< q4|S t|ƒD ]<}|| |k }t  |¡||  }|jd | }|| ||< qª|S dS )z0Simple Python implementation of target encoding.©ZdtypeÚautor   é   N)ÚnpZzerosÚfloat64ÚmeanÚvarÚrangeÚshapeÚsum)Ú	X_ordinalÚy_intÚn_categoriesÚsmoothÚcur_encodingsÚy_meanZ
y_varianceÚcZy_subsetZn_iZy_subset_varianceÚmZlambda_Zcurrent_sumZcurrent_cnt© r!   ún/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/preprocessing/tests/test_target_encoder.pyÚ_encode_target   s*    



 r#   zcategories, unknown_valuer   é   r   é   ç      ð?ç      @g      @ÚcatÚdogÚsnakeÚbear)r   é   r   g      @r   Útarget_typeÚbinaryÚ
continuousc                 C   sj  d}t jdgd dgd  dgd  gt jd�j}t jdddggt jd�j}|jd }| d	krh|}	|}
n| d | }	| d | }
t  |
|ggf¡}
t j |¡}d}|d
krÖ|jdd|d�}t jddgt	d�}|| }n|j
dd|d�}|}| |¡}|| }|	| }	|| }|| }|d
k�r.t||dd�}nt||dd�}t j|t jd�}| ||¡D ]F\}}||df ||  }}t||||ƒ}|||df  ||df< �qXt|| ||d�}| |	|¡}|j|k�sÌt‚t||ƒ t|jƒdk�sêt‚t  |¡}t|dd…df |||ƒ}t|jd |ƒ |jt |¡k�s4t‚t  |t  |g¡f¡ dd¡}| |
¡}t||ƒ dS )zíCheck encoding for binary and continuous targets.

    Compare the values returned by `TargetEncoder.fit_transform` against the
    expected encodings for cv splits from a naive reference Python
    implementation in _encode_target.
    r,   r   é   r   é   r$   é(   r   r   r.   ©ÚlowÚhighÚsizer(   r)   éöÿÿÿT)Ún_splitsÚrandom_stateÚshuffle)r   Ú
categoriesÚcvr9   Néÿÿÿÿ)r   ÚarrayÚint64ÚTr   ÚconcatenateÚrandomÚRandomStateÚrandintÚobjectÚuniformÚpermutationr   r   Ú
empty_liker   Úsplitr#   r   Úfit_transformÚtarget_type_ÚAssertionErrorr   ÚlenÚ
encodings_r   Útarget_mean_ÚpytestÚapproxÚreshapeÚ	transform)r;   Zunknown_valueÚglobal_random_seedr   r-   r   ZX_train_int_arrayZX_test_int_arrayÚ	n_samplesÚX_trainÚX_testZdata_rngr8   r   Ztarget_namesÚy_trainZshuffled_idxr<   Úexpected_X_fit_transformÚ	train_idxÚtest_idxÚX_Úy_r   Útarget_encoderÚX_fit_transformr   Úexpected_encodingsÚexpected_X_test_transformÚX_test_transformr!   r!   r"   Útest_encoding4   s€    .



  ÿ
ÿü

   ÿÿ þ
rc   zX, categoriesé
   r,   Úcowç      @c                 C   sš   t j d¡}|jdd| jd d�}t||dd� | |¡}| ¡ }| | dd… ¡}|d t	 
|¡ksht‚t|jƒd	kszt‚|jd d t	 
|¡ks–t‚dS )
zHCustom categories with unknown categories that are not in training data.r   r7   r0   r3   )r;   r   r9   r=   N)r   r   r   )r   rB   rC   rF   r   r   Úfitr   rS   rP   rQ   rL   rM   rN   )ÚXr;   r   ÚrngÚyÚencr   ÚX_transr!   r!   r"   Útest_custom_categoriesš   s    rm   zy, msgz'Found input variables with inconsistentz7Target type was inferred to be 'multiclass-multioutput'ú+Target type was inferred to be 'multiclass'c              	   C   sD   t  dddgg¡j}tƒ }tjt|d�� | || ¡ W 5 Q R X dS )zCheck invalidate input.r   r   ©ÚmatchN)r   r>   r@   r   rP   ÚraisesÚ
ValueErrorrJ   )rj   Úmsgrh   rk   r!   r!   r"   Útest_errorsº   s    rt   c               	   C   sˆ   t  ddddddgg¡j} t  ddddddg¡}tƒ }d}tjt|d�� | | |¡ W 5 Q R X td	d
�}| | |¡ |jd	ks„t	‚dS )z6Custom target_type to avoid inferring the target type.r   r   r&   g       @r'   rf   rn   ro   r/   )r-   N)
r   r>   r@   r   rP   rq   rr   rJ   rK   rL   )rh   rj   rk   rs   r!   r!   r"   Útest_use_regression_targetÎ   s    
ru   c                  C   s¶   t  d¡} |  ddgd ddgd dœ¡}ddgd }tddd	d
�}|jdd� tddd	d
�}|jdd� | ||¡}| ||¡}t| ¡ |ƒ t| 	¡ ddgƒ t| 	¡ |j
ƒ dS )z*Check TargetEncoder works with set_output.ÚpandasÚaÚbrd   r   r$   )ÚAÚBr'   r   ©r<   r   r9   Údefault)rS   ry   rz   N)rP   ÚimportorskipÚ	DataFramer   Z
set_outputrJ   r   Zto_numpyr   Zget_feature_names_outÚcolumns)ÚpdZX_dfrj   Zenc_defaultZ
enc_pandasZ	X_defaultZX_pandasr!   r!   r"   Ú!test_feature_names_out_set_outputà   s    
 r�   Ú	to_pandasTFúbinary-intsú
binary-strc              
   C   s  t jddgddgddgddgddgddgddgddggt jd�}|dkr~t  ddddddddg¡}tƒ  |¡}tdddd	�}np|d
kr¼t  ddddddddg¡}tƒ  |¡}tdddd	�}n2t jddddddddgt jd�}|}tdddd	�}t  |¡}dddgddgg}t jddgddgddggt jd�}	| �ršt	 
d¡}
|
 |dd…df t jddgtd�|dd…df  dœ¡}|
 |	dd…df dddgdœ¡}	n|}t j|t jd�}t|ƒD ]b\}}| ||¡D ]J\}}|||f ||  }}t||t|ƒ|ƒ}||||f  |||f< �qÊ�q¶g }t|ƒD ]2\}}t|dd…|f |t|ƒ|ƒ}| |¡ �q&t j|d d |d d g||d d g|d d |ggt jd�}t|ddd�}| ||¡}t||ƒ t|jƒdk�sÔt‚tdƒD ]}t|j| || ƒ �qÜ| |	¡}t||ƒ dS )z,Check target encoder with multiple features.r   r   r$   r   r„   rw   rx   T)r9   r:   rƒ   r,   r%   r'   gffffff@g333333@g      @gffffff@g      @çš™™™™™$@g333333@rd   rv   Nr(   r)   )Zfeat0Zfeat1r*   )r   r<   r9   )r   r>   r?   r   rJ   r   Zfloat32r   r   rP   r}   r~   rE   rH   r   Ú	enumeraterI   r#   rM   Úappendr   r   rN   rL   r   rS   )r‚   r   r-   r   rX   Z	y_integerr<   r   r;   rW   r€   rV   rY   Zf_idxZcatsrZ   r[   r\   r]   Zcurrent_encodingr`   ra   rk   r_   Úirb   r!   r!   r"   Útest_multiple_features_quickô   s‚    2 ÿ 
ýú	
 þÿ$
ÿ   ÿýú	

r‰   z	y, y_meang333333@r0   rw   zbinary-string)Zidsç        c           	      C   s¼   t  dgd g¡j}|jd }td|dd�}| || ¡}t|t j|gg|dd�ƒ |jd d t	 
|¡ksnt‚|jt	 
|¡ks‚t‚t  dgdgg¡}| |¡}t|t j|ggddd�ƒ dS )z5Check edge case where feature and target is constant.r   r0   r   r$   r{   ©ZaxisN)r   r>   r@   r   r   rJ   r   ÚrepeatrN   rP   rQ   rL   rO   rS   )	rj   r   r   rh   rU   rk   rl   rW   ZX_test_transr!   r!   r"   Ú test_constant_target_and_featureI  s    

r�   c                 C   sð   d}d}t j | ¡}|j|d�}|jd||d� dd¡}| ¡ }|| }|| }td| d�}| ||¡}td	d
�}| ||¡}	t	dd| d�}
t
d| d�}t|
|||d� ¡ dk s´t‚t|
|||d� ¡ dk sÐt‚t|
|	||d� ¡ dksìt‚d S )Nr1   i¸  ©r6   r   r=   r   T)r:   r9   F)r:   rd   r0   )Zn_estimatorsZmin_samples_leafr9   é2   )r8   r9   )r<   çš™™™™™¹?ç      à?)r   rB   rC   ÚnormalrD   rR   Zargsortr   rJ   r   r   r	   r   rL   )rT   ZcardinalityrU   ri   rX   rV   Zy_sorted_indicesr^   ZX_encoded_train_shuffledZX_encoded_train_no_shuffledZ	regressorr<   r!   r!   r"   ÚFtest_fit_transform_not_associated_with_y_if_ordinal_categorical_is_notc  s6    
  ÿ	ÿÿ	ÿÿr“   c                  C   s–   t  ddddddddddg
g¡j} t  ddddddd	d
ddg
¡}tdddd�}| | |¡}t|d t  |dd… ¡ƒ t|d t  |dd… ¡ƒ dS )zECheck edge case with zero smoothing and cv does not contain category.r   r   gÍÌÌÌÌÌ @g333333@g333333ó?gÍÌÌÌÌÌ@r&   g      "@r…   gffffff,@gš™™™™™*@g      .@rŠ   Fr$   )r   r:   r<   é   Nr=   )r   r>   r@   r   rJ   r   r   )rh   rj   rk   rl   r!   r!   r"   Útest_smooth_zero‘  s    "r•   g     @�@c                 C   sÆ   t j |¡}|jdd�}d}t|dd� | dd¡¡}t|||d�\}}}}	| |¡}
|
| 	t j
¡ }|
| 	t j
¡ }t| |d	�}| ||¡}| |¡}| ||¡}| |¡}t||ƒ t||ƒ d S )
Niè  rŽ   r1   Úordinal)Ún_binsÚencoder=   r   ©r9   ©r   r9   )r   rB   rC   r’   r   rJ   rR   r
   rG   ÚastypeÚint32r   rS   r   )r   rT   ri   rj   r   rh   rV   rW   rX   Úy_testÚpermutated_labelsZX_train_permutedZX_test_permutedr^   ZX_train_encodedZX_test_encodedZX_train_permuted_encodedZX_test_permuted_encodedr!   r!   r"   Ú3test_invariance_of_encoding_under_label_permutation¢  s*    
ÿ  ÿ



rŸ   z0ignore:In version 1.5 onwards, subsample=200_000c                 C   s"  t dddd�}d}tj |¡}| |¡}d| |¡ }d}t|dd	|d
� ||  dd¡¡}| |¡}	|	| 	tj
¡ }| |¡}
|jtd| ƒ|dd� dd¡}tj||
|gdd�}t||dd�\}}}}| ||¡}| ||¡dk sêt‚| ||¡dk sþt‚tt| |d�|ƒ ||¡}|d j}| ||¡dk�s<t|ƒ‚| ||¡dk�sVt|ƒ‚|d tjddd�k�srt‚t |dd … ¡dk  ¡ �s’t‚t| |d� ||¡}| |¡}| |¡}| ||¡}|j}| ||¡dk�sæt|ƒ‚| ||¡dk �s t|ƒ‚t|d ƒt|d ƒk �st‚d S )Ng�íµ ÷Æ°>ZlsqrF)ÚalphaZsolverZfit_interceptiPÃ  gš™™™™™é?éd   r–   rF   )r—   r˜   Zstrategyr9   r=   r   gÍÌÌÌÌÌì?T)r6   Úreplacer‹   r   r™   r�   rš   r‘   g{®Gáz„?)Úabsgš™™™™™É?gffffffæ?r$   )r   r   rB   rC   Zrandnr   rJ   rR   rG   r›   rœ   ÚchoiceÚintrA   r
   rg   ZscorerL   r   r   Zcoef_rP   rQ   r£   ÚallrS   )r   rT   Zlinear_regressionrU   ri   rj   Únoiser   ZX_informativerž   Z
X_shuffledZX_near_unique_categoriesrh   rV   rW   rX   r�   Z	raw_modelZmodel_with_cvZcoefr^   ZX_enc_no_cv_trainZX_enc_no_cv_testZmodel_no_cvr!   r!   r"   Ú*test_target_encoding_for_linear_regressionÇ  sp    
üû



  ÿ þþ
 ÿ þ
  ÿ

r¨   )+Únumpyr   rP   Znumpy.testingr   r   Zsklearn.ensembler   Zsklearn.linear_modelr   Zsklearn.model_selectionr   r   r   r	   r
   Zsklearn.pipeliner   Zsklearn.preprocessingr   r   r   r#   ÚmarkZparametrizer>   r?   Únanr   rE   rc   r@   rm   rt   ru   r�   r‰   r�   r“   r•   rŸ   Úfilterwarningsr¨   r!   r!   r!   r"   Ú<module>   s†   üþ	[(
þ ÿ
üûþþúþ
	Rýù	.
$
