generated from benchopt/template_benchmark
-
Notifications
You must be signed in to change notification settings - Fork 4
/
objective.py
36 lines (27 loc) · 1.07 KB
/
objective.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from benchopt import BaseObjective, safe_import_context
with safe_import_context() as import_ctx:
import numpy as np
class Objective(BaseObjective):
min_benchopt_version = "1.3"
name = "Huber Regression with L2 regularization"
parameters = {
'epsilon': [1.35],
'lmbd': [1.],
}
def __init__(self, epsilon=1.35, lmbd=1.):
self.epsilon = epsilon
self.lmbd = lmbd
def set_data(self, X, y):
self.X, self.y = X, y
def compute(self, params):
intercept, scale, coef = params[0], params[1], params[2:]
z = np.abs(self.y - self.X @ coef - intercept) / scale
outlier_mask = z > self.epsilon
n_samples = len(self.X)
loss = np.empty(n_samples)
loss[~outlier_mask] = scale + z[~outlier_mask]**2 * scale
loss[outlier_mask] = scale + (
2 * self.epsilon * z[outlier_mask] - self.epsilon**2) * scale
return loss.sum() + self.lmbd * np.dot(coef, coef)
def get_objective(self):
return dict(X=self.X, y=self.y, lmbd=self.lmbd, epsilon=self.epsilon)