*ë
«¡;c       sË    d  Z  ) 0 d k Z 1 d k Z 3 d f  d „  ƒ  YZ < d f  d „  ƒ  YZ C d f  d „  ƒ  YZ O d f  d	 „  ƒ  YZ [ d
 f  d „  ƒ  YZ l d f  d „  ƒ  YZ } d f  d „  ƒ  YZ	 ‡ d f  d „  ƒ  YZ
 ´ d „  Z Á d f  d „  ƒ  YZ cd f  d „  ƒ  YZ (d f  d „  ƒ  YZ Úe ƒ  d d e d „ Z ñe ƒ  d d d e d „ Z Ad „  Z Nd „  Z Ud  „  Z bd! „  Z qd" „  Z {d k Z |e i Z }e i Z ~e i Z d S(#   sq  This provides code for working with support vector machines.

Support vector machine (SVM) is a supervised machine learning
algorithm that has been shown to work well on a variety of
classification problems.

XXX describe kernel_fn, C, epsilon

For more information, see:
http://svm.first.gmd.de/
http://svm.research.bell-labs.com/

Classes:
SVM                  Holds data for a Support Vector Machine.
SMOTrainer           Trains an SVM using Sequential Minimal Optimization (SMO).
KeerthiTrainer       Trains an SVM using Keerthi's extensions to SMO.
TransductiveTrainer  Trains a transductive SVM.

LinearKernel
PolynomialKernel
RadialBasisFunctionKernel
HyperbolicTangentKernel


Functions:
train                Train a Support Vector Machine on some training data.
trans_transductive
classify             Use a Support Vector Machine to classify some data.

Usage:
The 'train' function is provided as a user-friendly interface module.
Use this function if all you want is a plain-vanilla SVM classifier.
However, if you're concerned about details such as the training
algorithm, you will need to use some of the classes provided.

Ns   LinearKernelc      s&   3 d  Z  4 5 d „  Z 7 d „  Z RS(   s   k(x, y) = x*yc    s
   5 6 d  S(   N(    (   s   self(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __init__5 s   c    s   7 8 t  | | ƒ Sd  S(   N(   s   _dots   x1s   x2(   s   selfs   x1s   x2(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __call__7 s   (   s   __doc__s   __init__s   __call__(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   LinearKernel3 s   	s   SparseLinearKernelc      s&   < d  Z  = > d „  Z @ d „  Z RS(   s   k(x, y) = x*yc    s
   > ? d  S(   N(    (   s   self(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __init__> s   c    s   @ A t  | | ƒ Sd  S(   N(   s   _sparse_dots   x1s   x2(   s   selfs   x1s   x2(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __call__@ s   (   s   __doc__s   __init__s   __call__(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   SparseLinearKernel< s   	s   PolynomialKernelc      s2   C d  Z  D E d Z F d d „ Z K d „  Z RS(   s   k(x, y) = (x*y+1)**pi   i   c    sJ   F G | d j  p | |  i j o H t d |  i ‚ n J | |  _  d  S(   Ni   s*   polynomial degree must be between 1 and %d(   s   ps   selfs   _max_ps
   ValueError(   s   selfs   p(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __init__F s    c    s+   K L t  | | ƒ d } M | |  i Sd  S(   Nf1.0(   s   _dots   x1s   x2s   ss   selfs   p(   s   selfs   x1s   x2s   s(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __call__K s   (   s   __doc__s   _max_ps   __init__s   __call__(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   PolynomialKernelC s   		s   SparsePolynomialKernelc      s2   O d  Z  P Q d Z R d d „ Z W d „  Z RS(   s   k(x, y) = (x*y+1)**pi   i   c    sJ   R S | d j  p | |  i j o T t d |  i ‚ n V | |  _  d  S(   Ni   s*   polynomial degree must be between 1 and %d(   s   ps   selfs   _max_ps
   ValueError(   s   selfs   p(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __init__R s    c    s+   W X t  | | ƒ d } Y | |  i Sd  S(   Nf1.0(   s   _sparse_dots   x1s   x2s   ss   selfs   p(   s   selfs   x1s   x2s   s(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __call__W s   (   s   __doc__s   _max_ps   __init__s   __call__(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   SparsePolynomialKernelO s   		s   RadialBasisFunctionKernelc      s)   [ d  Z  _ ` d d „ Z c d „  Z RS(   sD         -(x-y)**2
         e** ----------
             2*sigma**2
    f1.0c    s#   ` a | |  _  b | d |  _ d  S(   Ni   (   s   sigmas   selfs   sigma2(   s   selfs   sigma(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __init__` s   c    sw   c d t  | | ƒ } e t | | ƒ } f d |  i } g y h t	 i
 | | ƒ SWn i t j
 o j d Sn Xd  S(   Nf2.0f0.0(   s	   _subtracts   x1s   x2s   x1_x2s   _dots   nums   selfs   sigma2s   dens   maths   exps   OverflowError(   s   selfs   x1s   x2s   x1_x2s   dens   num(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __call__c s   (   s   __doc__s   __init__s   __call__(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   RadialBasisFunctionKernel[ s   	s   SparseRadialBasisFunctionKernelc      s)   l d  Z  p q d d „ Z t d „  Z RS(   sD         -(x-y)**2
         e** ----------
             2*sigma**2
    f1.0c    s#   q r | |  _  s | d |  _ d  S(   Ni   (   s   sigmas   selfs   sigma2(   s   selfs   sigma(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __init__q s   c    sw   t u t  | | ƒ } v t | | ƒ } w d |  i } x y y t	 i
 | | ƒ SWn z t j
 o { d Sn Xd  S(   Nf2.0f0.0(   s   _sparse_subtracts   x1s   x2s   x1_x2s   _sparse_dots   nums   selfs   sigma2s   dens   maths   exps   OverflowError(   s   selfs   x1s   x2s   dens   x1_x2s   num(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __call__t s   (   s   __doc__s   __init__s   __call__(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   SparseRadialBasisFunctionKernell s   	s   HyperbolicTangentKernelc      s&   } d  Z  ~ € d „  Z ƒ d „  Z RS(   s   tanh(x*y*kappa - delta)c    s   €  | |  _  ‚ | |  _ d  S(   N(   s   kappas   selfs   delta(   s   selfs   kappas   delta(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __init__€ s   c    s7   ƒ „ t  | | ƒ } … t i | |  i |  i ƒ Sd  S(   N(	   s   _dots   x1s   x2s   x1x2s   maths   tanhs   selfs   kappas   delta(   s   selfs   x1s   x2s   x1x2(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __call__ƒ s   (   s   __doc__s   __init__s   __call__(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   HyperbolicTangentKernel} s   	s   SVMc      s2   ‡ d  Z  – — e e e ƒ  d „ Z « d „  Z RS(   sM  Holds information for a non-linear Support Vector Machine.

    Members:
    xs          A list of the input vectors.
    ys          A list of the output values.  Must be either 1 or -1.
    alphas      A list of the Lagrange multipliers for each point.
    b           The threshold value for the machine.
    kernel_fn   Should take 2 vectors and return a distance.

    * xs, ys, and alphas should be a parallel list of vectors.
    ** There's a special read-only member variable 'w'.  For linear
    SVM's, this is the 'w' vector so that the decision hyperplane is at
    wx-b=0

    c    s;  — ˜ | t j o ™ d g t |  i ƒ } n š | t j o › d } n  | | f \ |  _ |  _ ž | |  _  Ÿ | |  _   | |  _ ¢ t | ƒ t | ƒ j o £ t d ‚ n ¤ t | ƒ t | ƒ j o ¥ t d ‚ n § xM t	 t | ƒ ƒ d § r4 } ¨ |  i | d d g j o © t d ‚ n qü Wd  S(   Nf0.0s!   xs and ys must be parallel arrayss%   xs and alphas must be parallel arraysi    i   s   Output must be either 1 or -1(   s   alphass   Nones   lens   selfs   xss   bs   yss	   kernel_fns
   ValueErrors   ranges   i(   s   selfs   xss   yss   alphass   bs	   kernel_fns   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __init__— s     	c    sÎ   « ¬ | d j o« ­ d g t |  i d ƒ } ® x} t t | ƒ ƒ d ® rd } ¯ xX t t |  i ƒ ƒ d ¯ r< } ° | | |  i | |  i	 | |  i | | | | <ql WqH W± | Sn ² t
 | ‚ d  S(   Ns   wf0.0i    (   s   xs   lens   selfs   xss   ws   ranges   is   js   yss   alphass   AttributeError(   s   selfs   xs   js   is   w(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   __getattr__« s    	 	>(   s   __doc__s   Nones   LinearKernels   __init__s   __getattr__(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   SVM‡ s   	c    s    ´ ¹ º d } » xy t t |  i ƒ ƒ d » r] } ¼ |  i | d j o
 ½ q* n ¾ | |  i | |  i | |  i |  i | | ƒ } q* W¿ | |  i
 Sd S(   sG   classify(svm, x) -> score

    Classify x based on an SVM object.

    f0.0i    N(   s   sums   ranges   lens   svms   xss   is   alphass   yss	   kernel_fns   xs   b(   s   svms   xs   sums   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   classify´ s   	 	
:s
   SMOTrainerc      sM   Á d  Z  Ë Ì e d „ Z ñ d „  Z d „  Z [d „  Z `d „  Z RS(   s  Sequential Minimal Optimization Trainer

    This is an implementation of the SVM trainer called Sequential
    Minimal Optimization, described by John C. Platt:
    http://www.research.microsoft.com/~jplatt

    Methods:
    train     Train a new SVM.

    c 
   s»  Ì Ñ Ó t  | | Ô d g t | ƒ d | ƒ |  _ Õ | |  _ Ö | |  _	 × h  |  _
 Ú d } Û d }	 Ý x=Ý | d j p |	 o%Þ d } ß |	 oE à x; t t |  i i ƒ ƒ d à r } á | |  i | ƒ } q¸ Wno ã xh t t |  i i ƒ ƒ d ã rI } å |  i |  i i | |  i	 ƒ o
 æ qý n ç | |  i | ƒ } qý Wè | t j	 o é | | |  i ƒ n ê |	 o ë d }	 n ì | d j o í d }	 n qp Wï |  i Sd S(   sb   train(self, training_set, results, kernel_fn, C, epsilon,
        update_fn=None) -> SVM

        f0.0i    i   N(   s   SVMs   training_sets   resultss   lens	   kernel_fns   selfs   svms   epsilons   epss   Cs   _ecaches   num_changeds   examine_alls   ranges   alphass   i2s   _examine_examples	   _is_bounds	   update_fns   None(
   s   selfs   training_sets   resultss	   kernel_fns   Cs   epsilons	   update_fns   num_changeds   i2s   examine_all(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   trainÌ s6   "		 	
 	 	#

c    sñ  ñ ò |  i i | } ó |  i i | } ô |  i | ƒ } õ | | } ÷ | |  i
 j  o | |  i j  p | |  i
 j o
 | d j o]ú t }	 û t } ü xº t t |  i i ƒ ƒ d ü r› }
 ý |
 | j p |  i |  i i |
 |  i ƒ o
 þ q¹ n ÿ |  i |
 ƒ }  t i | | ƒ } |	 t j p
 | | j o | } |
 }	 n q¹ W|	 }
 |
 t j	 o% |  i |
 | ƒ o d Sn n 	t i d t |  i i ƒ d ƒ }
 
x t t |  i i ƒ ƒ d 
rq } |  i |  i i |
 |  i ƒ o
 qÜn |  i |
 | ƒ o d Sn |
 d t |  i i ƒ }
 qÜWt i d t |  i i ƒ d ƒ }
 xc t t |  i i ƒ ƒ d rD } |  i |
 | ƒ o d Sn |
 d t |  i i ƒ }
 q—Wn d Sd  S(   Ni    i   (   s   selfs   svms   yss   i2s   y2s   alphass   alph2s   _Es   E2s   r2s   epss   Cs   Nones   max_i1s	   max_errors   ranges   lens   i1s	   _is_bounds   E1s   maths   fabss   errors
   _take_steps   randoms   randints   i(   s   selfs   i2s   E2s   E1s   y2s   errors   is	   max_errors   alph2s   max_i1s   i1s   r2(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _examine_exampleñ sF   A		 	0
		% 	#
!% 	%c    s0  | | j o d Sn |  i i } |  i i | |  i i | f \ } } |  i i	 | |  i i	 | f \ } } |  i | ƒ } |  i | ƒ }  | | } !|  i i } "|  i } #|  i } %| | j o4 &t d | | | ƒ } 't | | | ƒ } n1 )t d | | ƒ } *t | | | | ƒ } +| | j o ,d Sn .|  i i | | | | ƒ } /|  i i | | | | ƒ } 0|  i i | | | | ƒ }
 1| |
 d | } 2| d j oW 3| | | | | } 4| | j  o 4| } n 5| | j o 5| } n nJ7| | | | | | | |
 } 8| | | | | | | |
 } 9| | | | } :| | | | }	 ;| | | | d | | | d | | |
 | | | | } <|	 | | | d |	 |	 | d | | |
 | | |	 | } >| | | j  o ?| } n+ @| | | j o A| } n
 C| } Et# i$ | | ƒ | | | | j  o Fd Sn H| | | | } J|  i& | | ƒ o: K| | | | | | | | | | } L| } n½ M|  i& | | ƒ o: N| | | | | | | | |
 | } O| } nl Q| | | | | | | | | | } R| | | | | | | | |
 | } S| | d } U| | f \ |  i i | <|  i i | <V| |  i _ Wh  |  _) Yd Sd  S(   Ni    f0.0f2.0f0.5i   (*   s   i1s   i2s   selfs   svms   xss   points   alphass   alph1s   alph2s   yss   y1s   y2s   _Es   E1s   E2s   ss   bs   Cs   epss   maxs   Ls   mins   Hs	   kernel_fns   k11s   k12s   k22s   etas   a2s   f1s   f2s   L1s   H1s   Lobjs   Hobjs   maths   fabss   a1s	   _is_bounds   b1s   b2s   _ecache(   s   selfs   i1s   i2s   E2s   E1s   Hobjs   etas   ss   epss   H1s   k22s   a1s   bs   k11s   k12s   y2s   y1s   L1s   b2s   b1s   Lobjs   a2s   alph1s   f2s   Ls   Hs   alph2s   points   Cs   f1(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys
   _take_stepsn   ))     %%EE	)----)c    sd   [\|  i i | ƒ o8 ]t |  i |  i i | ƒ |  i i | |  i | <n ^|  i | Sd  S(   N(   s   selfs   _ecaches   has_keys   is   classifys   svms   xss   ys(   s   selfs   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _E[s   8c    s!   `a| d j p
 | | j Sd  S(   Ni    (   s   alphas   C(   s   selfs   alphas   C(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys	   _is_bound`s   (   s   __doc__s   Nones   trains   _examine_examples
   _take_steps   _Es	   _is_bound(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys
   SMOTrainerÁ s   	
%'Cs   KeerthiTrainerc      s}   cd  Z  mne d „ Z ªd „  Z Îd „  Z d „  Z d „  Z d „  Z d „  Z "d „  Z	 %d	 „  Z
 RS(
   s  Sequential Minimal Optimization Trainer

    This is an implementation of Sequential Minimal Optimization plus
    the 2 modifications suggested by S.S. Keerthi, et al.:
    http://guppy.mpe.nus.edu.sg/~mpessk/

    Methods:
    train     Train a new SVM.

    c    sè  nsut  | | vd g t | ƒ d | ƒ |  _ w| |  _ x| |  _	 yh  |  _
 d d f \ |  _ |  _ €t |  _ |  _ d }	 ‚xÚ ‚|	 t |  i i ƒ j  o± ƒ|  i i |	 d j o |  i t j o „|	 |  _ n< …|  i i |	 d j o |  i t j o †|	 |  _ n ‡|  i t j	 o |  i t j	 o ˆPn ‰|	 d }	 q– W‹t d ‚ xGd o<d } ‘x; t t |  i i ƒ ƒ d ‘r } ’| |  i | ƒ } q§W“| o ”Pn –d }
 —x¥ —|  i |  i d |  i j o |
 o| ™|  i } š|  i i | } ›|  i i | } œ|  i | ƒ } |  i } ž|  i |  i |  i ƒ }
 Ÿ| |
 } qìW¡| t j	 o ¢| | |  i ƒ n qvW¦|  i |  i d |  i _  ¨|  i Sd S(   sb   train(self, training_set, results, kernel_fn, C, epsilon,
        update_fn=None) -> SVM

        f0.0i   i    s8   I could not find positive and negative training examplesi   f2.0N(!   s   SVMs   training_sets   resultss   lens	   kernel_fns   selfs   svms   epsilons   epss   Cs   _fcaches   b_lows   b_ups   Nones   i_ups   i_lows   is   alphass   yss
   ValueErrors   num_changeds   ranges   i2s   _examine_examples   inner_loop_successs   y2s   alph2s   _Fs   F2s   i1s
   _take_steps	   update_fns   b(   s   selfs   training_sets   resultss	   kernel_fns   Cs   epsilons	   update_fns   y2s   num_changeds   is   inner_loop_successs   F2s   i2s   alph2s   i1(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   trainnsR   "	 *+# 
	 		 (c    s?  ª«|  i i | } ¬|  i i | } ®|  i | ƒ } ¯|  i	 | ƒ o °nŸ ±|  i
 | ƒ p |  i | ƒ o | |  i j  o ²| |  _ ³| |  _ nP ´|  i | ƒ p |  i | ƒ o | |  i j o µ| |  _ ¶| |  _ n ¸d } ¹|  i	 | ƒ p |  i
 | ƒ p |  i | ƒ o0 »|  i | j o ¼d } ½|  i } n n ¾|  i	 | ƒ p |  i | ƒ p |  i | ƒ o0 À| |  i j o Ád } Â|  i } n n Ã| o Äd Sn Ç|  i	 | ƒ o> È|  i | | |  i j o É|  i } n Ë|  i } n Ì|  i | | ƒ Sd  S(   Ni   i    (   s   selfs   svms   yss   i2s   y2s   alphass   alph2s   _Fs   F2s   _in_I_0s   _in_I_1s   _in_I_2s   b_ups   i_ups   _in_I_3s   _in_I_4s   b_lows   i_lows
   optimalitys   i1s
   _take_step(   s   selfs   i2s   y2s   alph2s   i1s
   optimalitys   F2(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _examine_exampleªs6   33	3	3	
c "   s}  ÎÏ| | j o Ðd Sn Ñ|  i i } Ò|  i i | |  i i | f \ } } Ó|  i i	 | |  i i	 | f \ } } Ô|  i | ƒ |  i | ƒ f \ } } Õ| | } Ö|  i i } ×|  i }  Ø|  i } Ú| | j o4 Ût d | | |  ƒ } Üt |  | | ƒ } n1 Þt d | | ƒ } ßt |  |  | | ƒ } à| | j o ád Sn ã|  i i | | | | ƒ } ä|  i i | | | | ƒ } å|  i i | | | | ƒ } æ| | d | } ç| d j oW è| | | | | } é| | j  o é| } n ê| | j o ê| } n nBì| | | | | | | }! í| | | | | | | } î| | | | } ï| | | | } ð| |! | | d | | | d | | | | | | | } ñ| |! | | d | | | d | | | | | | | } ó| | | j  o ô| } n+ õ| | | j o ö| } n
 ø| } út# i$ | | ƒ | | | | j  o ûd Sn ý| | | | } ÿ| | f \ |  i i | <|  i i | < h  |  _& t' } }
 } } xt, t- |  i i ƒ ƒ d rþ } |  i/ | ƒ p |  i0 | ƒ p |  i1 | ƒ oI |  i | ƒ }	 | t' j p
 |	 | j o |	 } | } n n 	|  i/ | ƒ p |  i3 | ƒ p |  i4 | ƒ oI 
|  i | ƒ }	 | t' j p
 |	 | j  o |	 } | }
 n n q7W| |
 f \ |  _( |  _) | | f \ |  _* |  _+ d Sd  S(   Ni    f0.0f2.0f0.5i   (5   s   i1s   i2s   selfs   svms   xss   points   alphass   alph1s   alph2s   yss   y1s   y2s   _Fs   F1s   F2s   ss   bs   Cs   epss   maxs   Ls   mins   Hs	   kernel_fns   k11s   k12s   k22s   etas   a2s   f1s   f2s   L1s   H1s   Lobjs   Hobjs   maths   fabss   a1s   _fcaches   Nones   i_lows   i_ups   b_lows   b_ups   ranges   lens   is   _in_I_0s   _in_I_3s   _in_I_4s   fs   _in_I_1s   _in_I_2("   s   selfs   i1s   i2s   i_lows   Hobjs   is   F1s   etas   ss   fs   i_ups   b_ups   epss   Lobjs   H1s   k22s   a1s   bs   k11s   k12s   b_lows   y2s   y1s   L1s   F2s   a2s   alph1s   f2s   Ls   Hs   alph2s   points   Cs   f1(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys
   _take_stepÎsv   ))'     !!EE	)) 	3	3	c    sd   |  i i | ƒ o8 t |  i |  i i | ƒ |  i i | |  i | <n |  i | Sd  S(   N(   s   selfs   _fcaches   has_keys   is   classifys   svms   xss   ys(   s   selfs   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _Fs   8c    s8   |  i i | d j o |  i i | |  i j  Sd  S(   Ni    (   s   selfs   svms   alphass   is   C(   s   selfs   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _in_I_0s   c    s5   |  i i | d j o |  i i | d j Sd  S(   Ni    i   (   s   selfs   svms   alphass   is   ys(   s   selfs   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _in_I_1s   c    s9    |  i i | |  i j o |  i i | d j Sd  S(   Ni   (   s   selfs   svms   alphass   is   Cs   ys(   s   selfs   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _in_I_2s   c    s8   "#|  i i | |  i j o |  i i | d j Sd  S(   Ni   (   s   selfs   svms   alphass   is   Cs   ys(   s   selfs   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _in_I_3"s   c    s6   %&|  i i | d j o |  i i | d j Sd  S(   Ni    i   (   s   selfs   svms   alphass   is   ys(   s   selfs   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _in_I_4%s   (   s   __doc__s   Nones   trains   _examine_examples
   _take_steps   _Fs   _in_I_0s   _in_I_1s   _in_I_2s   _in_I_3s   _in_I_4(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   KeerthiTrainercs   	
<$Es   TransductiveTrainerc      sY   (d  Z  67e d „ Z `d „  Z ˆd „  Z Ëd „  Z Ðd „  Z ×d „  Z RS(   su  Transductive Support Vector Machine Trainer

    This is used to train transductive support vector machines described
    in:
    Joachims, Thorsten.  Transductive Inference for Text Classification
    using Support Vector Machines.
    XXX url?

    The algorithm is modified from Platt's Sequential Minimal Optimization.

    Methods:
    train     Train a new SVM.

    c
    sè  7>@t  | | Ad g t | ƒ d | ƒ |  _ B| |  _ C| |  _	 D| |  _
 E| | f \ |  _ |  _ Fh  |  _ Id }
 Jd } LxCL|
 d j p | o+Md }
 N| oE Ox; t t |  i i ƒ ƒ d Or } P|
 |  i | ƒ }
 qß Wnu Rxn t t |  i i ƒ ƒ d RrO } T|  i |  i i | |  i | ƒ ƒ o
 Uq$n V|
 |  i | ƒ }
 q$WW|	 t j	 o X|	 |
 |  i ƒ n Y| o Zd } n [|
 d j o \d } n q— W^|  i Sd S(   s   train(self, training_set, results, num_test_cases,
        kernel_fn, C, C_negtest, C_postest, epsilon,
        update_fn=None) -> SVM

        f0.0i    i   N(   s   SVMs   training_sets   resultss   lens	   kernel_fns   selfs   svms   epsilons   epss   num_test_casess   Cs	   C_negtests	   C_postests   _ecaches   num_changeds   examine_alls   ranges   alphass   i2s   _examine_examples	   _is_bounds   _Cs	   update_fns   None(   s   selfs   training_sets   resultss   num_test_casess	   kernel_fns   Cs	   C_negtests	   C_postests   epsilons	   update_fns   num_changeds   i2s   examine_all(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   train7s:   "		 	
 	 	)

c    s  `a|  i i | } b|  i i | } c|  i | ƒ } d| | } f| |  i
 j  o | |  i | ƒ j  p | |  i
 j o
 | d j olit }	 jt } kxÃ t t |  i i ƒ ƒ d kr¤ }
 l|
 | j p& |  i |  i i |
 m|  i |
 ƒ ƒ o
 nq¿ n o|  i |
 ƒ } pt i | | ƒ } q|	 t j p
 | | j o r| } s|
 }	 n q¿ Wt|	 }
 u|
 t j	 o% v|  i |
 | ƒ o wd Sn n yt i d t |  i i ƒ d ƒ }
 zx– t t |  i i ƒ ƒ d zrw } {|  i |  i i |
 |  i |
 ƒ ƒ o
 |qën }|  i |
 | ƒ o ~d Sn |
 d t |  i i ƒ }
 qëWt i d t |  i i ƒ d ƒ }
 ‚xc t t |  i i ƒ ƒ d ‚rD } ƒ|  i |
 | ƒ o „d Sn …|
 d t |  i i ƒ }
 q¬Wn †d Sd  S(   Ni    i   (   s   selfs   svms   yss   i2s   y2s   alphass   alph2s   _Es   E2s   r2s   epss   _Cs   Nones   max_i1s	   max_errors   ranges   lens   i1s	   _is_bounds   E1s   maths   fabss   errors
   _take_steps   randoms   randints   i(   s   selfs   i2s   E2s   E1s   y2s   errors   is	   max_errors   alph2s   max_i1s   i1s   r2(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _examine_example`sH   G		 	#
		% 	)
!% 	%c    sK  ˆ‰| | j o Šd Sn ‹|  i i } Œ|  i i | |  i i | f \ } } |  i i	 | |  i i	 | f \ } } Ž|  i | ƒ } |  i | ƒ } | | }	 ‘|  i i } ’|  i }
 “|  i | ƒ |  i | ƒ f \ } } •| | j o4 –t d | | | ƒ } —t | | | ƒ } n1 ™t d | | ƒ } št | | | | ƒ } ›| | j o œd Sn ž|  i i | | | | ƒ } Ÿ|  i i | | | | ƒ }  |  i i | | | | ƒ } ¡| | d | } ¢| d j oW £| | | | | } ¤| | j  o ¤| } n ¥| | j o ¥| } n nJ§| | | | | |	 | | } ¨| | | |	 | | | | } ©| |	 | | } ª| |	 | | } «| | | | d | | | d | | | |	 | | | } ¬| | | | d | | | d | | | |	 | | | } ®| | |
 j  o ¯| } n+ °| | |
 j o ±| } n
 ³| } µt% i& | | ƒ |
 | | |
 j  o ¶d Sn ¸| |	 | | } º|  i( | | ƒ o: »| | | | | | | | | | } ¼| } n½ ½|  i( | | ƒ o: ¾| | | | | | | | | | } ¿| } nl Á| | | | | | | | | | } Â| | | | | | | | | | } Ã| | d } Å| | f \ |  i i | <|  i i | <Æ| |  i _ Çh  |  _+ Éd Sd  S(   Ni    f0.0f2.0f0.5i   (,   s   i1s   i2s   selfs   svms   xss   points   alphass   alph1s   alph2s   yss   y1s   y2s   _Es   E1s   E2s   ss   bs   epss   _Cs   C1s   C2s   maxs   Ls   mins   Hs	   kernel_fns   k11s   k12s   k22s   etas   a2s   f1s   f2s   L1s   H1s   Lobjs   Hobjs   maths   fabss   a1s	   _is_bounds   b1s   b2s   _ecache(   s   selfs   i1s   i2s   E2s   E1s   Hobjs   C1s   C2s   etas   ss   epss   H1s   k22s   bs   k11s   k12s   y2s   y1s   L1s   b2s   b1s   Lobjs   a2s   alph1s   a1s   Ls   alph2s   Hs   points   f2s   f1(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys
   _take_stepˆsn   ))'     %%EE	)----)c    sd   ËÌ|  i i | ƒ o8 Ít |  i |  i i | ƒ |  i i | |  i | <n Î|  i | Sd  S(   N(   s   selfs   _ecaches   has_keys   is   classifys   svms   xss   ys(   s   selfs   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _EËs   8c    sj   ÐÑ| t |  i i ƒ |  i j  o Ò|  i Sn) Ó|  i i | d j o Ô|  i Sn Õ|  i Sd  S(   Ni    (	   s   is   lens   selfs   svms   yss   num_test_casess   Cs	   C_postests	   C_negtest(   s   selfs   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _CÐs
   #c    s!   ×Ø| d j p
 | | j Sd  S(   Ni    (   s   alphas   C(   s   selfs   alphas   C(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys	   _is_bound×s   (   s   __doc__s   Nones   trains   _examine_examples
   _take_steps   _Es   _Cs	   _is_bound(    (    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   TransductiveTrainer(s   	)(Cf1.0f0.001c    s8   Úìít  ƒ  i |  | | | | d | ƒ} ï| Sd S(   s  train(training_set, results,
    kernel_fn=LinearKernel(), C=1.0, epsilon=1E-3, update_fn=None) -> SVM

    Train a new support vector machine.  training_set is a list
    containing a list of numbers, each which is a vector in the
    training set.  results is a parallel list that contains either
    1 or -1, which describes the class that the training vector belongs
    to.

    kernel_fn, C, and epsilon are optional parameters used to tune the
    support vector machine.

    update_fn is an optional callback function that called at the
    end of every round of training.  It should take 2 parameters:
        update_fn(num_changed, svm)

    s	   update_fnN(	   s   KeerthiTrainers   trains   training_sets   resultss	   kernel_fns   Cs   epsilons	   update_fns   svm(   s   training_sets   resultss	   kernel_fns   Cs   epsilons	   update_fns   svm(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   trainÚs   'f0.5c	    s¡  ñúût  |  | üd | d | d | d | ƒ}  g  } xK t	 t
 | ƒ ƒ d r2 } t | | | ƒ } | i | | f ƒ qT W| i ƒ  t g t
 | ƒ } xa t	 t
 | ƒ ƒ d rH } | | \ } } | | j  o 	d | | <n d | | <qÈ Wt ƒ  } d }
 d | t
 | ƒ | } xI|
 | j  p
 | | j  o+| i  |  | | | t
 | ƒ | | |
 | | d | ƒ} d } x«| o d } "t
 | ƒ d } #t i d | d ƒ } $xat	 | ƒ d $rN} %| | | } &| t
 | ƒ } '| t
 | ƒ } *| | | | j o
 +qn -d	 | | t | | | ƒ } .d	 | | t | | | ƒ }	 /| d j p |	 d j p | |	 d j  o
 0qn 3| | | | f \ | | <| | <6| i  |  | | | 7t
 | ƒ | | |
 | 8| d | ƒ} 9d } :PqWqºW<t# |
 d | ƒ }
 =t$ | d | ƒ } qMW?| Sd
 S(   s³   train_transductive(training_set, results, test_set, num_pos,
    kernel_fn=LinearKernel(), C=1.0, C_test=0.5,
    epsilon=1E-3, update_fn=None) -> SVM

    XXX document this

    s	   kernel_fns   Cs   epsilons	   update_fni    i   f1e-05i   f1.0N(%   s   trains   training_sets   resultss	   kernel_fns   Cs   epsilons	   update_fns   svms   test_scoress   ranges   lens   test_sets   is   classifys   scores   appends   sorts   Nones   test_resultss   indexs   num_poss   TransductiveTrainers   trainers   C_negs   C_poss   C_tests   changeds   totals   randoms   randints   offsets   ms   ls   gamma_ms   gamma_ls   mins   max(   s   training_sets   resultss   test_sets   num_poss	   kernel_fns   Cs   C_tests   epsilons	   update_fns   gamma_ls   C_negs   scores   test_scoress   ls   ms   changeds   is   svms   indexs   C_poss   gamma_ms   totals   offsets   test_resultss   trainer(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   train_transductiveñsd   	!	 	 		 	 
	 	
"".
%	c    s„   AFGt  |  ƒ t  | ƒ j o Ht d ‚ n Id } Jx8 t t  |  ƒ ƒ d Jr } K| |  | | | } qS WL| Sd S(   sc   _dot(x, y) -> x*y

    Return the dot product of x and y, where x and y are lists of numbers.

    s   vectors must be same lengthf0.0i    N(   s   lens   xs   ys
   ValueErrors   sums   ranges   i(   s   xs   ys   sums   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _dotAs   	 	c    sf   NOd } PxI |  i ƒ  d Pr6 } Q| i | ƒ o R| |  | | | } n q WS| Sd  S(   Nf0.0i    (   s   sums   xs   keyss   ks   ys   has_key(   s   xs   ys   ks   sum(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _sparse_dotNs   	 	!c    s‘   UZ[t  |  ƒ t  | ƒ j o \t d ‚ n ]t g t  |  ƒ } ^x8 t t  |  ƒ ƒ d ^r } _|  | | | | | <q` W`| Sd S(   sZ   _subtract(x, y) -> x-y

    Return x subtract y, where x and y are lists of numbers.

    s   vectors must be same lengthi    N(   s   lens   xs   ys
   ValueErrors   Nones   ss   ranges   i(   s   xs   ys   ss   i(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys	   _subtractUs    	c    sÛ   bch  } dh  } exg |  i ƒ  d erT } f| i | ƒ o g|  | | | | | <n i|  | | | <jd | | <q' WkxH | i ƒ  d kr5 } l| i | ƒ o
 mq” n n| | | | <q” Wo| Sd  S(   Ni    i   (   s   dones   vecs   xs   keyss   ks   ys   has_key(   s   xs   ys   vecs   dones   k(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _sparse_subtractbs   		 	 	
c    s-   qvw|  d j o xd Sn yd Sd S(   sF   _sign(x) -> 1 or -1

    Return 1/-1 depending on the sign of x.

    i    i   N(   s   x(   s   x(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   _signqs   (   s   __doc__s   maths   randoms   LinearKernels   SparseLinearKernels   PolynomialKernels   SparsePolynomialKernels   RadialBasisFunctionKernels   SparseRadialBasisFunctionKernels   HyperbolicTangentKernels   SVMs   classifys
   SMOTrainers   KeerthiTrainers   TransductiveTrainers   Nones   trains   train_transductives   _dots   _sparse_dots	   _subtracts   _sparse_subtracts   _signs   cSVM(   s   maths   HyperbolicTangentKernels   train_transductives   SVMs   classifys   _sparse_dots   _sparse_subtracts   SparsePolynomialKernels   SparseRadialBasisFunctionKernels   cSVMs	   _subtracts   _dots
   SMOTrainers   RadialBasisFunctionKernels   PolynomialKernels   trains   TransductiveTrainers   randoms   LinearKernels   SparseLinearKernels   KeerthiTrainers   _sign(    (    sF   /mit/seven/lib/python2.1/site-packages/Bio/Tools/Classification/SVM.pys   ?) s2   	
-¢Å²P
