def fit(self, X, Y): n, d = X.shape[0], X.shape[1] Y = Y.reshape(-1, 1) L = self.calculateL(self.xi) #secOrd = np.linalg.pinv((X.T.dot(X) * L + self.reg * np.eye(d)) / n) # I = np.eye(d) # I[-1, -1] = 0 #Not regularize the intercept try: secOrd = np.linalg.pinv(X.T.dot(X) * L / n + self.reg * np.eye(d)) except Exception as e: print(e.message) if not self.manualInitial: self.initialize(X, Y) t = 0. while t < self.iterations: v = X.dot(self._beta) GEVFunc.clip(self.xi, v) Y_hat = GEVFunc.inverseLink(self.xi, v) #firOrd = (X.T.dot(Y_hat - Y) + self.reg * self._beta) / n # tmp = self.reg * self._beta # tmp[-1] = 0 firOrd = X.T.dot(Y_hat - Y) / n + self.reg * self._beta deltaBeta = self.step * secOrd.dot(firOrd) if t >= 100 and np.abs(deltaBeta).sum() < self.tol: self._beta -= deltaBeta # print "Converged. t = %d" % (t) break self._beta -= deltaBeta t += 1 self._beta = np.array(self._beta).flatten()
def oneStep3(self, X, Y): n, d = X.shape[0], X.shape[1] Y = Y.reshape(-1, 1) v = X.dot(self._beta) GEVFunc.clip(self.xi, v) W = np.diag(GEVFunc.derivInverseLink(self.xi, v).flatten()) secOrd = np.linalg.pinv(X.T.dot(W).dot(X) / n + self.reg * np.eye(d)) Y_hat = GEVFunc.inverseLink(self.xi, v) firOrd = X.T.dot(Y_hat - Y) / n + self.reg * self._beta self._beta -= self.step * secOrd.dot(firOrd)
def oneStep(self, X, Y): n, d = X.shape[0], X.shape[1] Y = Y.reshape(-1, 1) L = self.calculateL(self.xi) try: secOrd = np.linalg.pinv(X.T.dot(X) * L / n + self.reg * np.eye(d)) except Exception as e: print(e.message) v = X.dot(self._beta) GEVFunc.clip(self.xi, v) Y_hat = GEVFunc.inverseLink(self.xi, v) firOrd = X.T.dot(Y_hat - Y) / n + self.reg * self._beta self._beta -= self.step * secOrd.dot(firOrd)
def fit3(self, X, Y): n, d = X.shape[0], X.shape[1] Y = Y.reshape(-1, 1) if not self.manualInitial: self.initialize(X, Y) t = 0. while t < self.iterations: v = X.dot(self._beta) GEVFunc.clip(self.xi, v) W = np.diag(GEVFunc.derivInverseLink(self.xi, v).flatten()) # secOrd = np.linalg.pinv(X.T.dot(W).dot(X) / n + self.reg * np.eye(d)) A = X.T.dot(W).dot(X) / n + self.reg * np.eye(d) Y_hat = GEVFunc.inverseLink(self.xi, v) b = X.T.dot(Y_hat - Y) / n + self.reg * self._beta self._beta += np.linalg.lstsq(A, -b)[0] # self._beta -= self.step * secOrd.dot(firOrd) t += 1 self._beta = np.array(self._beta).flatten()
def predict(self, X): v = X.dot(self.beta) GEVFunc.clip(self.xi, v) return GEVFunc.inverseLink(self.xi, v).flatten()
def firstDeriva(self, X, Y, beta): v = X.dot(beta) GEVFunc.clip(self.xi, v) Y_hat = GEVFunc.inverseLink(self.xi, v) return X.T.dot(Y_hat - Y) / X.shape[0] + self.reg * beta
def loglikelihood(self, beta, xi): v = self.X.dot(beta.reshape(-1, 1)) GEVFunc.clip(xi, v) res = GEVFunc.inverseLink(xi, v) res[self.targets == 0] = 1 - res[self.targets == 0] return sum([np.log(x + 1e-8) for x in res])