ó
‡ˆ\c           @   sì  d  Z  d d l Z d d l 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 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" m# Z# e j$ ƒ  Z% e% j& d d … d d … f e% j' Z( Z) e j* j+ d ƒ e j* j+ d ƒ d „  ƒ ƒ Z, e j* j+ d ƒ e j* j+ d ƒ d „  ƒ ƒ Z- e j* j+ d ƒ e j* j+ d ƒ d „  ƒ ƒ Z. e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d „  ƒ ƒ ƒ Z/ e j* j+ d ƒ d „  ƒ Z0 e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d „  ƒ ƒ ƒ Z1 e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d  „  ƒ ƒ ƒ Z2 e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d! „  ƒ ƒ ƒ Z3 d" „  Z4 e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d# „  ƒ ƒ ƒ Z5 e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d$ „  ƒ ƒ ƒ Z6 e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d% „  ƒ ƒ ƒ Z7 d& „  Z8 e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d' „  ƒ ƒ ƒ Z9 e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d( „  ƒ ƒ ƒ Z: e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d) „  ƒ ƒ ƒ Z; e j* j+ d ƒ e j* j+ d ƒ e j* j+ d ƒ d* „  ƒ ƒ ƒ Z< d S(+   s    Testing for the VotingClassifieriÿÿÿÿN(   t   assert_almost_equalt   assert_array_equal(   t   assert_array_almost_equal(   t   assert_equal(   t   assert_raise_message(   t   assert_warns_message(   t   NotFittedError(   t   LogisticRegression(   t
   GaussianNB(   t   RandomForestClassifier(   t   VotingClassifier(   t   GridSearchCV(   t   datasets(   t   cross_val_score(   t   make_multilabel_classification(   t   SVC(   t   OneVsRestClassifier(   t   KNeighborsClassifier(   t   BaseEstimatort   ClassifierMixini   i   s&   ignore: Default solver will be changeds    ignore: Default multi_class willc          C   s{  t  d g  ƒ }  d } t t | |  j t t ƒ t d d ƒ } t  d d | f g d d ƒ }  d } t t | |  j t t ƒ t  d d | f g d	 d d
 g ƒ }  d } t t | |  j t t ƒ t  d d | f d | f g d	 d d
 g ƒ }  d } t t | |  j t t ƒ t  d d | f g ƒ }  d } t t | |  j t t ƒ t  d d | f g ƒ }  d } t t | |  j t t ƒ d  S(   Nt
   estimatorss[   Invalid `estimators` attribute, `estimators` should be a list of (string, estimator) tuplest   random_statei   t   lrt   votingt   errors5   Voting must be 'soft' or 'hard'; got (voting='error')t   weightsi   sL   Number of classifiers and weights must be equal; got 2 weights, 1 estimatorss+   Names provided are not unique: ['lr', 'lr']t   lr__s1   Estimator names must not contain __: got ['lr__']sC   Estimator names conflict with constructor arguments: ['estimators'](   R
   R   t   AttributeErrort   fitt   Xt   yR   t
   ValueError(   t   eclft   msgt   clf(    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_estimator_init   s(    $c          C   sM   t  d d t ƒ  f d t ƒ  f g d d ƒ }  d } t t | |  j t ƒ d  S(   NR   t   lr1t   lr2R   t   hards1   predict_proba is not available when voting='hard'(   R
   R   R   R   t   predict_probaR   (   R    R!   (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_predictproba_hardvoting@   s
    	c          C   sM   t  d d t ƒ  f d t ƒ  f g d d ƒ }  d } t t | |  j t ƒ d  S(   NR   R$   R%   R   t   softsq   This VotingClassifier instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.(   R
   R   R   R   R'   R   (   R    R!   (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_notfittedJ   s
    	s(   ignore:The default value of n_estimatorsc          C   s’   t  d d ƒ }  t d d ƒ } t ƒ  } t d d |  f d | f d | f g d d ƒ } t | t t d	 d
 d d ƒ} t | j ƒ  d d d ƒd S(   s7   Check classification by majority label on dataset iris.R   i{   R   R   t   rft   gnbR   R&   t   cvi   t   scoringt   accuracygffffffî?t   decimali   N(	   R   R	   R   R
   R   R   R   R    t   mean(   t   clf1t   clf2t   clf3R    t   scores(    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_majority_label_irisU   s    	!	c          C   sÇ   t  d d d d d d ƒ }  t d d ƒ } t d d |  f d	 | f g d
 d ƒ } t |  j t t ƒ j t ƒ d d ƒ t | j t t ƒ j t ƒ d d ƒ t | j t t ƒ j t ƒ d d ƒ d S(   sE   Check voting classifier selects smaller class label in tie situation.R   i{   t   multi_classt   ovrt   solvert	   liblinearR   R   R+   R   R&   iI   i   i   N(   R   R	   R
   R   R   R   R   t   predict(   R2   R3   R    (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_tie_situationd   s    		&&c       	   C   s¡   t  d d ƒ }  t d d ƒ } t ƒ  } t d d |  f d | f d | f g d d d	 d
 d d g ƒ } t | t t d d d d ƒ} t | j ƒ  d d d ƒd S(   s>   Check classification by average probabilities on dataset iris.R   i{   R   R   R+   R,   R   R)   R   i   i   i
   R-   i   R.   R/   gÃõ(\Âí?R0   N(	   R   R	   R   R
   R   R   R   R    R1   (   R2   R3   R4   R    R5   (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_weights_irisq   s    	!c       	   C   sO  t  d d ƒ }  t d d ƒ } t ƒ  } t j d d g d d g d d g d	 d
 g d d g d d g g ƒ } t j d d d d d d g ƒ } t t |  j | | ƒ j | ƒ ƒ t d d d d d d g ƒ ƒ t t | j | | ƒ j | ƒ ƒ t d d d d d d g ƒ ƒ t t | j | | ƒ j | ƒ ƒ t d d d d d d g ƒ ƒ t	 d d |  f d | f d | f g d d d d d d g ƒ } t t | j | | ƒ j | ƒ ƒ t d d d d d d g ƒ ƒ t	 d d |  f d | f d | f g d d d d d d g ƒ } t t | j | | ƒ j | ƒ ƒ t d d d d d d g ƒ ƒ d S(   s6   Manually check predicted class labels for toy dataset.R   i{   gš™™™™™ñ¿g      ø¿g333333ó¿gffffffö¿g333333Àgš™™™™™Àgš™™™™™ñ?g333333ó?gÍÌÌÌÌÌ @gffffffö?gÍÌÌÌÌÌ@gffffff@i   i   R   R   R+   R,   R   R&   R   R)   N(
   R   R	   R   t   npt   arrayR   t   allR   R;   R
   (   R2   R3   R4   R   R   R    (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_predict_on_toy_problem   s.    					!@@@!@!c       
   C   sõ  t  d d ƒ }  t d d ƒ } t ƒ  } t j d d g d d g d d g d	 d
 g g ƒ } t j d d d d g ƒ } t j d d g d d g d d g d d g g ƒ } t j d d g d d g d d g d d g g ƒ } t j d d g d d g d d g d d g g ƒ } d | d d | d d | d d d  } d | d d | d d | d d d  }	 d | d d | d d | d d d  }
 d | d! d | d! d | d! d d  } t d" d# |  f d$ | f d% | f g d& d' d( d d d g ƒ } | j | | ƒ j | ƒ } t | | d d d) d ƒt |	 | d d d) d ƒt |
 | d d d) d ƒt | | d! d d) d ƒt	 j
 t d* d+ ƒN t d" d# |  f d$ | f d% | f g d& d, ƒ } | j | | ƒ j | ƒ Wd- QXd- S(.   s1   Calculate predicted probabilities on toy dataset.R   i{   gš™™™™™ñ¿g      ø¿g333333ó¿gffffffö¿g333333Àgš™™™™™Àgš™™™™™ñ?g333333ó?i   i   g…7sa"ã?gö=ñ»Ù?g½¤Rhpâ?gâ„¶Z/Û?glç^Ô¬;à?g(1BW¦ˆß?gµU(V6ÁÙ?g&ÕëÔdã?gš™™™™™é?gš™™™™™É?g333333Ó?gffffffæ?gá5ùwÇóï?g9=”qX?gè_óï?g$ö/ÐAY?g        g      ð?i    i   i   R   R   R+   R,   R   R)   R   R0   t   matchs1   predict_proba is not available when voting='hard'R&   N(   R   R	   R   R>   R?   R
   R   R'   R    t   pytestt   raisesR   (   R2   R3   R4   R   R   t   clf1_rest   clf2_rest   clf3_rest   t00t   t11t   t21t   t31R    t   eclf_res(    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt!   test_predict_proba_on_toy_problem¤   sJ    	3						....!
!	c       	   C   s‡   t  d d d d d t d d ƒ \ }  } t t d d	 ƒ ƒ } t d
 d | f g d d ƒ } y | j |  | ƒ Wn t k
 r‚ d SXd S(   s7   Check if error is raised for multilabel classification.t	   n_classesi   t   n_labelsi   t   allow_unlabeledR   i{   t   kernelt   linearR   R8   R   R&   N(   R   t   FalseR   R   R
   R   t   NotImplementedError(   R   R   R"   R    (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_multilabel×   s    c          C   sË   t  d d ƒ }  t d d ƒ } t ƒ  } t d d |  f d | f d | f g d d ƒ } i d	 d
 g d 6d d g d 6d d d g d	 d d g g d 6} t d | d | d d ƒ } | j t j t j ƒ d S(   s   Check GridSearch support.R   i   R   R   R+   R,   R   R)   g      ð?g      Y@t   lr__CR&   g      à?R   t	   estimatort
   param_gridR-   i   N(	   R   R	   R   R
   R   R   t   irist   datat   target(   R2   R3   R4   R    t   paramst   grid(    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_gridsearchæ   s    	!	"c          C   s;  t  d d ƒ }  t d d ƒ } t ƒ  } t j d d g d d g d d g d	 d
 g g ƒ } t j d d d d g ƒ } t d d |  f d | f d | f g d d d d ƒ j | | ƒ } t d d |  f d | f d | f g d d d d ƒ j | | ƒ } t | j | ƒ | j | ƒ ƒ t	 | j
 | ƒ | j
 | ƒ ƒ d S(   s:   Check parallel backend of VotingClassifier on toy dataset.R   i{   gš™™™™™ñ¿g      ø¿g333333ó¿gffffffö¿g333333Àgš™™™™™Àgš™™™™™ñ?g333333ó?i   i   R   R   R+   R,   R   R)   t   n_jobsN(   R   R	   R   R>   R?   R
   R   R   R;   R   R'   (   R2   R3   R4   R   R   t   eclf1t   eclf2(    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_parallel_fitú   s    	3!!c    	      C   s  t  d d ƒ }  t d d ƒ } t d d d t d d ƒ } t d d |  f d | f d	 | f g d
 d ƒ j t t d t j	 t
 t ƒ f ƒ ƒ} t d d |  f d | f d	 | f g d
 d ƒ j t t ƒ } t | j t ƒ | j t ƒ ƒ t | j t ƒ | j t ƒ ƒ t j j d ƒ j d t
 t ƒ f ƒ } t d d |  f g d
 d ƒ } | j t t | ƒ |  j t t | ƒ t | j t ƒ |  j t ƒ ƒ t | j t ƒ |  j t ƒ ƒ t ƒ  } t d d |  f d	 | f d | f g d
 d ƒ } d } t t | | j t t | ƒ d S(   s1   Tests sample_weight parameter of VotingClassifierR   i{   t   gammat   scalet   probabilityR   R   R+   t   svcR   R)   t   sample_weightt   sizet   knns;   Underlying estimator 'knn' does not support sample weights.N(   R   R	   R   t   TrueR
   R   R   R   R>   t   onest   lenR   R;   R   R'   t   randomt   RandomStatet   uniformR   R   R   (	   R2   R3   R4   R`   Ra   Rg   t   eclf3t   clf4R!   (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_sample_weight  s.    !-!'	!	c          C   sl   d t  t f d „  ƒ  Y}  |  ƒ  } t d d | f g d d ƒ } | j t t d t j t t ƒ f ƒ ƒd S(	   s:   Check that VotingClassifier passes sample_weight as kwargst   MockClassifierc           B   s   e  Z d  Z d „  Z RS(   sA   Mock Classifier to check that sample_weight is received as kwargsc         _   s   d | k s t  ‚ d  S(   NRg   (   t   AssertionError(   t   selfR   R   t   argsRg   (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyR   6  s    (   t   __name__t
   __module__t   __doc__R   (    (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyRs   4  s   R   t   mockR   R)   Rg   N(	   R   R   R
   R   R   R   R>   Rk   Rl   (   Rs   R"   R    (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_sample_weight_kwargs2  s    	c          C   s¢  t  d d d d ƒ }  t d d d d ƒ } t ƒ  } t d |  f d | f g d d	 d
 d d g ƒ} d | j k sx t ‚ | j j | j d d k s› t ‚ | j j | j d k sº t ‚ | j	 t
 t ƒ d | j k sß t ‚ | j j | j d k sþ t ‚ | j j | j d k st ‚ t d |  f d | f g d d	 d
 d d g ƒ} | j d | ƒ j	 t
 t ƒ t | d ƒ st ‚ t | j t
 ƒ | j t
 ƒ ƒ t | j t
 ƒ | j t
 ƒ ƒ t | j d d j ƒ  |  j ƒ  ƒ t | j d d j ƒ  | j ƒ  ƒ | j d d ƒ | j d d ƒ | j d d j ƒ  d d k sLt ‚ | j d d j ƒ  d d k sst ‚ t | j ƒ  d | j ƒ  d j ƒ  d ƒ d S(   s+   set_params should be able to set estimatorsR   i{   t   Cg      ð?t	   max_depthR   R+   R   R)   R   i   i   i    t   nbRV   g      $@t   nb__max_depthi   N(   R   R	   t   NoneR   R
   t   named_estimatorsRt   R   R   R   R   R   t   named_estimators_t   estimators_t
   set_paramst   hasattrR   R;   R   R'   R   t
   get_params(   R2   R3   R4   R`   Ra   (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_set_params@  s4    	!#!$$''c       
   C   sÕ  t  d d ƒ }  t d d ƒ } t ƒ  } t d d |  f d | f d | f g d d d	 d
 d d g ƒ j t t ƒ } t d d |  f d | f d | f g d d d	 d
 d
 d g ƒ } | j d d ƒ j t t ƒ t	 | j
 t ƒ | j
 t ƒ ƒ t | j ƒ d d k st ‚ t | j ƒ d k s&t ‚ t d „  | j Dƒ ƒ sEt ‚ | j ƒ  d d k sat ‚ | j d d ƒ j t t ƒ | j d d ƒ j t t ƒ t	 | j
 t ƒ | j
 t ƒ ƒ t | j t ƒ | j t ƒ ƒ d } t t | | j d d d d d d ƒ j t t ƒ t j d
 g d g g ƒ } t j d
 d g ƒ } t d d | f d | f g d d d	 d d g d t ƒ j | | ƒ } t d d | f d | f g d d d	 d
 d g d t ƒ } | j d d ƒ j | | ƒ t | j | ƒ t j d d g d d g g d d g d d g g g ƒ ƒ t | j | ƒ t j d d g d d g g g ƒ ƒ | j d d ƒ | j d d ƒ t	 | j | ƒ t j d d g d
 d
 g g ƒ ƒ t	 | j | ƒ t j d g d
 g g ƒ ƒ d S(   sD   VotingClassifier set_params should be able to set estimators as NoneR   i{   R   R   R+   R~   R   R&   R   i   i    g      à?i   c         s   s$   |  ] } t  | t t f ƒ Vq d  S(   N(   t
   isinstanceR   R   (   t   .0t   est(    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pys	   <genexpr>z  s   R)   sE   All estimators are None. At least one is required to be a classifier!t   flatten_transformgffffffæ?g333333Ó?g      ð?g        N(   R   R	   R   R
   R   R   R   R„   R€   R   R;   t   dictR   Rt   Rl   Rƒ   R@   R†   R   R'   R   R   R>   R?   RS   t	   transform(   R2   R3   R4   R`   Ra   R!   t   X1t   y1(    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_set_estimator_nonee  sT    	$	.	1c          C   sÊ   t  d d ƒ }  t d d ƒ } t d d |  f d | f g d d d g d	 d
 ƒ } t d d |  f d | f g d t j d ƒ d	 d
 ƒ } | j t t ƒ | j t t ƒ t | j	 t ƒ | j	 t ƒ ƒ d  S(   NR   i{   R   R   R+   R   i   i   R   R)   (   i   i   (
   R   R	   R
   R>   R?   R   R   R   R   R'   (   R2   R3   R`   Ra   (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_estimator_weights_formatž  s    		c    
      C   sø  t  d d ƒ }  t d d ƒ } t ƒ  } t j d d g d d g d d g d	 d
 g g ƒ } t j d d d d g ƒ } t d d |  f d | f d | f g d d ƒ j | | ƒ } t d d |  f d | f d | f g d d d t ƒ j | | ƒ } t d d |  f d | f d | f g d d d t ƒ j | | ƒ } d } t	 t
 | | j | ƒ }	 t |	 j d ƒ t | j | ƒ j d ƒ t | j | ƒ j d ƒ t |	 j d d ƒ j d ƒ | j | ƒ ƒ t | j | ƒ j d d ƒ j d ƒ | j | ƒ ƒ d S(   s:   Check transform method of VotingClassifier on toy dataset.R   i{   gš™™™™™ñ¿g      ø¿g333333ó¿gffffffö¿g333333Àgš™™™™™Àgš™™™™™ñ?g333333ó?i   i   R   R   R+   R,   R   R)   R‹   sŠ   'flatten_transform' default value will be changed to True in 0.21. To silence this warning you may explicitly set flatten_transform=False.i   i   i   i    N(   i   i   i   (   i   i   (   i   i   i   (   i   i   (   i   i   (   R   R	   R   R>   R?   R
   R   Rj   RS   R   t   DeprecationWarningR   R   t   shapeR   t   swapaxest   reshape(
   R2   R3   R4   R   R   R`   Ra   Rp   t   warn_msgt   res(    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   test_transform²  s6    	3!!!	!(=   Ry   RC   t   numpyR>   t   sklearn.utils.testingR    R   R   R   R   R   t   sklearn.exceptionsR   t   sklearn.linear_modelR   t   sklearn.naive_bayesR   t   sklearn.ensembleR	   R
   t   sklearn.model_selectionR   t   sklearnR   R   t   sklearn.datasetsR   t   sklearn.svmR   t   sklearn.multiclassR   t   sklearn.neighborsR   t   sklearn.baseR   R   t	   load_irisRY   RZ   R[   R   R   t   markt   filterwarningsR#   R(   R*   R6   R<   R=   RA   RM   RU   R^   Rb   Rr   R{   R‡   R   R‘   R˜   (    (    (    sL   lib/python2.7/site-packages/sklearn/ensemble/tests/test_voting_classifier.pyt   <module>   s€   ) 	
!!!!!1	!!!	!#!7!