⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kernel.c

📁 支持向量机作为统计学习理论的实现方法
💻 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 + -