예제 #1
0
    def __init__(self, y, x):
        assert len(y) == len(x)
        self.prob = prob = svmc.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)
        data = [None for i in range(size)]
        maxlen = 0
        for i in range(size):
            x_i = x[i]
            lx_i = len(x_i)
            data[i] = d = seq_to_svm_node(x_i)
            svmc.svm_node_matrix_set(x_matrix, i, d)
            if isinstance(x_i, dict):
                if (lx_i > 0):
                    maxlen = max(maxlen, max(x_i.keys()))
            else:
                maxlen = max(maxlen, lx_i)

        # bind to instance
        self.data = data
        self.maxlen = maxlen
        prob.l = size
        prob.y = y_array
        prob.x = x_matrix
예제 #2
0
파일: _svm.py 프로젝트: Anhmike/PyMVPA
    def __init__(self, y, x):
        assert len(y) == len(x)
        self.prob = prob = svmc.svm_problem()
        self.size = size = len(y)

        self.y_array = y_array = svmc.new_double(size)
        for i in xrange(size):
            svmc.double_setitem(y_array, i, y[i])

        self.x_matrix = x_matrix = svmc.svm_node_matrix(size)
        data = [None for i in xrange(size)]
        maxlen = 0
        for i in xrange(size):
            x_i = x[i]
            lx_i = len(x_i)
            data[i] = d = seq_to_svm_node(x_i)
            svmc.svm_node_matrix_set(x_matrix, i, d)
            if isinstance(x_i, dict):
                if (lx_i > 0):
                    maxlen = max(maxlen, max(x_i.keys()))
            else:
                maxlen = max(maxlen, lx_i)

        # bind to instance
        self.data = data
        self.maxlen = maxlen
        prob.l = size
        prob.y = y_array
        prob.x = x_matrix
예제 #3
0
 def predict_values_raw(self, x):
     #convert x into SVMNode, allocate a double array for return
     n = self.nr_class * (self.nr_class - 1) // 2
     data = seq_to_svm_node(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
예제 #4
0
파일: _svm.py 프로젝트: Anhmike/PyMVPA
 def predict_values_raw(self, x):
     #convert x into SVMNode, allocate a double array for return
     n = self.nr_class*(self.nr_class-1)//2
     data = seq_to_svm_node(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 probability estimates")

        #convert x into SVMNode, alloc a double array to receive probabilities
        data = seq_to_svm_node(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, l in enumerate(self.labels):
            p[l] = pv[i]
        return pred, p
예제 #6
0
파일: _svm.py 프로젝트: Anhmike/PyMVPA
    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 probability estimates"

        #convert x into SVMNode, alloc a double array to receive probabilities
        data = seq_to_svm_node(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, l in enumerate(self.labels):
            p[l] = pv[i]
        return pred, p
예제 #7
0
def double_array(seq):
    size = len(seq)
    array = svmc.new_double(size)
    for i, item in enumerate(seq):
        svmc.double_setitem(array, i, item)
    return array
예제 #8
0
파일: _svm.py 프로젝트: Anhmike/PyMVPA
def double_array(seq):
    size = len(seq)
    array = svmc.new_double(size)
    for i, item in enumerate(seq):
        svmc.double_setitem(array, i, item)
    return array