📄 kernel.c
字号:
/* --------------------------------------------------------------------
Provides a function for evaluation of kernel function. This function
is used in smo.c, svmclass2.c,etc.
Statistical Pattern Recognition Toolbox, Vojtech Franc, Vaclav Hlavac (c) Czech Technical University Prague, http://cmp.felk.cvut.cz Modifications: 12-November-2001, V.Franc, sigmoid kenel 22-September-2001, V. Franc, created.-------------------------------------------------------------------- */
#include "mex.h"#include "matrix.h"#include <math.h>/* --- Global variables --------------------------------------------- */
double *dataA; /* pointer at the fist patterns */
double *dataB; /* pointer at the second patterns */
long dim; /* dimension of patterns */
int ker; /* kernel type (0 - linear, 1 - polynom, 2 - rbf, 3 - sigmoid */double arg1; /* 1st argument of the kernel */
double arg2; /* 2nd argument --//-- */long ker_cnt; /* number of cernel evaluations */
/* -------------------------------------------------------------------
Computes dot product of a-th and b-th vector.
c = a'*b
------------------------------------------------------------------- */
double dot_prod( long a, long b)
{ double c = 0; long i; for( i = 0; i < dim; i++ ) { c += *(dataA+(a*dim)+i) * *(dataB+(b*dim)+i); } return( c );}/* ------------------------------------------------------------------- Computes dot product of subtraction of a-th and b-th vector.
c = (a-b)'*(a-b)
------------------------------------------------------------------- */
double sub_dot_prod( long a, long b ){ double c = 0; long i; for( i = 0; i < dim; i++ ) { c += (*(dataA+(a*dim)+i) - *(dataB+(b*dim)+i))* (*(dataA+(a*dim)+i) - *(dataB+(b*dim)+i)); } return( c );}/* -------------------------------------------------------------------- Computes kernel function for a-th and b-th.
The base address for the 1st argument is dataA and for the 2nd
argument is dataB.
-------------------------------------------------------------------- */
double kernel( long a, long b ){ double c = 0; ker_cnt++; switch( ker ) { /* polynomial kernel */ case 1: c = pow( (dot_prod( a, b) + 1), arg1 ); break; /* radial basis functions kernel*/ case 2: c = exp( sub_dot_prod( a, b)/arg1 ); break; /* sigmoid */ case 3: c = tanh( arg1*dot_prod( a,b) + arg2 ); break; /* linear kernel */ default: c = dot_prod( a, b ); } return( c );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -