13#include <NeMachineLearningLib.h>
14#include <MachineLearning/CommonUtil.h>
18 namespace MachineLearning
27 eRBFAccelerationKernel = 5,
28 eLinearAccelerationKernel = 6,
34 template<
typename Scalar>
47 IKernel(KernelType type,
int numParameters);
83 virtual void ComputeKernelMatrix(
const af::array& inX1,
const af::array& inX2, af::array& outMatrix) = 0;
110 virtual void LogLikGradientX(
const af::array& inX,
const af::array& indL_dK, af::array& outdL_dX) = 0;
124 virtual void LogLikGradientX(
const af::array& inXu,
const af::array& indL_dKuu,
const af::array& inX,
125 const af::array& indL_dKuf, af::array& outdL_dXu, af::array& outdL_dX) = 0;
137 virtual void LogLikGradientX(
const af::array& inX1,
const af::array& inX2,
const af::array& indL_dK, af::array& outdL_dX) { };
149 virtual void LogLikGradientParam(
const af::array& inX1,
const af::array& inX2,
const af::array& indL_dK, af::array& outdL_dParam) = 0;
161 virtual void LogLikGradientParam(
const af::array& inX1,
const af::array& inX2,
const af::array& indL_dK, af::array& outdL_dParam,
const af::array* dlogZ_dv) { };
163 virtual void LogLikGradientCompundKfu(
const af::array& indL_dKfu,
const af::array& inX,
const af::array& inXu,
164 af::array* outdL_dParam, af::array* outdL_dXu,
const af::array* dlogZ_dv =
nullptr, af::array* outdL_dX =
nullptr) { };
166 virtual void LogGradientCompoundKuu(
const af::array& inXu,
const af::array& inCovDiag,
167 af::array* outdL_dParam, af::array* outdL_dXu) { };
179 virtual void GradX(
const af::array& inX1,
const af::array& inX2,
int q, af::array& outdK_dX) = 0;
189 virtual void DiagGradX(
const af::array& inX, af::array& outDiagdK_dX) = 0;
200 virtual void DiagGradParam(
const af::array& inX,
const af::array& inCovDiag, af::array& outDiagdK_dParam) = 0;
271 af::array& outPsi0, af::array& outPsi1, af::array& outPsi2);
291 virtual void PsiDerivatives(
const af::array& indL_dPsi0,
const af::array& inPsi1,
const af::array& indL_dPsi1,
const af::array& inPsi2,
const af::array& indL_dPsi2,
292 const af::array& inXu,
const af::array& inMu,
const af::array& inS, af::array& outdL_dParam, af::array& outdL_dXu,
293 af::array& outdL_dMu, af::array& outdL_dS,
const af::array* dlogZ_dv =
nullptr);
319 friend class boost::serialization::access;
321 template<
class Archive>
322 void serialize(Archive& ar,
unsigned int version)
324 ar& BOOST_SERIALIZATION_NVP(eType);
325 ar& BOOST_SERIALIZATION_NVP(iNumParam);
326 ar& BOOST_SERIALIZATION_NVP(m_dType);
virtual void SetParameters(const af::array ¶m)=0
Sets the parameters.
virtual void ComputeKernelMatrix(const af::array &inX1, const af::array &inX2, af::array &outMatrix)=0
Computes the kernel matrix of the kernel.
virtual void LogLikGradientX(const af::array &inX, const af::array &indL_dK, af::array &outdL_dX)=0
Computes dL/dX for full fit GP.
IKernel(KernelType type, int numParameters)
Constructor.
virtual void LogLikGradientParam(const af::array &inX1, const af::array &inX2, const af::array &indL_dK, af::array &outdL_dParam, const af::array *dlogZ_dv)
Computes the gradient of LL w.r.t. the kernel parameters.
virtual void DiagGradX(const af::array &inX, af::array &outDiagdK_dX)=0
Derivative of diagonal elemts of K w.r.t X.
virtual void LogLikGradientX(const af::array &inX1, const af::array &inX2, const af::array &indL_dK, af::array &outdL_dX)
Computes dL / dX for sparse approximation GP.
virtual void InitParameters(Scalar inMedian)
Initializes the parameters based on the median of the distances of /f$\mathbf{X}/f$.
virtual void SetLogParameters(const af::array ¶m)
Sets log parameters.
virtual void ComputePsiStatistics(const af::array &inXu, const af::array &inMu, const af::array &inS, af::array &outPsi0, af::array &outPsi1, af::array &outPsi2)
PSI statistics.
virtual af::array GetLogParameters()
Gets log parameters.
IKernel()
Default constructor.
virtual void LogLikGradientParam(const af::array &inX1, const af::array &inX2, const af::array &indL_dK, af::array &outdL_dParam)=0
Computes the gradient of LL w.r.t. the kernel parameters.
virtual void LogLikGradientX(const af::array &inXu, const af::array &indL_dKuu, const af::array &inX, const af::array &indL_dKuf, af::array &outdL_dXu, af::array &outdL_dX)=0
Computes dL / dX and dL / dXu for sparse approximation GP.
virtual int GetNumParameter()
Gets number of parametes of the kernel.
virtual af::array GetParameters()=0
Gets the parameters.
virtual KernelType GetKernelType()
Gets kernel type.
virtual void PsiDerivatives(const af::array &indL_dPsi0, const af::array &inPsi1, const af::array &indL_dPsi1, const af::array &inPsi2, const af::array &indL_dPsi2, const af::array &inXu, const af::array &inMu, const af::array &inS, af::array &outdL_dParam, af::array &outdL_dXu, af::array &outdL_dMu, af::array &outdL_dS, const af::array *dlogZ_dv=nullptr)
Psi derivatives.
virtual void GradX(const af::array &inX1, const af::array &inX2, int q, af::array &outdK_dX)=0
Computes dK/dX.
virtual ~IKernel()
Destructor.
virtual void DiagGradParam(const af::array &inX, const af::array &inCovDiag, af::array &outDiagdK_dParam)=0
Derivative of diagonal elemts of K w.r.t kernel parameters.
virtual void ComputeDiagonal(const af::array &inX, af::array &outDiagonal)=0
Calculates only diagonal elements of K.