o
    ¢Äi¿  ã                   @   sæ   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	m
Z
mZ d dlmZ d dlmZmZmZ d dlmZ d!d
d„Zdd„ Zdd„ Zdd„ Zej de¡dd„ ƒZej de¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd „ Z dS )"é    N)Úoptimize)Úmake_regression)ÚHuberRegressorÚLinearRegressionÚRidgeÚSGDRegressor©Ú_huber_loss_and_gradient)Úassert_almost_equalÚassert_array_almost_equalÚassert_array_equal)ÚCSR_CONTAINERSé2   é   c                 C   sj   t j d¡}t| |ddd\}}td|  ƒ}| d| |¡}d| dd||jd f¡ ||d d …f< ||fS )Nr   gš™™™™™©?)Ú	n_samplesÚ
n_featuresÚrandom_stateÚnoiseçš™™™™™¹?ç       @é   )ÚnpÚrandomÚRandomStater   ÚintÚrandintÚnormalÚshape)r   r   ÚrngÚXÚyZ	num_noiseZrandom_samples© r!   ú_/home/kim/smarthome/.venv/lib/python3.10/site-packages/sklearn/linear_model/tests/test_huber.pyÚmake_regression_with_outliers   s   
ÿ(r#   c                  C   sX   t ƒ \} }tƒ }| | |¡ tddd}| | |¡ t|j|jdƒ t|j|jdƒ d S )Ng     @@ç        )ÚepsilonÚalphaé   é   )r#   r   Úfitr   r
   Úcoef_Ú
intercept_)r   r    ÚlrÚhuberr!   r!   r"   Ú%test_huber_equals_lr_for_high_epsilon!   s   
r.   c                  C   s4   t ƒ \} }tdd}| | |¡ |j|jksJ ‚d S )Nr   )Úmax_iter)r#   r   r)   Ún_iter_r/   )r   r    r-   r!   r!   r"   Útest_huber_max_iter,   s   

r1   c            
      C   s®   t j d¡} tƒ \}}|  dd|jd ¡}dd„ }dd„ }tdƒD ]3}|jd d |jd d	 fD ]"}|  |¡}t  |d
 ¡|d
< t	 
|||||dd|¡}	t|	ddƒ q1q!d S )Nr   r'   r   c                 W   ó   t | g|¢R Ž d S )Nr   r   ©ÚxÚargsr!   r!   r"   Ú	loss_func9   ó   z&test_huber_gradient.<locals>.loss_funcc                 W   r2   )Nr   r   r3   r!   r!   r"   Ú	grad_func<   r7   z&test_huber_gradient.<locals>.grad_funcé   r(   éÿÿÿÿç{®Gáz„?r   gíµ ÷Æ°>é   )r   r   r   r#   r   r   ÚrangeZrandnÚabsr   Z
check_gradr
   )
r   r   r    Úsample_weightr6   r8   Ú_r   ÚwZ	grad_samer!   r!   r"   Útest_huber_gradient3   s   
 
ÿúþrB   Úcsr_containerc              	   C   s’  t ƒ \}}tƒ }| ||¡ |j}|j}tt t |j¡¡t t |j¡¡ƒ}|j||t 	|j
d ¡d t|j| || ƒ t|j| || ƒ t ddd\}}t |t |d |d |d f¡f¡}t ||d g|d g|d gf¡}| ||¡ |j}|j}t 	|j
d ¡}	d|	d< d|	d< |j|||	d t|j| || ƒ t|j| || ƒ | |ƒ}
tƒ }|j|
||	d t|j| || ƒ d S )	Nr   )r?   r9   r   ©r   r   r   r'   r(   )r#   r   r)   r*   r+   Úmaxr   Úmeanr>   Zonesr   r   ZvstackZconcatenate)rC   r   r    r-   Z
huber_coefZhuber_interceptÚscaleZX_newZy_newr?   ÚX_csrÚhuber_sparser!   r!   r"   Útest_huber_sample_weightsK   s2   
&&$rJ   c                 C   s^   t ƒ \}}tdd}| ||¡ | |ƒ}tdd}| ||¡ t|j|jƒ t|j|jƒ d S )Nr   ©r&   )r#   r   r)   r   r*   r   Ú	outliers_)rC   r   r    r-   rH   rI   r!   r!   r"   Útest_huber_sparset   s   


rM   c                  C   s~   t ƒ \} }tddd}| | |¡ |j}t |¡rJ ‚| | d| ¡ |j}t||ƒ | d|  d| ¡ |j}t||ƒ d S )NFr$   )Úfit_interceptr&   r   )r#   r   r)   rL   r   Úallr   )r   r    r-   Zn_outliers_mask_1Zn_outliers_mask_2Zn_outliers_mask_3r!   r!   r"   Útest_huber_scaling_invariant   s   

rP   c               
   C   s   t ddd\} }tdddd}| | |¡ | |j }||j }| ||¡ t|jdd	ƒ tdd
dddddd d}| ||¡ t|j|jdƒ d S )Né
   r(   rD   Fr$   gš™™™™™õ?)rN   r&   r%   ç      ð?r'   r-   Tr   é'  )r&   ZlossÚshuffler   r/   rN   r%   Útolr   )r#   r   r)   Úscale_r
   r   r   r*   )r   r    r-   ZX_scaleZy_scaleZsgdregr!   r!   r"   Útest_huber_and_sgd_same_results’   s&   

ø
rW   c                  C   s\   t ƒ \} }tddddd}| | |¡ |j ¡ }| | |¡ t|j|dƒ |jdks,J ‚d S )NrR   rS   Tr   )r&   r/   Z
warm_startrU   r   r   )r#   r   r)   r*   Úcopyr   r0   )r   r    Z
huber_warmZhuber_warm_coefr!   r!   r"   Útest_huber_warm_start®   s   

rY   c            
      C   sØ   t ƒ \} }tdd}| | |¡ t | |j¡|j | }t |¡|j|j	 k }| 
| | || ¡}| 
| |  ||  ¡}tdd}| | |¡ | 
| | || ¡}| 
| |  ||  ¡}	||ksdJ ‚|	|ksjJ ‚d S )Nr;   rK   )r#   r   r)   r   Údotr*   r+   r>   r%   rV   Zscorer   )
r   r    r-   Zlinear_lossÚmaskZhuber_scoreZhuber_outlier_scoreZridgeZridge_scoreZridge_outlier_scorer!   r!   r"   Útest_huber_better_r2_score½   s   


r\   c                  C   s.   t ddddd\} }| dk}tƒ  ||¡ d S )NéÈ   r(   g      @r   )r   r   r   r   )r   r   r)   )r   r    ZX_boolr!   r!   r"   Útest_huber_boolÔ   s   r^   )r   r   )!Únumpyr   ZpytestZscipyr   Zsklearn.datasetsr   Zsklearn.linear_modelr   r   r   r   Zsklearn.linear_model._huberr	   Zsklearn.utils._testingr
   r   r   Zsklearn.utils.fixesr   r#   r.   r1   rB   ÚmarkZparametrizerJ   rM   rP   rW   rY   r\   r^   r!   r!   r!   r"   Ú<module>   s*   

(
