def __init__(self, X): assert X.shape[0] == 2 p = X[0] q = X[1] if p[..., -1] < q[..., -1]: self.X = X else: self.X = np.array([q, p]) y = X[..., -1:] A = np.hstack([X[..., :-1], np.ones((X.shape[0], 1), dtype=X.dtype)]) self.theta = (np.linalg.lstsq(A, y)[0]).flatten()
def __create_lines(self, p, q): ''' for two points p,q compute all four possible separation lines_registry ''' # TODO update it for high dimensions (x1, y1) = partition(p) x1 = x1[0] (x2, y2) = partition(q) x2 = x2[0] y_delta = math.fabs(y1 - y2) eps = 0.1 delta = y_delta * eps pq_lines = [] y1u = y1 + delta y1b = y1 - delta y2u = y2 + delta y2b = y2 - delta pq_lines.append(HighDimLine(np.array([(x1, y1u), (x2, y2u)]))) pq_lines.append(HighDimLine(np.array([(x1, y1b), (x2, y2b)]))) pq_lines.append(HighDimLine(np.array([(x1, y1u), (x2, y2b)]))) pq_lines.append(HighDimLine(np.array([(x1, y1b), (x2, y2u)]))) return pq_lines
def create_grid_points(n, d): assert d == 2 np_points = np.zeros(shape=(n, d), dtype=float) root_n = int(math.ceil(math.sqrt(n))) eps = 0.1 x = 0.0 y = 0.0 row = 0 diff = 5.0 for i in range(root_n): y = 0.0 for j in range(root_n): x_eps = random.uniform(-eps, eps) y_eps = random.uniform(-eps, eps) np_points[row] = np.array((x + x_eps, y + y_eps)) row += 1 y += diff x += diff assert row == n point_set = PointSet(np_points, n, d) point_set.name = 'grid' return point_set
def results(self): A = np.array(self.computed_results) res = np.mean(A, axis=0) return res.tolist()
def call(self, p): assert len(p.shape) == 1 X = np.array([p]) y = self(X) return y[0]