/* Copyright (C) 2010 Andrew Cotter This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /** \file gtsvm.h \brief definition of C interface to SVM class */ #ifndef __GTSVM_H__ #define __GTSVM_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include /*============================================================================ GTSVM_Context typedef ============================================================================*/ typedef uint32_t GTSVM_Context; /*============================================================================ GTSVM_Type enumeration ============================================================================*/ typedef enum { GTSVM_TYPE_UNKNOWN = 0, GTSVM_TYPE_BOOL, GTSVM_TYPE_FLOAT, GTSVM_TYPE_DOUBLE, GTSVM_TYPE_INT8, GTSVM_TYPE_INT16, GTSVM_TYPE_INT32, GTSVM_TYPE_INT64, GTSVM_TYPE_UINT8, GTSVM_TYPE_UINT16, GTSVM_TYPE_UINT32, GTSVM_TYPE_UINT64 } GTSVM_Type; /*============================================================================ GTSVM_Kernel enumeration ============================================================================*/ typedef enum { GTSVM_KERNEL_UNKNOWN = 0, GTSVM_KERNEL_GAUSSIAN, /* K( x, y ) = exp( -p1 * || x - y ||^2 ) */ GTSVM_KERNEL_POLYNOMIAL, /* K( x, y ) = ( p1 * + p2 )^p3 */ GTSVM_KERNEL_SIGMOID /* K( x, y ) = tanh( p1 * + p2 ) */ } GTSVM_Kernel; /*============================================================================ GTSVM_Error function ============================================================================*/ extern char const* GTSVM_Error(); /*============================================================================ GTSVM_Create function ============================================================================*/ extern bool GTSVM_Create( GTSVM_Context* const pContext ); /*============================================================================ GTSVM_Destroy function ============================================================================*/ extern bool GTSVM_Destroy( GTSVM_Context const context ); /*============================================================================ GTSVM_InitializeSparse function ============================================================================*/ extern bool GTSVM_InitializeSparse( GTSVM_Context const context, void const* const trainingVectors, /* order depends on the columnMajor flag */ size_t const* const trainingVectorIndices, size_t const* const trainingVectorOffsets, GTSVM_Type const trainingVectorsType, void const* const trainingLabels, GTSVM_Type const trainingLabelsType, uint32_t const rows, uint32_t const columns, bool const columnMajor, bool const multiclass, float const regularization, GTSVM_Kernel const kernel, float const kernelParameter1, float const kernelParameter2, float const kernelParameter3, bool const biased, bool const smallClusters, uint32_t const activeClusters ); /*============================================================================ GTSVM_InitializeDense function ============================================================================*/ extern bool GTSVM_InitializeDense( GTSVM_Context const context, void const* const trainingVectors, /* order depends on the columnMajor flag */ GTSVM_Type const trainingVectorsType, void const* const trainingLabels, GTSVM_Type const trainingLabelsType, uint32_t const rows, uint32_t const columns, bool const columnMajor, bool const multiclass, float const regularization, GTSVM_Kernel const kernel, float const kernelParameter1, float const kernelParameter2, float const kernelParameter3, bool const biased, bool const smallClusters, uint32_t const activeClusters ); /*============================================================================ GTSVM_Load function ============================================================================*/ extern bool GTSVM_Load( GTSVM_Context const context, char const* const filename, bool const smallClusters, uint32_t const activeClusters ); /*============================================================================ GTSVM_Save function ============================================================================*/ extern bool GTSVM_Save( GTSVM_Context const context, char const* const filename ); /*============================================================================ GTSVM_Shrink function ============================================================================*/ extern bool GTSVM_Shrink( GTSVM_Context const context, bool const smallClusters, uint32_t const activeClusters ); /*============================================================================ GTSVM_DeinitializeDevice function ============================================================================*/ extern bool GTSVM_DeinitializeDevice( GTSVM_Context const context ); /*============================================================================ GTSVM_Deinitialize function ============================================================================*/ extern bool GTSVM_Deinitialize( GTSVM_Context const context ); /*============================================================================ GTSVM_GetRows function ============================================================================*/ extern bool GTSVM_GetRows( GTSVM_Context const context, unsigned int* const result ); /*============================================================================ GTSVM_GetColumns function ============================================================================*/ extern bool GTSVM_GetColumns( GTSVM_Context const context, unsigned int* const result ); /*============================================================================ GTSVM_GetClasses function ============================================================================*/ extern bool GTSVM_GetClasses( GTSVM_Context const context, unsigned int* const result ); /*============================================================================ GTSVM_GetNonzeros function ============================================================================*/ extern bool GTSVM_GetNonzeros( GTSVM_Context const context, unsigned int* const result ); /*============================================================================ GTSVM_GetRegularization function ============================================================================*/ extern bool GTSVM_GetRegularization( GTSVM_Context const context, float* const result ); /*============================================================================ GTSVM_GetKernel function ============================================================================*/ extern bool GTSVM_GetKernel( GTSVM_Context const context, GTSVM_Kernel* const result ); /*============================================================================ GTSVM_GetKernelParameter1 function ============================================================================*/ extern bool GTSVM_GetKernelParameter1( GTSVM_Context const context, float* const result ); /*============================================================================ GTSVM_GetKernelParameter2 function ============================================================================*/ extern bool GTSVM_GetKernelParameter2( GTSVM_Context const context, float* const result ); /*============================================================================ GTSVM_GetKernelParameter3 function ============================================================================*/ extern bool GTSVM_GetKernelParameter3( GTSVM_Context const context, float* const result ); /*============================================================================ GTSVM_GetBiased function ============================================================================*/ extern bool GTSVM_GetBiased( GTSVM_Context const context, bool* const result ); /*============================================================================ GTSVM_GetBias function ============================================================================*/ extern bool GTSVM_GetBias( GTSVM_Context const context, double* const result ); /*============================================================================ GTSVM_GetTrainingVectorsSparse function ============================================================================*/ extern bool GTSVM_GetTrainingVectorsSparse( GTSVM_Context const context, void* const trainingVectors, /* order depends on the columnMajor flag */ size_t* const trainingVectorIndices, size_t* const trainingVectorOffsets, GTSVM_Type const trainingVectorsType, bool const columnMajor ); /*============================================================================ GTSVM_GetTrainingVectorsDense function ============================================================================*/ extern bool GTSVM_GetTrainingVectorsDense( GTSVM_Context const context, void* const trainingVectors, /* order depends on the columnMajor flag */ GTSVM_Type const trainingVectorsType, bool const columnMajor ); /*============================================================================ GTSVM_GetTrainingLabels function ============================================================================*/ extern bool GTSVM_GetTrainingLabels( GTSVM_Context const context, void* const trainingLabels, GTSVM_Type const trainingLabelsType ); /*============================================================================ GTSVM_GetTrainingClassifiers function ============================================================================*/ extern bool GTSVM_GetTrainingClassifiers( GTSVM_Context const context, void* const trainingClassifiers, GTSVM_Type const trainingClassifiersType, bool const columnMajor ); /*============================================================================ GTSVM_GetAlphas function ============================================================================*/ extern bool GTSVM_GetAlphas( GTSVM_Context const context, void* const trainingAlphas, GTSVM_Type const trainingAlphasType, bool const columnMajor ); /*============================================================================ GTSVM_SetAlphas function ============================================================================*/ extern bool GTSVM_SetAlphas( GTSVM_Context const context, void const* const trainingAlphas, GTSVM_Type const trainingAlphasType, bool const columnMajor ); /*============================================================================ GTSVM_Recalculate function ============================================================================*/ extern bool GTSVM_Recalculate( GTSVM_Context const context ); /*============================================================================ GTSVM_Restart function ============================================================================*/ extern bool GTSVM_Restart( GTSVM_Context const context, float const regularization, GTSVM_Kernel const kernel, float const kernelParameter1, float const kernelParameter2, float const kernelParameter3, bool const biased ); /*============================================================================ GTSVM_Optimize function ============================================================================*/ extern bool GTSVM_Optimize( GTSVM_Context const context, double* const pPrimal, double* const pDual, unsigned int const iterations ); /*============================================================================ GTSVM_ClassifySparse function ============================================================================*/ extern bool GTSVM_ClassifySparse( GTSVM_Context const context, void* const result, GTSVM_Type const resultType, void const* const vectors, /* order depends on columnMajor flag */ size_t const* const vectorIndices, size_t const* const vectorOffsets, GTSVM_Type const vectorsType, uint32_t const rows, uint32_t const columns, bool const columnMajor ); /*============================================================================ GTSVM_ClassifyDense function ============================================================================*/ extern bool GTSVM_ClassifyDense( GTSVM_Context const context, void* const result, GTSVM_Type const resultType, void const* const vectors, /* order depends on columnMajor flag */ GTSVM_Type const vectorsType, uint32_t const rows, uint32_t const columns, bool const columnMajor ); #ifdef __cplusplus } /* extern "C" */ #endif /* __cplusplus */ #endif /* __GTSVM_H__ */