Beispiel #1
0
    def fit_probability_sigmoid(self, neg):
        print('Fitting probablity sigmoid to {} detector'.format(self.cls))
        #apply calibration
        pos = self.pos * self.calib_params[0] + self.calib_params[1]
        neg = neg * self.calib_params[0] + self.calib_params[1]

        num_pos = len(pos)
        num_neg = len(neg)
        X = np.hstack((pos, neg))
        y = np.hstack((np.ones(num_pos), -np.ones(num_neg)))
        #enforce max ratio between neg and pos example num
        if (num_neg / num_pos) > self.cfg.MAX_RATIO_NEG_POS:
            curr_pos_w = self.pos_weight * (num_neg / num_pos) * (
                1 / self.cfg.MAX_RATIO_NEG_POS)
            curr_neg_w = 1.
        else:
            curr_pos_w = self.pos_weight
            curr_neg_w = 1.
        weights = ([curr_pos_w] * num_pos) + ([curr_neg_w] * num_neg)
        A, B = _sigmoid_calibration(X, y, sample_weight=np.asarray(weights))
        #A,B = _sigmoid_calibration(X, y, sample_weight=None)
        #TODO-maybe these should be saved seperatly?
        self.sigmoid_params = [
            A, B, self.calib_params[0], self.calib_params[1]
        ]
        #self.evaluate_sigmoid_match(X_test,y_test,A,B)
        print('Sigmoid parameters : {},{}'.format(self.sigmoid_params[0],
                                                  self.sigmoid_params[1]))
Beispiel #2
0
 def fit_probability_sigmoid(self,neg):
     print('Fitting probablity sigmoid to {} detector'.format(self.cls))
     pos = self.pos
     num_pos = pos.shape[0]
     num_neg = neg.shape[0]
     X = np.vstack((pos, neg)) * self.feature_scale
     y = np.hstack((np.ones(num_pos),-np.ones(num_neg)))
     A,B = _sigmoid_calibration(self.svm.decision_function(X), y, sample_weight=None)
     self.sigmoid_params = [A,B]
     #self.evaluate_sigmoid_match(X_test,y_test,A,B)
     print('Sigmoid parameters : {},{}'.format(self.sigmoid_params[0],self.sigmoid_params[1]))
 def fit_probability_sigmoid(self, neg):
     print('Fitting probablity sigmoid to {} detector'.format(self.cls))
     pos = self.pos
     num_pos = pos.shape[0]
     num_neg = neg.shape[0]
     X = np.vstack((pos, neg)) * self.feature_scale
     y = np.hstack((np.ones(num_pos), -np.ones(num_neg)))
     A, B = _sigmoid_calibration(self.svm.decision_function(X),
                                 y,
                                 sample_weight=None)
     self.sigmoid_params = [A, B]
     #self.evaluate_sigmoid_match(X_test,y_test,A,B)
     print('Sigmoid parameters : {},{}'.format(self.sigmoid_params[0],
                                               self.sigmoid_params[1]))
Beispiel #4
0
def test_sigmoid_calibration():
    """Test calibration values with Platt sigmoid model"""
    exF = np.array([5, -4, 1.0])
    exY = np.array([1, -1, -1])
    # computed from my python port of the C++ code in LibSVM
    AB_lin_libsvm = np.array([-0.20261354391187855, 0.65236314980010512])
    assert_array_almost_equal(AB_lin_libsvm, _sigmoid_calibration(exF, exY), 3)
    lin_prob = 1. / (1. + np.exp(AB_lin_libsvm[0] * exF + AB_lin_libsvm[1]))
    sk_prob = _SigmoidCalibration().fit(exF, exY).predict(exF)
    assert_array_almost_equal(lin_prob, sk_prob, 6)

    # check that _SigmoidCalibration().fit only accepts 1d array or 2d column
    # arrays
    assert_raises(ValueError,
                  _SigmoidCalibration().fit, np.vstack((exF, exF)), exY)
def test_sigmoid_calibration():
    """Test calibration values with Platt sigmoid model"""
    exF = np.array([5, -4, 1.0])
    exY = np.array([1, -1, -1])
    # computed from my python port of the C++ code in LibSVM
    AB_lin_libsvm = np.array([-0.20261354391187855, 0.65236314980010512])
    assert_array_almost_equal(AB_lin_libsvm,
                              _sigmoid_calibration(exF, exY), 3)
    lin_prob = 1. / (1. + np.exp(AB_lin_libsvm[0] * exF + AB_lin_libsvm[1]))
    sk_prob = _SigmoidCalibration().fit(exF, exY).predict(exF)
    assert_array_almost_equal(lin_prob, sk_prob, 6)

    # check that _SigmoidCalibration().fit only accepts 1d array or 2d column
    # arrays
    assert_raises(ValueError, _SigmoidCalibration().fit,
                  np.vstack((exF, exF)), exY)
    def fit_probability_sigmoid(self,neg):
        print('Fitting probablity sigmoid to {} detector'.format(self.cls))
        #apply calibration
        pos = self.pos * self.calib_params[0] + self.calib_params[1]
        neg =      neg * self.calib_params[0] + self.calib_params[1]

        num_pos = len(pos)
        num_neg = len(neg)
        X = np.hstack((pos,neg))
        y = np.hstack((np.ones(num_pos),-np.ones(num_neg)))
        #enforce max ratio between neg and pos example num
        if (num_neg/num_pos)>self.cfg.MAX_RATIO_NEG_POS:
            curr_pos_w = self.pos_weight * (num_neg / num_pos) * (1 / self.cfg.MAX_RATIO_NEG_POS)
            curr_neg_w = 1.
        else:
            curr_pos_w = self.pos_weight
            curr_neg_w = 1.
        weights = ([curr_pos_w] * num_pos) + ([curr_neg_w] * num_neg)
        A,B = _sigmoid_calibration(X, y, sample_weight=np.asarray(weights))
        #A,B = _sigmoid_calibration(X, y, sample_weight=None)
        #TODO-maybe these should be saved seperatly?
        self.sigmoid_params = [A,B,self.calib_params[0],self.calib_params[1]]
        #self.evaluate_sigmoid_match(X_test,y_test,A,B)
        print('Sigmoid parameters : {},{}'.format(self.sigmoid_params[0],self.sigmoid_params[1]))
Beispiel #7
0
 def fit(self, x, y):
     self.a, self.b = _sigmoid_calibration(x, y)
     return self