def __init__(self, **kwargs): # XXX Determine which parameters depend on each other and implement # safety/simplifying logic around them # already done for: nr_weight # thought: weight and weight_label should be a dict """Interface class to LIBSVM classifiers and regressions. Default implementation (C/nu/epsilon SVM) is chosen depending on the given parameters (C/nu/tube_epsilon). """ svm_impl = kwargs.get('svm_impl', None) # Depending on given arguments, figure out desired SVM # implementation if svm_impl is None: for arg, impl in [ ('tube_epsilon', 'EPSILON_SVR'), ('C', 'C_SVC'), ('nu', 'NU_SVC') ]: if kwargs.has_key(arg): svm_impl = impl if __debug__: debug('SVM', 'No implementation was specified. Since ' '%s is given among arguments, assume %s' % (arg, impl)) break if svm_impl is None: svm_impl = 'C_SVC' if __debug__: debug('SVM', 'Assign C_SVC "by default"') kwargs['svm_impl'] = svm_impl # init base class _SVM.__init__(self, **kwargs) self._svm_type = self._KNOWN_IMPLEMENTATIONS[svm_impl][0] if 'nu' in self._KNOWN_PARAMS and 'epsilon' in self._KNOWN_PARAMS: # overwrite eps param with new default value (information # taken from libSVM docs self.params['epsilon']._set_default(0.001) self.__model = None """Holds the trained SVM."""
def __init__(self, **kwargs): # XXX Determine which parameters depend on each other and implement # safety/simplifying logic around them # already done for: nr_weight # thought: weight and weight_label should be a dict """Interface class to LIBSVM classifiers and regressions. Default implementation (C/nu/epsilon SVM) is chosen depending on the given parameters (C/nu/tube_epsilon). """ svm_impl = kwargs.get('svm_impl', None) # Depending on given arguments, figure out desired SVM # implementation if svm_impl is None: for arg, impl in [('tube_epsilon', 'EPSILON_SVR'), ('C', 'C_SVC'), ('nu', 'NU_SVC')]: if arg in kwargs: svm_impl = impl if __debug__: debug( 'SVM', 'No implementation was specified. Since ' '%s is given among arguments, assume %s' % (arg, impl)) break if svm_impl is None: svm_impl = 'C_SVC' if __debug__: debug('SVM', 'Assign C_SVC "by default"') kwargs['svm_impl'] = svm_impl # init base class _SVM.__init__(self, **kwargs) self._svm_type = self._KNOWN_IMPLEMENTATIONS[svm_impl][0] if 'nu' in self._KNOWN_PARAMS and 'epsilon' in self._KNOWN_PARAMS: # overwrite eps param with new default value (information # taken from libSVM docs self.params['epsilon']._set_default(0.001) self.params['nr_weight'] = Parameter(len(self.params['weight'].value)) self.__model = None """Holds the trained SVM."""
def __init__(self, **kwargs): """Interface class to Shogun's classifiers and regressions. Default implementation is 'libsvm'. """ svm_impl = kwargs.get('svm_impl', 'libsvm').lower() kwargs['svm_impl'] = svm_impl # init base class _SVM.__init__(self, **kwargs) self.__svm = None """Holds the trained svm.""" self.__svm_apply = None """Compatibility convenience to bind to the classify/apply method of __svm""" # Need to store original data... # TODO: keep 1 of them -- just __traindata or __traindataset # For now it is needed for computing sensitivities self.__traindataset = None # internal SG swig proxies self.__traindata = None self.__kernel = None self.__kernel_test = None self.__testdata = None # remove kernel-based for some # TODO RF: provide separate handling for non-kernel machines if svm_impl in ['svmocas']: if not (self.__kernel is None or self.__kernel.__kernel_name__ == 'linear'): raise ValueError( "%s is inherently linear, thus provided kernel %s " "is of no effect" % (svm_impl, self.__kernel)) self.__tags__.pop(self.__tags__.index('kernel-based')) self.__tags__.pop(self.__tags__.index('retrainable'))