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

📄 smosvctrain.cpp

📁 用于进行所谓的支持向量机的分析
💻 CPP
字号:
/******************************************************************************

File        : smotrain.c

Date        : Wednesday 13th September 2000

Author      : Dr Gavin C. Cawley

Description : MATLAB interface function for a C++ MEX implementation of
              Vapnik's support vector machine (SVM) [1] trained using the
              sequential minimal optimisation algorithm due to Platt [2].

References  : [1] V. N. Vapnik, "The Nature of Statistical Learning Theory",
                  Springer-Verlag, New York, ISBN 0-387-94559-8, 1995.

              [2] J. C. Platt, "Fast Training of Support Vector Machines using
                  Sequential Minimal Optimization".  In B. Scholkopf, C. J. C.
                  Burges and A. J. Smola, editors, "Advances in Kernel Methods
                  - Support Vector Learning", pp 185-208, MIT Press, 1998.

History     : 07/07/2000 - v1.00
              13/09/2000 - v1.01 minor improvements to comments

Copyright   : (c) Dr Gavin C. Cawley, September 2000.

   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 2 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, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

******************************************************************************/

#include "mex.h"

#include "Cache.h"
#include "InfCache.h"
#include "LrrCache.h"
#include "SmoTutor.h"

// net = smosvctrain(tutor, x, y, C, kernel, zeta, alpha, bias);

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
   mxArray *x, *y, *C, *kernel, *zeta, *alpha, *bias;

   /* check number of input and output arguments */

   if (nrhs != 8)
   {
      mexErrMsgTxt("Wrong number of input arguments.");
   }

   if (nlhs > 1)
   {
      mexErrMsgTxt("Too many output arguments.");
   }

   // the first argument is the tutor object, only used in dynamic binding

   // get input patterns 

   if (!mxIsDouble(prhs[1]) || mxIsComplex(prhs[1]))
   {
      mexErrMsgTxt("x must be a double matrix.");
   }

   x  = (mxArray*)prhs[1];

   // get target patterns 

   if (!mxIsDouble(prhs[2]) || mxIsComplex(prhs[2]))
   {
      mexErrMsgTxt("y must be a double matrix.");
   }

   y = (mxArray*)prhs[2];

   // get regularisation parameter 

   if (!mxIsDouble(prhs[3]) || mxIsComplex(prhs[3]))
   {
      mexErrMsgTxt("C must be a double scalar.");
   }

   C = (mxArray*)prhs[3];

   // get kernel structure 

   if (!mxIsStruct(prhs[4]))
   {
      mexErrMsgTxt("kernel must be a structure.");
   }

   kernel = (mxArray*)prhs[4];

   // get pattern weighting factors

   if (!mxIsDouble(prhs[5]) || mxIsComplex(prhs[5]))
   {
      mexErrMsgTxt("zeta must be a double matrix.");
   }

   zeta = (mxArray*)prhs[5];

   // get Lagrange multipliers

   if (!mxIsDouble(prhs[6]) || mxIsComplex(prhs[6]))
   {
      mexErrMsgTxt("alpha must be a double matrix.");
   }

   alpha = (mxArray*)prhs[6];

   // get bias 

   if (!mxIsDouble(prhs[7]) || mxIsComplex(prhs[7]))
   {
      mexErrMsgTxt("alpha must be a double matrix.");
   }

   bias = (mxArray*)prhs[7];

   // get on with it

   SmoTutor tutor = SmoTutor(x,
                             y,
                             C,
                             kernel,
                             zeta,
                             alpha,
                             bias,
                             new LrrCache(kernel, x));

   plhs[0] = tutor.train();

   // bye bye... 
}

/***************************** That's all Folks! *****************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -