def predict(self, data):
     o = self.source_learner.predict(data)
     I_target = data.is_target
     if self.opt_succeeded:
         assert not array_functions.has_invalid(self.g)
         assert not array_functions.has_invalid(self.h)
         b = data.R_ul.dot(self.h)
         w = data.R_ul.dot(self.g)
         y_old = o.fu[I_target]
         y_new = (y_old - b) / w
         I_invalid = array_functions.is_invalid(y_new)
         y_new[I_invalid] = y_old[I_invalid]
         o.fu[I_target] = y_new
         o.y[I_target] = y_new
         o.b = b
         o.w = w
     else:
         o.b = np.zeros(I_target.sum())
         o.w = np.ones(I_target.sum())
     o.x = data.x[I_target,:]
     o.assert_input()
     return o
Esempio n. 2
0
 def assert_input(self):
     assert not array_functions.has_invalid(self.fu)
     assert not array_functions.has_invalid(self.y)
     assert not array_functions.has_invalid(self.true_y)
    def train(self, data):
        assert data.is_regression
        y_s, y_true = self.get_predictions(data)
        I_target = data.is_target
        I_target_labeled = data.is_target & data.is_labeled & data.is_train
        y_s = data.y[I_target_labeled]
        y_true = data.true_y[I_target_labeled]

        x = array_functions.standardize(data.x)
        x_t = x[I_target]
        x_tl = x[I_target_labeled]

        C = self.C
        C2 = self.C2

        W_ll = array_functions.make_rbf(x_tl, self.sigma, self.metric)
        W_ll_reg_inv = np.linalg.inv(W_ll+C2*np.eye(W_ll.shape[0]))
        W_ul = array_functions.make_rbf(x_t, self.sigma, self.metric, x2=x_tl)
        R_ll = W_ll.dot(W_ll_reg_inv)
        R_ul = W_ul.dot(W_ll_reg_inv)
        assert not array_functions.has_invalid(R_ll)
        assert not array_functions.has_invalid(R_ul)
        reg = lambda gh: SMSTransfer.reg(gh, R_ul)
        #f = lambda gh: SMSTransfer.eval(gh, R_ll, R_ul, y_s, y_true, C, reg)
        f = SMSTransfer.eval
        jac = SMSTransfer.gradient

        g0 = np.zeros((R_ll.shape[0] * 2, 1))
        gh_ids = np.zeros(g0.shape)
        gh_ids[R_ll.shape[0]:] = 1

        maxfun = np.inf
        maxitr = np.inf
        constraints = []
        options = {
            'disp': False,
            'maxiter': maxitr,
            'maxfun': maxfun
        }
        method = 'L-BFGS-B'
        #R_ll = np.eye(R_ll.shape[0])
        #R_ul = np.eye(R_ll.shape[0])
        #y_s = 1*np.ones(y_s.shape)
        #y_true = 1*np.ones(y_s.shape)
        args = (R_ll, R_ul, y_s, y_true, C, reg)
        results = optimize.minimize(
            f,
            g0,
            method=method,
            jac=jac,
            options=options,
            constraints=constraints,
            args=args
        )
        check_results = False
        if check_results:
            results2 = optimize.minimize(
                f,
                g0,
                method=method,
                jac=None,
                options=options,
                constraints=constraints,
                args=args
            )
            print self.params
            scipy_opt_methods.compare_results(results, results2, gh_ids)
            diff = results.x-results2.x
            print results.x
            print results2.x
        g, h = SMSTransfer.unpack_gh(results.x, R_ll.shape[0])
        self.opt_succeeded = results.success
        if not results.success:
            print 'SMS Opt failed'

        data.R_ul = R_ul
        self.g = g
        self.h = h
        #assert results.success
        pass
Esempio n. 4
0
 def assert_input(self):
     assert not array_functions.has_invalid(self.fu)
     assert not array_functions.has_invalid(self.y)
     assert not array_functions.has_invalid(self.true_y)