![]() |
GURLS++
2.0.00
C++ Implementation of GURLS Matlab Toolbox
|
PredKernelTrainTest is the sub-class of PredKernel that computes the kernel matrix between training and test sets.
#include <predkerneltraintest.h>


Public Member Functions | |
| GurlsOptionsList * | execute (const gMat2D< T > &X, const gMat2D< T > &Y, const GurlsOptionsList &opt) throw (gException) |
| Computes the kernel matrix between the training set and the test set X, in order to predict the labels for X. | |
Static Public Member Functions | |
| static PredKernel< T > * | factory (const std::string &id) throw (BadPredKernelCreation) |
| Factory function returning a pointer to the newly created object. | |
Definition at line 61 of file predkerneltraintest.h.
| GurlsOptionsList * gurls::PredKernelTrainTest< T >::execute | ( | const gMat2D< T > & | X, |
| const gMat2D< T > & | Y, | ||
| const GurlsOptionsList & | opt | ||
| ) | throw (gException) [virtual] |
| X | input data matrix |
| Y | not used |
| opt | options with the following required fields:
|
Implements gurls::PredKernel< T >.
Definition at line 82 of file predkerneltraintest.h.
{
const GurlsOptionsList* optimizer = opt.getOptAs<GurlsOptionsList>("optimizer");
std::string kernelType = opt.getOptValue<OptString>("kernel.type");
const gMat2D<T>& rls_X = optimizer->getOptValue<OptMatrix<gMat2D<T> > >("X");
const unsigned long xr = X.rows();
const unsigned long xc = X.cols();
const unsigned long rls_xr = rls_X.rows();
if(xc != rls_X.cols())
throw gException(Exception_Inconsistent_Size);
GurlsOptionsList* predkernel = new GurlsOptionsList("predkernel");
predkernel->addOpt("type", kernelType);
gMat2D<T>* K;
if(kernelType == "rbf")
{
double sigma = opt.getOptValue<OptNumber>("paramsel.sigma");
// opt.predkernel.distance = distance(X',opt.rls.X');
gMat2D<T> *dist = new gMat2D<T>(xr, rls_xr);
distance_transposed(X.getData(), rls_X.getData(), xc, xr, rls_xr, dist->getData());
// fk.distance = opt.predkernel.distance;
predkernel->addOpt("distance", new OptMatrix<gMat2D<T> > (*dist));
K = new gMat2D<T>(xr, rls_xr);
copy(K->getData(), dist->getData(), dist->getSize());
// fk.K = exp(-(opt.predkernel.distance)/(opt.paramsel.sigma^2));
scal(K->getSize(), (T)(-1.0/pow(sigma, 2)), K->getData(), 1);
exp(K->getData(), K->getSize());
if(optimizer->hasOpt("L"))
{
gMat2D<T> *Ktest = new gMat2D<T>(xr, 1);
set(Ktest->getData(), (T)1.0, xr);
predkernel->addOpt("Ktest", new OptMatrix<gMat2D<T> >(*Ktest));
}
}
else if(kernelType == "load")
{
// load(opt.testkernel);
std::string testKernel = opt.getOptAsString("testKernel");
// fk.K = K_tetr;
K = new gMat2D<T>();
K->load(testKernel);
}
else if(kernelType == "chisquared")
{
const T epsilon = std::numeric_limits<T>::epsilon();
K = new gMat2D<T>(xr, rls_xr);
T* Kbuf = K->getData();
set(Kbuf, (T)0.0, K->getSize());
// for i = 1:size(X,1)
for(unsigned long i=0; i<xr; ++i)
{
// for j = 1:size(opt.rls.X,1)
for(unsigned long j=0; j<rls_xr; ++j)
{
// fk.K(i,j) = sum(...
// ( (X(i,:) - opt.rls.X(j,:)).^2 ) ./ ...
// ( 0.5*(X(i,:) + opt.rls.X(j,:)) + eps));
T sum = 0;
for(unsigned long k=0; k< xc; ++k)
{
const T X_ik = X.getData()[i+(xr*k)];
const T rlsX_jk = rls_X.getData()[j+(rls_xr*k)];
sum += pow(X_ik - rlsX_jk, 2) / static_cast<T>(((0.5*(X_ik + rlsX_jk)) + epsilon));
}
Kbuf[i+(xr*j)] = sum;
}
}
}
else
throw gException(Exception_Required_Parameter_Missing);
predkernel->addOpt("K", new OptMatrix<gMat2D<T> > (*K));
return predkernel;
}
| static PredKernel<T>* gurls::PredKernel< T >::factory | ( | const std::string & | id | ) | throw (BadPredKernelCreation) [inline, static, inherited] |
Definition at line 97 of file predkernel.h.
{
if(id == "traintest")
return new PredKernelTrainTest<T>;
throw BadPredKernelCreation(id);
}