a
    �ù»j;f  ã                   @   s~  d dl mZ d dlZd dlZd dl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mZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  d d	l!m"Z" d d
l#m$Z$ d dl%m&Z&m'Z'm(Z( d.dd„Z)dd„ Z*dd„ Z+dd„ Z,dd„ Z-dd„ Z.dd„ Z/dd„ Z0ej1 2deeeg¡dd„ ƒZ3d d!„ Z4d"d#„ Z5ej1 2d$g d%¢¡ej1 2d&g d'¢¡d(d)„ ƒƒZ6d*d+„ Z7d,d-„ Z8dS )/é    )ÚproductN)Úassert_allclose)Úoptimize)Ú	factorialÚxlogy)ÚDummyRegressor)ÚUndefinedMetricWarning)Úd2_absolute_error_scoreÚd2_pinball_scoreÚd2_tweedie_scoreÚexplained_variance_scoreÚmake_scorerÚ	max_errorÚmean_absolute_errorÚmean_absolute_percentage_errorÚmean_pinball_lossÚmean_squared_errorÚmean_squared_log_errorÚmean_tweedie_devianceÚmedian_absolute_errorÚr2_scoreÚroot_mean_squared_errorÚroot_mean_squared_log_error)Ú_check_reg_targets)ÚGridSearchCV)Úassert_almost_equalÚassert_array_almost_equalÚassert_array_equalé2   c                 C   s¬  t  | ¡}|d }|d }tt||ƒdƒ tt||ƒtt  d| ¡t  d| ¡ƒƒ tt||ƒdƒ tt||ƒdƒ tt||ƒdƒ tt||dd�dƒ tt||dd�dƒ tt||ƒdƒ t	||ƒ}t  
|¡sÔJ ‚|dksàJ ‚tt||ƒdƒ tt||ƒdd	ƒ tt||d
d�dd	ƒ tt||ƒdƒ tt||d
d�dƒ tt||dd�t||ƒƒ tt||dd�t||ƒƒ t  |t  |¡ ¡ ¡ }tt||ƒdt  || ¡ ¡ |  ƒ d}dd„ }t j||d d�}tt|||d�d||||ƒ ¡ ||||ƒ ¡   ƒ tt||ƒt||dd�ƒ t  dd|  ¡}d	| }| }	tt||dd�d|	 |	d	 d	|	  d  ƒ tt||dd�|	d dt  d	¡  ƒ tt||d	d�d	t  d	¡ d ƒ tt||dd�dt  d	¡ d |	 t  |¡ ¡  ƒ tt||dd�t  d| ¡d|	  ƒ d	t  t|d	| |	d  ƒ¡ }
tt||dd�d|	d dt  d	¡  |
  ƒ d	t  |	d d	 ¡ d	|	 t  t|	ƒ¡  }
tt||d	d�dd	t  d	¡ d |
  ƒ d S )Né   ç      ð?ç      à?çš™™™™™Ù?©Úalphaç333333ã?ç    €„.Ag×£p=
×ï?é   F©Úforce_finiter   ©Úpowerçš™™™™™É?c                 S   s,   |t  | | d¡ d| t  ||  d¡  S )Nr   r   )ÚnpÚmaximum)Úy_trueÚy_predr$   © r1   úKE:\soccer\ml_env\Lib\site-packages\sklearn/metrics/tests/test_regression.pyÚ<lambda>M   s   ÿþz)test_regression_metrics.<locals>.<lambda>éd   )Úqéÿÿÿÿg«ªªªªªÚ?ç      ø?é   é   é   é   )r-   Zaranger   r   r   Úlogr   r   r   r   Úisfiniter   r   r   r   r   ÚabsÚmedianÚsumr   r	   Z
percentiler
   ÚsqrtÚmeanr   r   )Ú	n_samplesr/   r0   Zy_pred_2ÚmapeZ
dev_medianr$   Zpinball_lossZ
y_quantileÚnZdev_meanr1   r1   r2   Útest_regression_metrics&   s     
þ
ÿþÿþÿÿþþþ ÿÿ"þ ÿ þ,$ÿrF   c                  C   sH   t dggdggdd�} tdggdggdd�}t | ¡t |¡ksDJ ‚d S )Nr   é
   Ú
raw_values©Úmultioutput)r   r   r-   rA   ÚpytestÚapprox)ÚmseZrmser1   r1   r2   Ú2test_root_mean_squared_error_multioutput_raw_value€   s    rN   c                     sÎ  t  g d¢g d¢g d¢g¡‰t  g d¢g d¢g d¢g¡‰ tˆˆ ƒ} t| dƒ tˆˆ ƒ} t| ddd	� tˆˆ ƒ} t| d
dd	� tˆˆ ƒ} t| ddd	� tˆˆ ƒ} t| dƒ tˆˆ ƒ} t| dƒ t j	t
ˆˆ ƒdd�} t  | ¡sÞJ ‚| dksêJ ‚tˆˆ ƒ} t| dƒ tˆˆ dd�} t| dƒ tˆˆ dd�} t| dƒ tˆˆ ddd�}‡ ‡fdd„tˆjd ƒD ƒ}t  t  |¡d|¡}t||ƒ tˆˆ ddd�}t|| ¡ ƒ ddg}t|ddgdd�} t| dƒ t|ddgdd�} t| dƒ tˆˆ ddd�} t| t jƒ tˆˆ ddd�} t| t jƒ ˆd d …d d …f ‰ˆ d d …d d …f ‰ tˆˆ dd�} tˆˆ ddd�}t| |ƒ tˆˆ dd�} tˆˆ ddd�}t| |ƒ t|ddgddd�} t| t jƒ t|dd!gddd�} t| t j ƒ d S )"N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   gªªªªªªÚ?gu“VÝ?r'   ©Údecimalr,   g)\�Âõ(Ô?gªªªªªªÊ?)Zdecimalsr&   r!   Zvariance_weightedrI   g      ø¿Úuniform_averageg      ì¿rH   ©r$   rJ   c                    sj   g | ]b}d t  ˆdd…|f ˆ dd…|f  ¡ ¡ t  ˆdd…|f t  ˆdd…|f ¡ ¡ ¡   ‘qS )r   N)r-   r>   r@   r?   )Ú.0Úi©r0   r/   r1   r2   Ú
<listcomp>¬   s   ý(.ÿÿz/test_multioutput_regression.<locals>.<listcomp>r   g      @r    gffffff@ç        F©rJ   r)   r6   g      @)r-   Úarrayr   r   r   r   r   r   r   Úaroundr   r=   r   r   r
   ÚrangeÚshapeÚwhereÚisnanr   rB   ÚnanÚinf)ÚerrorÚscoreZraw_expected_scoreZycZerror2r1   rU   r2   Útest_multioutput_regressionˆ   sx    












ü


ÿÿ

ÿÿrc   c                  C   sö  t tdgdgƒdƒ t tdgdgƒdƒ t tdgdgƒdƒ t tdgdgƒdƒ t tdgdgƒdƒ t tdgdgƒdƒ t tdgdgƒdƒ t tdgdgƒdƒ t t	dgdgƒdƒ t t
ddgddgƒdƒ t tddgddgƒdƒ t
t	fD ]r} t | ddgddgƒdƒ t | ddgddgdd�tj ƒ t | ddgddgƒdƒ t | ddgddgdd�tjƒ qìd}tjt|d	�� td
gd
gƒ W d   ƒ n1 �s˜0    Y  d}tjt|d	��" tg d¢g d¢ƒ W d   ƒ n1 �sÞ0    Y  d}tjt|d	��" tg d¢g d¢ƒ W d   ƒ n1 �s$0    Y  d}tjt|d	��" tg d¢g d¢ƒ W d   ƒ n1 �sj0    Y  d}d}ttdgdg|d�dd|  dd� d}tjt|d	��" tdgdg|d� W d   ƒ n1 �sÜ0    Y  tjt|d	��* tdgd dgd |d� W d   ƒ n1 �s&0    Y  t tdgdgdd�ddƒ d}d}tjt|d	��" tdgdg|d� W d   ƒ n1 �sŠ0    Y  tjt|d	��* tdgd dgd |d� W d   ƒ n1 �sÔ0    Y  d}ttdgdg|d�dd|  ƒ d}tjt|d	��" tdgdg|d� W d   ƒ n1 �s>0    Y  tjt|d	��* tdgd dgd |d� W d   ƒ n1 �sˆ0    Y  d}ttdgdg|d�ddd� d}tjt|d	��" tdgdg|d� W d   ƒ n1 �sî0    Y  tjt|d	��* tdgd dgd |d� W d   ƒ n1 �s80    Y  d}ttdgdg|d�ddd� d}tjt|d	��" tdgdg|d� W d   ƒ n1 �sž0    Y  tjt|d	��* tdgd dgd |d� W d   ƒ n1 �sè0    Y  d S )NrW   r    r   r   r6   Fr(   zcMean Squared Logarithmic Error cannot be used when targets contain values less than or equal to -1.©Úmatchç      ð¿)r    ç       @ç      @)r    g       Àrh   zhRoot Mean Squared Logarithmic Error cannot be used when targets contain values less than or equal to -1.g333333ó¿r*   r'   gü©ñÒMbP?)Zrtolz-can only be used on strictly positive y_pred.z<only be used on non-negative y and strictly positive y_pred.r7   rg   g:Œ0âŽyE>©Zatolz3can only be used on strictly positive y and y_pred.rh   )r   r   r   r   r   r   r   r   r   r   r   r
   r-   r`   r_   rK   ÚraisesÚ
ValueErrorr   r   r   r   )ÚsÚmsgr+   r1   r1   r2   Ú!test_regression_metrics_at_limitsß   sŽ      ÿ.ÿ2ÿ2ÿ2ÿÿ2:2: 2:2:2rn   c               	   C   sH  dg d¢dfddgdgdggdfdddgddgddggdfdddgddgddggdfdg d	¢g d
¢g d¢gdfg} t | dd�D ]Ä\\}}}\}}}||k�r
||k�r
t||d ƒ\}}}	}
||ksÆJ ‚|dkrôt|t |d¡ƒ t|	t |d¡ƒ nt||ƒ t|	|ƒ q~t t¡� t||d ƒ W d   ƒ q~1 �s80    Y  q~d S )NZ
continuous©r   r'   r:   r   r'   r:   zcontinuous-multioutputé   r;   )r   r:   r;   )r'   r'   r'   )r:   r   r   )Úrepeat)r6   r   )r   r   r   r-   ZreshaperK   rj   rk   )ZEXAMPLESZtype1Úy1Zn_out1Ztype2Úy2Zn_out2Zy_typeZy_check1Zy_check2rJ   r1   r1   r2   Útest__check_reg_targetsA  s"    û 
rt   c                  C   s\   d} d  | ¡}tjt|d��, tg d¢dgdgdgg| ƒ W d   ƒ n1 sN0    Y  d S )NZthis_value_is_not_validzFAllowed 'multioutput' string values are.+You provided multioutput={!r}rd   ro   r   r'   r:   )ÚformatrK   rj   rk   r   )Zinvalid_multioutputZexpected_messager1   r1   r2   Ú!test__check_reg_targets_exceptionZ  s    ÿÿrv   c                  C   sŽ  ddgddgddgddgg} ddgddgdd	gdd
gg}t | |dd�}t| |dd�}t| |dd�}t| |dd�}t| |dd�}t| |dd�}t| |ddd�}t| |ddd�}	t|ddgdd� t|ddgdd� t|ddgdd� t|ddgdd� t|ddgdd� t|ddgdd� t|ddgdd� t|	ddgdd� ddggd	 } ddggd	 }t | |dd�}t| |dd�}t| |dd�}t| |dd�}t| |dd�}t|ddgdd� t|ddgdd� t|ddgdd� t|ddgdd� t|ddgdd� tddgddggddgddggdd�}t|dd gdd� t 	|¡tddgddggddgddggd!d�k�sfJ ‚tddgddggddgddggdd�}t|dd"gdd� tddgddggddgddggddd�}	t|	tj
 d"gdd� ddgddgg} dd	gddgg}t| |dd�}
t|
dd#gdd� t 	|
¡t| |d!d�k�s:J ‚t| |ddd�}t|tjd#gdd� tt 	|¡t| |d!dd�ƒ t| |dd�}t|dd#gdd� t 	|¡t| |ƒk�s´J ‚t| |ddd�}t|dd$gdd� t| |ddd�}	t|	tjd#gdd� tt 	|	¡t| |dd%�ƒ t ddgddgdd&gg¡} t ddgddgd'd'gg¡}t| |dd�}t t d|  ¡t d| ¡dd�}t||dd� d S )(Nr   r'   ç      @r6   ç      @r:   rp   é   r;   ç      @rH   rI   r!   rR   FrX   g      À?g      â?rO   ç      Ð?g      ä?g      Ô?g	ù g³ê³?g2w-!ôÌ?çffffffî?gÃõ(\�Âí?g-²�ï§ê?g´Èv¾Ÿç?r   r    rW   g      ÀrQ   g      ô¿g      Àrf   r(   r8   r9   )r   r   r   r   r   r   r
   r   r-   rB   r`   r_   r   rY   r   r<   )r/   r0   rM   ZmaeÚpblrD   ÚrZevsZd2psZevs2Úr2Zr22ÚmsleÚmsle2r1   r1   r2   Ú!test_regression_multioutput_arraye  sœ    ÿ&
ÿÿüþÿÿÿr‚   c                  C   s¾  ddgddgddgddgg} ddgddgdd	gdd
gg}t | |ddgd�}t| |ddgd�}t| |ddgd�}t| |ddgd�}t| |ddgd�}t| |ddgd�}t| |dddgd�}t| |ddgdd�}	t|ddd� t|ddd� t|ddd� t|ddd� t|ddd� t|ddd� t|ddd� t|	ddd� t 	ddgddgddgg¡} t 	ddgddgddgg¡}t
| |ddgd�}
t t d|  ¡t d| ¡ddgd�}t|
|dd� d S )Nr   r'   rw   r6   rx   r:   rp   ry   r;   rz   r"   r%   rI   r!   rR   FrX   gö(\�ÂõØ?rO   gáz®Gáâ?gffffffÞ?g¶„|Ð³YÅ?g®Gázî?gP�—nƒè?r8   r9   g333333Ó?gffffffæ?)r   r   r   r   r   r   r
   r   r-   rY   r   r<   )r/   r0   ZmsewZrmsewZmaewZmapewÚrwZevswZd2pswZevsw2r€   r�   r1   r1   r2   Útest_regression_custom_weightsÃ  s6    ÿÿr„   Úmetricc                 C   sZ   dg}dg}d}t jt|d��( | ||ƒ}t |¡s8J ‚W d   ƒ n1 sL0    Y  d S )Nr   r   z,not well-defined with less than two samples.rd   )rK   Zwarnsr   r-   r^   )r…   r/   r0   Zwarning_msgrb   r1   r1   r2   Útest_regression_single_sampleå  s    
r†   c                  C   s¸   d} t j d¡ | ¡d }t j d¡ | ¡d }tt||dd�t||dd�ƒ tt||dd�t||dd�dd	� tt||d
d�t||dd�dd	� tt||dd�t||dd�dd	� d S )Nr4   r   çš™™™™™¹?r   g»½×Ùß|Û½r*   g8ß   ð?g�íµ ÷Æ°>ri   gÈ ùÿÿÿÿ?r'   gœo    @)r-   ÚrandomÚRandomStateZrandr   r   )rC   r/   r0   r1   r1   r2   Ú test_tweedie_deviance_continuityñ  s,    þ	ýýýrŠ   c                  C   s<   t j d¡} | jdd�}d| }t||ƒt d¡ks8J ‚d S )Né*   r4   ©Úsizeg333333ó?r,   )r-   rˆ   r‰   Úexponentialr   rK   rL   )Zrandom_number_generatorr/   r0   r1   r1   r2   Ú#test_mean_absolute_percentage_error  s    r�   Údistribution)ÚnormalZ	lognormalrŽ   ÚuniformÚtarget_quantile)çš™™™™™©?r!   ç      è?c                    s\  t tdƒst d¡ d‰tj d¡}t|| ƒˆd�‰ t ˆ ˆ¡}tjˆ|d�}t	ˆ |ˆd�}t ˆ t 
dd	d
¡¡}|D ]€}tjˆ|d�}t	ˆ |ˆd�}	|	|t |j¡j ks°J ‚|ˆ ˆ |k    ¡ d	ˆ  ˆ ˆ |k |  ¡ ˆ  }
|
ˆ }
t|
|	ƒ qv‡ ‡‡fdd„}tj|ˆ  ¡ dd�}|j�s(J ‚|jtj|dd�k�sBJ ‚|jt |¡k�sXJ ‚d S )NÚquantilezOThis test requires a more recent version of numpy with support for np.quantile.i¸  r‹   rŒ   ©Z
fill_valuer#   r   r   r4   c                    s   t jˆ| d�}tˆ |ˆd�S )Nr—   r#   )r-   Úfullr   )ÚxÚconstant_pred©ÚdatarC   r“   r1   r2   Úobjective_funcE  s    zFtest_mean_pinball_loss_on_constant_predictions.<locals>.objective_funczNelder-Mead)Úmethodg{®Gáz„?)Úrel)Úhasattrr-   rK   Úskiprˆ   r‰   Úgetattrr–   r˜   r   ZlinspaceZfinfoZdtypeÚepsr@   r   r   ZminimizerB   Úsuccessr™   rL   Zfun)r�   r“   ÚrngZ	best_predZbest_constant_predZbest_pblZcandidate_predictionsÚpredrš   r}   Zexpected_pblr�   Úresultr1   r›   r2   Ú.test_mean_pinball_loss_on_constant_predictions  s6    
ÿÿþr¨   c            	      C   s�   d} t j d¡}|j| dfd�}|j| d�}g d¢}|D ]R}tt|dd�}tdd	d
�}t|t	|d�|d� 
||¡}|jd t |¡ks8J ‚q8d S )Niè  r   rp   rŒ   )r”   r‡   r{   r!   r•   gÍÌÌÌÌÌì?r|   F)r$   Zgreater_is_betterr–   r{   )Zstrategyr–   )r–   )Z
param_gridZscoring)r-   rˆ   r‰   r‘   rŽ   r   r   r   r   ÚdictÚfitZbest_params_rK   rL   )	rC   r¥   ÚXÚyZall_quantilesr$   Zneg_mean_pinball_lossZ	regressorZgrid_searchr1   r1   r2   Ú$test_dummy_quantile_parameter_tuningP  s(    ýýür­   c                  C   sR   t j d¡} d}| j|d�}| ¡ |  |¡ }t||ƒt||dd�d ksNJ ‚d S )NiÊ  r4   rŒ   r!   r#   r'   )r-   rˆ   r‰   r‘   Úcopyr’   r   r   )r¥   rE   r/   r0   r1   r1   r2   Ú#test_pinball_loss_relation_with_maek  s    ÿÿr¯   )r   )9Ú	itertoolsr   Únumpyr-   rK   Znumpy.testingr   Zscipyr   Zscipy.specialr   r   Zsklearn.dummyr   Zsklearn.exceptionsr   Zsklearn.metricsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zsklearn.metrics._regressionr   Zsklearn.model_selectionr   Zsklearn.utils._testingr   r   r   rF   rN   rc   rn   rt   rv   r‚   r„   ÚmarkZparametrizer†   rŠ   r�   r¨   r­   r¯   r1   r1   r1   r2   Ú<module>   s<   H
ZWb^"
"ÿ2