Changeset 3604:8c19d6d24f9d in orange


Ignore:
Timestamp:
04/28/07 18:18:08 (7 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
e75f0d17353276dc4965f6b413316866623ef85f
Message:

sparse lin kernel, comosite kernel, etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/orngSVM.py

    r3386 r3604  
    146146            params["C"]=map(lambda a: 2**a, range(-5,15,2)) 
    147147        if self.kernel_type==2: 
    148             params["gamma"]=map(lambda a: 2**a, range(-3,15,2)) 
     148            params["gamma"]=map(lambda a: 2**a, range(-3,15,2))+[0] 
    149149        best=parameter_selection(self.learner, newexamples, self.folds, params) 
    150150        #print best["error"] 
     
    177177         
    178178class RBFKernelWrapper(KernelWrapper): 
    179     gamma=0.5 
     179    def __init__(self, wrapped, gamma=0.5): 
     180        KernelWrapper.__init__(self, wrapped) 
     181        self.gamma=gamma 
    180182    def __call__(self, example1, example2): 
    181183        return math.exp(-math.pow(self.wrapped(example1, example2),2)/self.gamma) 
    182184 
    183185class PolyKernelWrapper(KernelWrapper): 
    184     degree=3.0 
     186    def __init__(self, wrapped, degree=3.0): 
     187        KernelWrapper.__init__(self, wrapped) 
     188        self.degree=degree 
    185189    def __call__(self, example1, example2): 
    186190        return math.pow(self.wrapped(example1, example2), self.degree) 
     
    193197    def __call__(self, example1, example2): 
    194198        return self.wrapped1(example1, example2)*self.wrapped2(example1, example2) 
     199 
     200class CompositeKernelWrapper(DualKernelWrapper): 
     201    def __init__(self, wrapped1, wrapped2, l=0.5): 
     202        DualKernelWrapper.__init__(self, wrapped1, wrapped2) 
     203        self.l=l 
     204    def __call__(self, example1, example2): 
     205        return self.l*self.wrapped1(example1, example2) + (1-self.l)*self.wrapped2(example1,example2) 
     206 
     207from sets import Set 
     208class SparseLinKernel: 
     209    """Computes a linear kernel function using the examples meta attributes (need to be floats)""" 
     210    def __call__(self, example1, example2): 
     211        s=Set(example1.getmetas().keys()+example2.getmetas().keys()) 
     212        sum=0 
     213        getmeta=lambda e: e.hasmeta(key) and float(e[key]) or 0.0 
     214        for key in s: 
     215            sum+=pow(getmeta(example2)-getmeta(example1), 2) 
     216        return pow(sum, 0.5) 
     217 
     218class BagOfWords: 
     219    """Computes a BOW kernel function (sum_i(example[i]*example[i])) using the examples meta attributes (need to be floats)""" 
     220    def __call__(self, example1, example2): 
     221        s=Set(example1.getmetas().keys()).intersection(Set(example2.getmetas().keys())) 
     222        sum=0 
     223        for key in s: 
     224            sum+=float(example2[key])*float(example1[key]) 
     225        return sum 
Note: See TracChangeset for help on using the changeset viewer.