def huber_small(self, solver): # Solve the Huber regression problem x = Variable(3) objective = sum(huber(x)) # Solve problem with QP p = Problem(Minimize(objective), [x[2] >= 3]) self.solve_QP(p, solver) self.assertAlmostEqual(3, x.value[2], places=4) self.assertAlmostEqual(5, objective.value, places=4)
def huber(self, solver): # Generate problem data np.random.seed(2) n = 3 m = 5 A = sp.random(m, n, density=0.8, format='csc') x_true = np.random.randn(n) / np.sqrt(n) ind95 = (np.random.rand(m) < 0.95).astype(float) b = A.dot(x_true) + np.multiply(0.5*np.random.randn(m), ind95) \ + np.multiply(10.*np.random.rand(m), 1. - ind95) # Solve the Huber regression problem x = Variable(n) objective = sum(huber(A * x - b)) # Solve problem with QP p = Problem(Minimize(objective)) self.solve_QP(p, solver) self.assertAlmostEqual(1.327429461061672, objective.value, places=3) self.assertItemsAlmostEqual(x.value, [-1.03751745, 0.86657204, -0.9649172], places=3)