B
    (b
,                 @   s$  d Z ddl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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 ddlmZmZmZ ddlmZ ddlmZ G dd de Z!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'dd Z(d d! Z)d"d# Z*d$d% Z+dS )&z'
Testing Recursive feature elimination
    N)assert_array_almost_equalassert_array_equal)sparse)RFERFECV)	load_irismake_friedman1)zero_one_loss)SVCSVR)RandomForestClassifier)cross_val_score)check_random_state)ignore_warnings)assert_greaterassert_equalassert_true)make_scorer)
get_scorerc               @   sR   e Zd ZdZdddZdd Zdd ZeZeZeZ	dd
dZ
dddZdd Zd	S )MockClassifierz@
    Dummy classifier to test recursive feature elimination
    r   c             C   s
   || _ d S )N)	foo_param)selfr    r   W/home/dcms/DCMS/lib/python3.7/site-packages/sklearn/feature_selection/tests/test_rfe.py__init__   s    zMockClassifier.__init__c             C   s0   t t|t|k tj|jd tjd| _| S )N   )Zdtype)r   lennponesshapefloat64Zcoef_)r   XYr   r   r   fit   s    zMockClassifier.fitc             C   s
   |j d S )Nr   )r   )r   Tr   r   r   predict$   s    zMockClassifier.predictNc             C   s   | j dkrd}nd}|S )Nr   g      ?g        )r   )r   r!   r"   scorer   r   r   r&   +   s    
zMockClassifier.scoreTc             C   s
   d| j iS )Nr   )r   )r   deepr   r   r   
get_params2   s    zMockClassifier.get_paramsc             K   s   | S )Nr   )r   paramsr   r   r   
set_params5   s    zMockClassifier.set_params)r   )NN)T)__name__
__module____qualname____doc__r   r#   r%   Zpredict_probaZdecision_function	transformr&   r(   r*   r   r   r   r   r      s   


r   c              C   s   t d} t }tj|j| jt|jdfdf }|j}td| dd}t	|ddd	}|
|| tt|j|jd
  tdd}t	|ddd	}|
|| t| |  d S )Nr      )size      )Zn_estimatorsrandom_stateZ	max_depth   g?)	estimatorn_features_to_selectstepr   linear)kernel)r   r   r   c_datanormalr   targetr   r   r#   r   ranking_r   r
   r   Zget_support)	generatoririsr!   yclfrfeZclf_svcZrfe_svcr   r   r   test_rfe_features_importance9   s    "

rE   c              C   s2  t d} t }tj|j| jt|jdfdf }t|}|j	}t
dd}t|ddd}||| ||}||| tt|j|jd	  t
dd}t|ddd}	|	|| |	|}
t|j|jj t|d d
 |jd d
  t||||j t|||||j|j	 t||
  d S )Nr   r0   )r1   r9   )r:   r5   g?)r6   r7   r8   r   
   )r   r   r   r;   r<   r=   r   r   
csr_matrixr>   r
   r   r#   r/   r   r?   r   r   r%   r&   toarray)r@   rA   r!   X_sparserB   rC   rD   X_rZ
clf_sparseZ
rfe_sparse
X_r_sparser   r   r   test_rfeM   s(    "




rL   c              C   s   t d} t }tj|j| jt|jdfdf }|j}t }t	|ddd}|
|| ||}|
|| tt|j|jd  t|j|jj d S )Nr   r0   )r1   r5   g?)r6   r7   r8   r   )r   r   r   r;   r<   r=   r   r>   r   r   r#   r/   r   r?   r   )r@   rA   r!   rB   rC   rD   rJ   r   r   r   test_rfe_mockclassifierj   s    "
rM   c              C   s  t d} t }tj|j| jt|jdfdf }t|j}t	t
ddddd}||| tt|j|jd  tt|j|jd  ||}t||j t	t
ddddd}t|}||| ||}t| |j ttd	d
}	t	t
dddd|	d}t|j|| ||}t||j td}
t	t
dddd|
d}||| ||}t||j dd }t	t
dddd|d}||| t|jtt|j t	t
ddddd}||| tt|jd tt|j|jd  ||}t||j t	t
ddddd}t|}||| ||}t| |j t	t
ddddd}t|}||| ||}t| |j d S )Nr   r0   )r1   r9   )r:   r      )r6   r8   cvF)Zgreater_is_better)r6   r8   rO   scoringZaccuracyc             S   s   dS )Ng      ?r   )r6   r!   rB   r   r   r   test_scorer   s    ztest_rfecv.<locals>.test_scorerr3   g?)r   r   r   r;   r<   r=   r   listr>   r   r
   r#   r   grid_scores_r   r?   r/   r   r   rG   rH   r   r	   r   r   r   )r@   rA   r!   rB   rfecvrJ   Zrfecv_sparserI   rK   rP   ZscorerrQ   r   r   r   
test_rfecvz   s`    "










rU   c              C   s   t d} t }tj|j| jt|jdfdf }t|j}t	t
 ddd}||| tt|j|jd  tt|j|jd  d S )Nr   r0   )r1   r   rN   )r6   r8   rO   )r   r   r   r;   r<   r=   r   rR   r>   r   r   r#   r   rS   r   r?   )r@   rA   r!   rB   rT   r   r   r   test_rfecv_mockclassifier   s    "
rV   c              C   s   ddl m}  dd l}|  |_td}t }tj|j|j	t
|jdfdf }t|j}ttdddddd	}||| |j}|d tt
| d d S )
Nr   )	cStringIOr0   )r1   r9   )r:   r   rN   )r6   r8   rO   verbose)Zsklearn.externals.six.movesrW   sysstdoutr   r   r   r;   r<   r=   r   rR   r>   r   r
   r#   seekr   readline)StringIOrY   r@   rA   r!   rB   rT   Zverbose_outputr   r   r   test_rfecv_verbose_output   s    "

r^   c              C   sB   t tdd} t| jd t }t| |j|j}t|	 d d S )Nr9   )r:   
classifiergffffff?)
r   r
   r   Z_estimator_typer   r   r<   r>   r   min)rD   rA   r&   r   r   r   test_rfe_estimator_tags   s
    ra   c              C   s   d} t d| dd\}}|j\}} tdd}t|dd}|||}t|j | d	  t|d
d}|||}t|j | d	  t|dd}|||}t|j | d	  d S )NrF   2   r   )	n_samples
n_featuresr4   r9   )r:   g{Gz?)r8   r3   g?rN   )r   r   r   r   r#   r   Zsupport_sum)rd   r!   rB   rc   r6   selectorselr   r   r   test_rfe_min_step   s    

rh   c              C   sh  dd } dd }ddg}ddg}ddg}xt |||D ]\}}}td}|jd	|fd
}	|d	 }
ttdd||d}||	|
 tt	
|j| ||| tt	
|j|||| q6W d}ddg}ddg}xt ||D ]\}}td}|jd	|fd
}	|d	 }
ttdd|dd}||	|
 t|jjd | ||| t|jjd |||| qW d S )Nc             S   s   d| | | d |  S )Nr   r   )rd   r7   r8   r   r   r   formula1	  s    z4test_number_of_subsets_of_features.<locals>.formula1c             S   s   dt | | t|  S )Nr   )r   ceilfloat)rd   r7   r8   r   r   r   formula2  s    z4test_number_of_subsets_of_features.<locals>.formula2      r3   +   d   )r1   r9   )r:   )r6   r7   r8   r   rF   rN   )r6   r8   rO   r   )zipr   r=   Zrandroundr   r
   r#   r   r   maxr?   r   rS   r   )ri   rl   Zn_features_listZn_features_to_select_listZ	step_listrd   r7   r8   r@   r!   rB   rD   rT   r   r   r   "test_number_of_subsets_of_features   s<    	

rt   c              C   s   t d} t }tj|j| jt|jdfdf }|j}tt	ddd}|
|| |j}|j}|jdd |
|| t|j| t|j| d S )	Nr   r0   )r1   r9   )r:   )r6   r3   )Zn_jobs)r   r   r   r;   r<   r=   r   r>   r   r
   r#   r?   rS   r*   r   )r@   rA   r!   rB   rT   Zrfecv_rankingZrfecv_grid_scoresr   r   r   test_rfe_cv_n_jobs<  s    "ru   ),r.   numpyr   Znumpy.testingr   r   Zscipyr   Zsklearn.feature_selection.rfer   r   Zsklearn.datasetsr   r   Zsklearn.metricsr	   Zsklearn.svmr
   r   Zsklearn.ensembler   Zsklearn.model_selectionr   Zsklearn.utilsr   Zsklearn.utils.testingr   r   r   r   r   r   objectr   rE   rL   rM   rU   rV   r^   ra   rh   rt   ru   r   r   r   r   <module>   s2   "F	<