def suboptimalSysID(self, Y): """System identification using KPCA. Updates the NLDS parameters. Parameters: ----------- Y : numpy array, shape = (N, D) Input data. """ nStates = self._nStates # call KPCA to get state estimate if self._verbose: with Timer('kpca'): Xhat = kpca(Y, nStates, self._kpcaParams) else: Xhat = kpca(Y, nStates, self._kpcaParams) # estimate rest of parameters _, tau = Y.shape Ahat = Xhat[:,1:tau]*np.linalg.pinv(Xhat[:,0:tau-1]) Vhat = Xhat[:,1:tau]-Ahat*Xhat[:,0:tau-1] Qhat = (Vhat*Vhat.T)/(tau-1) initX0 = Xhat[:,0] initM0 = np.mean(Xhat, axis=1) initS0 = np.diag(np.cov(Xhat)) self._Rhat = 0 self._Ahat = Ahat self._Xhat = Xhat self._Vhat = Vhat self._Qhat = Qhat self._initX0 = initX0 self._initM0 = initM0 self._initS0 = initS0
def suboptimalSysID(self, Y): """System identification using KPCA. Updates the NLDS parameters. Parameters: ----------- Y : numpy array, shape = (N, D) Input data. """ nStates = self._nStates # call KPCA to get state estimate if self._verbose: with Timer('kpca'): Xhat = kpca(Y, nStates, self._kpcaParams) else: Xhat = kpca(Y, nStates, self._kpcaParams) # estimate rest of parameters _, tau = Y.shape Ahat = Xhat[:, 1:tau] * np.linalg.pinv(Xhat[:, 0:tau - 1]) Vhat = Xhat[:, 1:tau] - Ahat * Xhat[:, 0:tau - 1] Qhat = (Vhat * Vhat.T) / (tau - 1) initX0 = Xhat[:, 0] initM0 = np.mean(Xhat, axis=1) initS0 = np.diag(np.cov(Xhat)) self._Rhat = 0 self._Ahat = Ahat self._Xhat = Xhat self._Vhat = Vhat self._Qhat = Qhat self._initX0 = initX0 self._initM0 = initM0 self._initS0 = initS0
def test_kpca(): dataFile = os.path.join(TESTBASE, "data/data1.txt") data, _ = loadDataFromASCIIFile(dataFile) kpcaP = KPCAParam() kpcaP._kPar = RBFParam() kpcaP._kPar._kCen = True kpcaP._kFun = rbfK X = kpca(data, 5, kpcaP) baseKPCACoeffFile = os.path.join(TESTBASE, "data/data1-rbf-kpca-5c-center.txt") baseKPCACoeff = np.genfromtxt(baseKPCACoeffFile, dtype=np.double) # don't care about the sign err = np.linalg.norm(np.abs(baseKPCACoeff) - np.abs(X), "fro") np.testing.assert_almost_equal(err, 0, 2)
def test_kpca(): dataFile = os.path.join(TESTBASE, "data/data1.txt") data, _ = loadDataFromASCIIFile(dataFile) kpcaP = KPCAParam() kpcaP._kPar = RBFParam() kpcaP._kPar._kCen = True kpcaP._kFun = rbfK X = kpca(data, 5, kpcaP) baseKPCACoeffFile = os.path.join(TESTBASE, "data/data1-rbf-kpca-5c-center.txt") baseKPCACoeff = np.genfromtxt(baseKPCACoeffFile, dtype=np.double) # don't care about the sign err = np.linalg.norm(np.abs(baseKPCACoeff) - np.abs(X), 'fro') np.testing.assert_almost_equal(err, 0, 2)