B
    0dJ                 @   s  d Z ddlZddl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 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 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! 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+ ddl*m,Z, ddl*m-Z- ed d!\Z.Z/ed d!\Z0Z1ej23d"d#e&d#d d$d%gej23d&ded$d'gej23d(d)d gd*d+ Z4d,d- Z5d.d/ Z6d0d1 Z7ej23d"d#e'd#d d$d%gej23d2di fed$d'i fe d3d ifgej23d(d)d gd4d5 Z8ej23d6d7d8d9gd:d; Z9ej23d6d7d8d9gd<d= Z:d>d? Z;G d@dA dAe	eZ<G dBdC dCeeZ=ej23dDe1dEdie>dFfe1dEg ie>dFfe1dGe fdHedIdJfgdKdLe>dMfe1dEdGe fdNe= fgie?dOfe1dGe fdNedIdJfge= dPe?dOfgdQdR Z@ej23dDe/dEdie>dFfe/dEg ie>dFfe/dEdGe fdNe< fgie?dOfe/dGe fdNe fge< dPe?dOfgdSdT ZAej2j3dUe"dGedd'fdHedd'fgdVe0ddW e1ddW fe#dGe fdHedd'fgdVe.e/fgdXdYgdZd[d\ ZBd]d^ ZCej2j3d_e"dGe fdHed$d'fge e'd d$d`dafed d!e#dGe fdHed$d'fge e'd d$d`dae.e/fgdXdYgdZdbdc ZDddde ZEej2Fdfej2j3d_e"dGe fdHed$d'fge dPfed d!e#dGe fdHed$d'fge dPe.e/fgdXdYgdZdgdh ZGej23diee"efee#efgdjdk ZHdS )lz+Test the stacking classifier and regressor.    N)BaseEstimator)ClassifierMixin)RegressorMixin)clone)ConvergenceWarning)	load_iris)load_diabetes)load_breast_cancer)make_regression)make_classification)DummyClassifier)DummyRegressor)LogisticRegression)LinearRegression)	LinearSVC)	LinearSVR)SVC)RandomForestClassifier)RandomForestRegressor)scale)StackingClassifier)StackingRegressor)train_test_split)StratifiedKFold)KFold)CheckingClassifier)assert_allclose)assert_allclose_dense_sparse)ignore_warningsT)
return_X_ycv   *   )Zn_splitsshufflerandom_statefinal_estimator)r$   passthroughFc             C   sH  t ttttdd\}}}}dt fdt fg}t||| |d}||| || |	| |
||dkstt||}	|rdnd}
|	jd	 |
kst|rt||	d d d
d f  |jdd ||| || |	| |d kr|| ||}	|rdnd}|	jd	 |ks$t|rDt||	d d d
d f  d S )Nr"   )stratifyr$   lrsvc)
estimatorsr%   r    r&   g?
         drop)r(      r!   )r   r   X_irisy_irisr   r   r   fitpredictpredict_probaZscoreAssertionError	transformshaper   
set_paramsZdecision_function)r    r%   r&   X_trainX_testy_trainZy_testr*   clfX_transexpected_column_countexpected_column_count_drop rA   V/var/www/html/venv/lib/python3.7/site-packages/sklearn/ensemble/tests/test_stacking.pytest_stacking_classifier_iris2   s8    







rC   c        	      C   s   t dd\} }tt| ||dd\}}}}dt fdtddfg}t|dd	}||| ||}|jd
 dksvt	dt fdt
 fg}|j|d ||| ||}|jd
 dkst	d S )NT)r   r"   )r'   r$   r(   rf)r$   r!   )r*   r    r-      r)   )r*   )r	   r   r   r   r   r   r3   r7   r8   r6   r   r9   )	Xyr:   r;   r<   _r*   r=   r>   rA   rA   rB   :test_stacking_classifier_drop_column_binary_classification`   s    

rI   c              C   s   t ttttdd\} }}}ddtddfg}tddd}tdtddfg|d	d
}t||d	d
}|| | || | t|	||	| t|
||
| t|||| d S )Nr"   )r'   r$   )r(   r/   r)   r   )r$   r+   )n_estimatorsr$      )r*   r%   r    )r   r   r1   r2   r   r   r   r3   r   r4   r5   r7   )r:   r;   r<   rH   r*   rD   r=   Zclf_droprA   rA   rB   'test_stacking_classifier_drop_estimator{   s    rL   c              C   s   t tttdd\} }}}ddtddfg}tddd}tdtddfg|dd	}t||dd	}|| | || | t|	||	| t|
||
| d S )
Nr"   )r$   )r(   r/   svrr   r+   )rJ   r$   rK   )r*   r%   r    )r   r   
X_diabetes
y_diabetesr   r   r   r3   r   r4   r7   )r:   r;   r<   rH   r*   rD   regZreg_droprA   rA   rB   &test_stacking_regressor_drop_estimator   s    rQ   zfinal_estimator, predict_paramsZ
return_stdc             C   s.  t tttdd\}}}}dt fdt fg}t||| |d}	|	|| |	j|f|}
|r`dnd}|rxt	|
|ksxt
|	|}|rdnd}|jd |kst
|rt||d d d	d f  |	jd
d |	|| |	| |	|}|rdnd}|jd |ks
t
|r*t||d d d	d f  d S )Nr"   )r$   r(   rM   )r*   r%   r    r&   rE   r-      ir/   )r(      )r   r   rN   rO   r   r   r   r3   r4   lenr6   r7   r8   r   r9   )r    r%   Zpredict_paramsr&   r:   r;   r<   rH   r*   rP   resultZexpected_result_lengthr>   r?   r@   rA   rA   rB    test_stacking_regressor_diabetes   s4    


rV   fmtZcscZcsrZcooc       	      C   s   t ttt| tdd\}}}}dt fdt fg}t	ddd}t
||ddd	}||| ||}t||d d d
d f  t|st|j|jkstd S )Nr"   )r$   r(   rM   r+   )rJ   r$   rK   T)r*   r%   r    r&   i)r   sparse
coo_matrixr   rN   asformatrO   r   r   r   r   r3   r7   r   issparser6   format)	rW   r:   r;   r<   rH   r*   rD   r=   r>   rA   rA   rB   *test_stacking_regressor_sparse_passthrough   s    $
r]   c       	      C   s   t ttt| tdd\}}}}dt fdt fg}t	ddd}t
||ddd	}||| ||}t||d d d
d f  t|st|j|jkstd S )Nr"   )r$   r(   r)   r+   )rJ   r$   rK   T)r*   r%   r    r&   r.   )r   rX   rY   r   r1   rZ   r2   r   r   r   r   r3   r7   r   r[   r6   r\   )	rW   r:   r;   r<   rH   r*   rD   r=   r>   rA   rA   rB   +test_stacking_classifier_sparse_passthrough   s    $
r^   c              C   sh   t td d td d  } }dt fdt fg}t|d}|| | || }|jd dksdt	d S )Nd   r(   rD   )r*   r-   rE   )
r   r1   r2   r   r   r   r3   r7   r8   r6   )ZX_Zy_r*   r=   ZX_metarA   rA   rB   )test_stacking_classifier_drop_binary_prob   s    

r`   c               @   s   e Zd Zdd Zdd ZdS )NoWeightRegressorc             C   s   t  | _| j||S )N)r   rP   r3   )selfrF   rG   rA   rA   rB   r3     s    zNoWeightRegressor.fitc             C   s   t |jd S )Nr   )nponesr8   )rb   rF   rA   rA   rB   r4     s    zNoWeightRegressor.predictN)__name__
__module____qualname__r3   r4   rA   rA   rA   rB   ra     s   ra   c               @   s   e Zd Zdd ZdS )NoWeightClassifierc             C   s   t dd| _| j||S )NZ
stratified)Zstrategy)r   r=   r3   )rb   rF   rG   rA   rA   rB   r3     s    zNoWeightClassifier.fitN)re   rf   rg   r3   rA   rA   rA   rB   rh     s   rh   zy, params, type_err, msg_errr*   zInvalid 'estimators' attribute,r(   svmg     j@)max_iterr5   )r*   Zstack_methodz+does not implement the method predict_probaZcorzdoes not support sample weight)r*   r%   c          	   C   sP   t j||d8 tf |ddi}|jtt| ttjd d W d Q R X d S )N)matchr    r!   r   )sample_weight)	pytestraisesr   r3   r   r1   rc   rd   r8   )rG   paramstype_errmsg_errr=   rA   rA   rB   test_stacking_classifier_error  s    +rr   c          	   C   sP   t j||d8 tf |ddi}|jtt| ttjd d W d Q R X d S )N)rk   r    r!   r   )rl   )	rm   rn   r   r3   r   rN   rc   rd   r8   )rG   ro   rp   rq   rP   rA   rA   rB   test_stacking_regressor_errorA  s    rs   zestimator, X, y)r*   r_   r   r   )Zidsc             C   s   t | }|jtdtjddd t | }|jdd |jtdtjddd t||||d d dd f |||| d S )NTr   )r#   r$   )r    r/   )r(   r-   )	r   r9   r   rc   randomZRandomStater   r3   r7   )Z	estimatorrF   rG   Zestimator_fullZestimator_droprA   rA   rB   test_stacking_randomnessb  s     ru   c              C   s2   t dtddfdtddfgd} | tt d S )Nr(   g     @)rj   ri   )r*   )r   r   r   r3   r1   r2   )r=   rA   rA   rB   )test_stacking_classifier_stratify_default  s    rv   zstacker, X, y)r#   r$   )r*   r%   r    c          	   C   s  t |d }tdg| dgt ||   }t|||dd\}}}}}	}ttd | || W d Q R X | |}
ttd | j||t|j	d W d Q R X | |}t
|
| ttd | j|||	d W d Q R X | |}t|
|  dkstd S )	NrE   g?g?r"   )r$   )category)rl   r   )rT   rc   arrayr   r   r   r3   r4   rd   r8   r   abssumr6   )stackerrF   rG   Zn_half_samplesZtotal_sample_weightr:   r;   r<   rH   Zsample_weight_trainZy_pred_no_weightZy_pred_unit_weightZy_pred_biasedrA   rA   rB    test_stacking_with_sample_weight  s     !
"


r|   c              C   sB   t dtdgdfgtdgdd} | jttttjd d d S )Nr(   rl   )Zexpected_fit_params)r*   r%   r   )rl   )r   r   r3   r1   r2   rc   rd   r8   )r{   rA   rA   rB   0test_stacking_classifier_sample_weight_fit_param  s    r}   z-ignore::sklearn.exceptions.ConvergenceWarningc          	   C   s   t | }t | }|jdd |jdd ||| ||| x(t|j|jD ]\}}t|j|j qPW tjt	dd t|j
j|j
j W d Q R X d S )Nr!   )r    rK   z	Not equal)rk   )r   r9   r3   zipZestimators_r   Zcoef_rm   rn   r6   Zfinal_estimator_)r{   rF   rG   Zstacker_cv_3Zstacker_cv_5Zest_cv_3Zest_cv_5rA   rA   rB   test_stacking_cv_influence  s    !r   z!make_dataset, Stacking, Estimatorc          	   C   s   G dd d|}| ddd\}}|d| fgd}|j  d}tjt|d	 |j W d Q R X ||| d
}tjt|d	 |j W d Q R X d S )Nc                   s    e Zd ZdZ fddZ  ZS )z8test_stacking_without_n_features_in.<locals>.MyEstimatorz Estimator without n_features_in_c                s   t  || | `d S )N)superr3   n_features_in_)rb   rF   rG   )	__class__rA   rB   r3   #  s    z<test_stacking_without_n_features_in.<locals>.MyEstimator.fit)re   rf   rg   __doc__r3   __classcell__rA   rA   )r   rB   MyEstimator   s   r   r   r_   )r$   Z	n_samplesr(   )r*   z' object has no attribute n_features_in_)rk   z6'MyEstimator' object has no attribute 'n_features_in_')re   rm   rn   AttributeErrorr   r3   )Zmake_datasetZStackingZ	Estimatorr   rF   rG   r{   msgrA   rA   rB   #test_stacking_without_n_features_in  s    r   )Ir   rm   numpyrc   Zscipy.sparserX   Zsklearn.baser   r   r   r   Zsklearn.exceptionsr   Zsklearn.datasetsr   r   r	   r
   r   Zsklearn.dummyr   r   Zsklearn.linear_modelr   r   Zsklearn.svmr   r   r   Zsklearn.ensembler   r   Zsklearn.preprocessingr   r   r   Zsklearn.model_selectionr   r   r   Zsklearn.utils._mockingr   Zsklearn.utils._testingr   r   r   rN   rO   r1   r2   markZparametrizerC   rI   rL   rQ   rV   r]   r^   r`   ra   rh   
ValueError	TypeErrorrr   rs   ru   rv   r|   r}   filterwarningsr   r   rA   rA   rA   rB   <module>   s  (%	



	


