B
    	\3                 @   sT  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mZmZmZmZ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!m"Z" d dl#m$Z$ d dl#m%Z%m&Z& d dl#m'Z' ej()dej()ddd Z*ej()ddd Z+dd Z,dd Z-dd Z.dd Z/dd Z0d d! Z1d"d# Z2dS )$    )divisionN)sparse)LeaveOneOut)assert_array_almost_equalassert_equalassert_greaterassert_almost_equalassert_greater_equalassert_array_equalassert_raisesignore_warnings)make_classification
make_blobs)MultinomialNB)RandomForestClassifierRandomForestRegressor)	LinearSVC)Pipeline)SimpleImputer)brier_score_losslog_loss)CalibratedClassifierCV)_sigmoid_calibration_SigmoidCalibration)calibration_curvez(ignore:The default value of n_estimatorsz"ignore: You should specify a valuec              C   sd  d} t d|  ddd\}}tjjddj|jd}|| 8 }|d|  |d|  |d|    }}}|| d || d  }}t j|||d	}	|		|ddd
f }
t
|	|jd
 d}tt|j|| x||ft|t|fgD ]p\}}x*dD ] }t
|	|dd}|j|||d	 |	|ddd
f }tt||
t|| |j||d
 |d	 |	|ddd
f }t|| |j|d| d
 |d	 |	|ddd
f }t|| |j||d
 d |d	 |	|ddd
f }|dkr t|d
|  qtt||
t|d
 d | qW t
|	dd}tt|j|| t
t dd}tt|j|| qW dS )z2Test calibration objects with isotonic and sigmoidd         *   )	n_samples
n_featuresrandom_state)seed)sizeN)sample_weight   )cv)isotonicsigmoid)methodr&   r(   Zfoo)r)   )r   nprandomRandomStateuniformr#   minr   fitpredict_probar   r   
ValueErrorr   
csr_matrixr   r   r   r   RuntimeError)r   Xyr$   X_trainy_trainsw_trainX_testy_testclfprob_pos_clfpc_clfZthis_X_trainthis_X_testr)   prob_pos_pc_clfZprob_pos_pc_clf_relabeledZclf_invalid_methodZclf_base_regressor r@   =lib/python3.7/site-packages/sklearn/tests/test_calibration.pytest_calibration   sR    
(



rB   c              C   s   d} t d|  ddd\}}tjjddjt|d}|d |  |d |  |d |    }}}|| d  }xldD ]d}tdd	}	t|	|d
}
|
j|||d |
	|}|
|| |
	|}tj
|| }t|d qnW d S )Nr   r   r   r   )r   r    r!   )r"   )r#   )r(   r'   )r!   )r)   )r$   g?)r   r*   r+   r,   r-   lenr   r   r/   r0   ZlinalgZnormr   )r   r4   r5   r$   r6   r7   r8   r9   r)   Zbase_estimatorZcalibrated_clfZprobs_with_swZprobs_without_swZdiffr@   r@   rA   test_sample_weighti   s    
(



rD   c              C   s  t  } tdddddd\}}tddd	g}|| }|d
d
d |d
d
d  }}|dd
d |dd
d  }}| || x~dD ]v}	t| |	dd}
|
|| |
|}ttj|ddt	t
| dd }t||| |}t||}t|| qW tddddd\}}|d
d
d |d
d
d  }}|dd
d |dd
d  }}tddd} | || | |}t||}xFdD ]>}	t| |	dd}
|
|| |
|}t||}t|| q~W d
S )z Test calibration for multiclass r   r   r      g      @)r   r    r!   Zcenterscluster_stdabcNr%   )r'   r(   )r)   r&   )axisc             S   s$   t |  }||jdddd S )Nr%   )rJ   )r*   expsumZreshape)y_preder@   r@   rA   softmax   s    z,test_calibration_multiclass.<locals>.softmax)r   r    r!   rF   
   )n_estimatorsr!   )r   r   r*   arrayr/   r   r0   r   rM   onesrC   r   Zdecision_functionr	   r   r   )r;   r4   Zy_idxZtarget_namesr5   r6   r7   r9   r:   r)   cal_clfZprobasrP   Zuncalibrated_log_lossZcalibrated_log_lossZ	clf_probsZlossZcal_clf_probsZcal_lossr@   r@   rA   test_calibration_multiclass   s>    







rV   c           
   C   s  d} t d|  ddd\}}tjjddj|jd}|| 8 }|d|  |d|  |d|    }}}|| d	|   || d	|   || d	|     }}}	|d	|  d |d	|  d  }
}t }|||| |	|
ddd
f }x||
ft
|t
|
fgD ]\}}xdD ]}t||dd}x~|	dgD ]r}|j|||d |	|}||}|ddd
f }t|tdd
gtj|d
d  tt||t|| q.W qW qW dS )z*Test calibration for prefitted classifiers2   rE   r   r   )r   r    r!   )r"   )r#   Nr   r%   )r'   r(   Zprefit)r)   r&   )r$   r   )rJ   )r   r*   r+   r,   r-   r#   r.   r   r/   r0   r   r2   r   predictr
   rS   Zargmaxr   r   )r   r4   r5   r$   r6   r7   r8   ZX_calibZy_calibZsw_calibr9   r:   r;   r<   Zthis_X_calibr>   r)   r=   swZy_probrN   r?   r@   r@   rA   test_calibration_prefit   s4    
("



rZ   c              C   s   t dddg} t dddg}t ddg}t|t| |d ddt |d	 |  |d    }t | || }t||d
 tt	t jt 
| | f| dS )z0Test calibration values with Platt sigmoid model   g      ?r%   rK   gj=ɿgY90(?rE   r   r   N)r*   rS   r   r   rL   r   r/   rX   r   r1   Zvstack)ZexFZexYZAB_lin_libsvmZlin_probZsk_probr@   r@   rA   test_sigmoid_calibration   s    "
r]   c              C   s   t ddddddg} t ddddddg}t| |d	d
\}}t| |d	 d	dd\}}tt|t| tt|d	 t|ddg t|ddg t|| t|| tttdgdgdd dS )z Check calibration_curve functionr   r%   g        g?g?g?g?g      ?r   )n_binsT)r^   	normalizeg?gF)r_   N)r*   rS   r   r   rC   r   r   r1   )Zy_truerN   Z	prob_trueZ	prob_predZprob_true_unnormalizedZprob_pred_unnormalizedr@   r@   rA   test_calibration_curve   s    

r`   c              C   sd   t dddddd\} }tj| d< tdt fdtd	d
fg}t|ddd}|| | ||  dS )z$Test that calibration can accept nanrQ   r   r   r   )r   r    Zn_informativeZn_redundantr!   )r   r   ZimputerZrfr%   )rR   r'   )r&   r)   N)	r   r*   nanr   r   r   r   r/   rX   )r4   r5   r;   Zclf_cr@   r@   rA   test_calibration_nan_imputer	  s    
rb   c              C   sh   d} t dd| d\}}tdd}t|dt d}||| ||}t|jd	d
t	|j
d  d S )Nr   rQ   r[   )r   r    Z	n_classesg      ?)Cr(   )r)   r&   r%   )rJ   r   )r   r   r   r   r/   r0   r   rM   r*   rT   shape)Znum_classesr4   r5   r;   Zclf_probZprobsr@   r@   rA   test_calibration_prob_sum  s    

re   c              C   s   t jdd} t d}tdd}t|dt d}|| | x~t|j	D ]p\}}|
| }t|d d |f t t| tt t |d d d |f |d d |d d f gd qJW d S )	NrQ   r[   g      ?)rc   r(   )r)   r&   r%   T)r*   r+   ZrandnZaranger   r   r   r/   	enumerateZcalibrated_classifiers_r0   r
   ZzerosrC   r   allZhstack)r4   r5   r;   rU   iZcalibrated_classifierZprobar@   r@   rA   test_calibration_less_classes%  s    


 ri   )3Z
__future__r   ZpytestZnumpyr*   Zscipyr   Zsklearn.model_selectionr   Zsklearn.utils.testingr   r   r   r   r	   r
   r   r   Zsklearn.datasetsr   r   Zsklearn.naive_bayesr   Zsklearn.ensembler   r   Zsklearn.svmr   Zsklearn.pipeliner   Zsklearn.imputer   Zsklearn.metricsr   r   Zsklearn.calibrationr   r   r   r   ZmarkfilterwarningsrB   rD   rV   rZ   r]   r`   rb   re   ri   r@   r@   r@   rA   <module>   s2   (
L7)