![]() |
GURLS++
2.0.00
C++ Implementation of GURLS Matlab Toolbox
|
RLSPrimalRecUpdate is the sub-class of Optimizer that implements RLS with the primal formulation.
#include <rlsprimalrecupdate.h>
Public Member Functions | |
GurlsOptionsList * | execute (const gMat2D< T > &X, const gMat2D< T > &Y, const GurlsOptionsList &opt) |
Computes a classifier for the primal formulation of RLS, using a recursive update, starting from an initial estimator found in opt.optimizer. | |
Static Public Member Functions | |
static Optimizer< T > * | factory (const std::string &id) throw (BadOptimizerCreation) |
Factory function returning a pointer to the newly created object. |
Definition at line 61 of file rlsprimalrecupdate.h.
GurlsOptionsList * gurls::RLSPrimalRecUpdate< T >::execute | ( | const gMat2D< T > & | X, |
const gMat2D< T > & | Y, | ||
const GurlsOptionsList & | opt | ||
) | [virtual] |
X | input data matrix |
Y | labels matrix |
opt | options with the following fields that need to be set through previous gurls++ tasks:
|
Implements gurls::Optimizer< T >.
Definition at line 85 of file rlsprimalrecupdate.h.
{ // [n,d] = size(X); const unsigned long n = X.rows(); const unsigned long d = X.cols(); const unsigned long t = Y.cols(); // W = opt.rls.W; const gMat2D<T>& prev_W = opt.getOptValue<OptMatrix<gMat2D<T> > >("optimizer.W"); gMat2D<T>* W = new gMat2D<T>(prev_W); // Cinv = opt.rls.Cinv; const gMat2D<T>& prev_Cinv = opt.getOptValue<OptMatrix<gMat2D<T> > >("optimizer.Cinv"); gMat2D<T>* Cinv = new gMat2D<T>(prev_Cinv); T* WData = W->getData(); const unsigned long wn = W->rows(); const unsigned long wd = W->cols(); T* CinvData = Cinv->getData(); const unsigned long cn = Cinv->rows(); const unsigned long cd = Cinv->cols(); T* Cx = new T[cn]; T* x = new T[d]; T* y = new T[t]; T xCx; T* CxCxt = new T[cn*cn]; T* xW = new T[wd]; T* Cxy = new T[cn*t]; for(unsigned long i=0; i<n; ++i) { getRow(X.getData(), n, d, i, x); getRow(Y.getData(), n, t, i, y); // Cx = Cinv*X(i,:)'; gemv(CblasNoTrans, cn, cd, (T)1.0, CinvData, cn, x, 1, (T)0.0, Cx, 1); // xCx = X(i,:)*Cx; gemv(CblasNoTrans, 1, d, (T)1.0, x, 1, Cx, 1, (T)0.0, &xCx, 1); // Cinv = Cinv - Cx*Cx'./(1+xCx); dot(Cx, Cx, CxCxt, cn, 1, cn, 1, cn, cn, CblasNoTrans, CblasTrans, CblasColMajor); axpy(cn*cn, (T)(-1.0/(xCx+1)), CxCxt, 1, CinvData, 1); // W = W +(Cx*(y(i,:)-X(i,:)*W))./(1+xCx); dot(x, WData, xW, 1, d, wn, wd, 1, wd, CblasNoTrans, CblasNoTrans, CblasColMajor); axpy(t, (T)-1.0, xW, 1, y, 1); dot(Cx, y, Cxy, cn, 1, 1, t, cn, t, CblasNoTrans, CblasNoTrans, CblasColMajor); axpy(cn*t, (T)(1.0/(xCx+1)), Cxy, 1, WData, 1); } delete[] Cx; delete[] x; delete[] y; delete[] CxCxt; delete[] xW; delete[] Cxy; GurlsOptionsList* optimizer = new GurlsOptionsList("optimizer"); // rls.W = W; optimizer->addOpt("W", new OptMatrix<gMat2D<T> >(*W)); // rls.C = []; gMat2D<T>* emptyC = new gMat2D<T>(); optimizer->addOpt("C", new OptMatrix<gMat2D<T> >(*emptyC)); // cfr.X = []; gMat2D<T>* emptyX = new gMat2D<T>(); optimizer->addOpt("X", new OptMatrix<gMat2D<T> >(*emptyX)); // rls.Cinv = Cinv; optimizer->addOpt("Cinv", new OptMatrix<gMat2D<T> >(*Cinv)); return optimizer; }
static Optimizer<T>* gurls::Optimizer< T >::factory | ( | const std::string & | id | ) | throw (BadOptimizerCreation) [inline, static, inherited] |
Definition at line 130 of file optimization.h.
{ if(id == "rlsauto") return new RLSAuto<T>; if(id == "rlsprimal") return new RLSPrimal<T>; if(id == "rlsprimalr") return new RLSPrimalr<T>; if(id == "rlsdual") return new RLSDual<T>; if(id == "rlsdualr") return new RLSDualr<T>; if(id == "rlspegasos") return new RLSPegasos<T>; if(id == "rlsgpregr") return new RLSGPRegr<T>; if(id == "rlsprimalrecinit") return new RLSPrimalRecInit<T>; if(id == "rlsprimalrecupdate") return new RLSPrimalRecUpdate<T>; if(id == "rlsrandfeats") return new RLSRandFeats<T>; throw BadOptimizerCreation(id); }