Пример #1
0
 def __init__(self,y,x):
     assert len(y) == len(x)
     self.prob = prob = svmc.new_svm_problem()
     self.size = size = len(y)
     
     self.y_array = y_array = svmc.new_double(size)
     for i in range(size):
         svmc.double_setitem(y_array,i,y[i])
     
     self.x_matrix = x_matrix = svmc.svm_node_matrix(size)
     self.data = []
     self.maxlen = 0;
     for i in range(size):
         data = _convert_to_svm_node_array(x[i])
         self.data.append(data);
         svmc.svm_node_matrix_set(x_matrix,i,data)
         if type(x[i]) == dict:
             if (len(x[i]) > 0):
                 self.maxlen = max(self.maxlen,max(x[i].keys()))
         else:
             self.maxlen = max(self.maxlen,len(x[i]))
     
     svmc.svm_problem_l_set(prob,size)
     svmc.svm_problem_y_set(prob,y_array)
     svmc.svm_problem_x_set(prob,x_matrix)
Пример #2
0
def cross_validation(prob, param, fold):
    if param.gamma == 0:
        param.gamma = 1.0/prob.maxlen
    dblarr = svmc.new_double(prob.size)
    svmc.svm_cross_validation(prob.prob, param.param, fold, dblarr)
    ret = _double_array_to_list(dblarr, prob.size)
    svmc.delete_double(dblarr)
    return ret
Пример #3
0
def _double_array(seq):
    size = len(seq)
    array = svmc.new_double(size)
    i = 0
    for item in seq:
        svmc.double_setitem(array,i,item)
        i = i + 1
    return array
Пример #4
0
 def predict_values_raw(self,x):
     #convert x into svm_node, allocate a double array for return
     n = self.nr_class*(self.nr_class-1)/2
     data = _convert_to_svm_node_array(x)
     dblarr = svmc.new_double(n)
     svmc.svm_predict_values(self.model, data, dblarr)
     ret = _double_array_to_list(dblarr, n)
     svmc.delete_double(dblarr)
     svmc.svm_node_array_destroy(data)
     return ret
Пример #5
0
 def predict_probability(self,x):
     #c code will do nothing on wrong type, so we have to check ourself
     if self.svm_type == NU_SVR or self.svm_type == EPSILON_SVR:
         raise TypeError, "call get_svr_probability or get_svr_pdf for probability output of regression"
     elif self.svm_type == ONE_CLASS:
         raise TypeError, "probability not supported yet for one-class problem"
     #only C_SVC,NU_SVC goes in
     if not self.probability:
         raise TypeError, "model does not support probabiliy estimates"
     
     #convert x into svm_node, alloc a double array to receive probabilities
     data = _convert_to_svm_node_array(x)
     dblarr = svmc.new_double(self.nr_class)
     pred = svmc.svm_predict_probability(self.model, data, dblarr)
     pv = _double_array_to_list(dblarr, self.nr_class)
     svmc.delete_double(dblarr)
     svmc.svm_node_array_destroy(data)
     p = {}
     for i in range(len(self.labels)):
         p[self.labels[i]] = pv[i]
     return pred, p