• 大小: 8KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Matlab
  • 标签: MATLAB  

资源简介

基于MATLAB的SVM模块源代码基于MATLAB的SVM模块源代码

资源截图

代码片段和文件信息

#include 
#include 
#include “svm.h“

#include “mex.h“

#ifdef MX_API_VER
#if MX_API_VER < 0x07030000
typedef int mwIndex;
#endif
#endif

#define NUM_OF_RETURN_FIELD 11

#define Malloc(typen) (type *)malloc((n)*sizeof(type))

static const char *field_names[] = {
“Parameters“
“nr_class“
“totalSV“
“rho“
“Label“
“sv_indices“
“ProbA“
“ProbB“
“nSV“
“sv_coef“
“SVs“
};

const char *model_to_matlab_structure(mxArray *plhs[] int num_of_feature struct svm_model *model)
{
int i j n;
double *ptr;
mxArray *return_model **rhs;
int out_id = 0;

rhs = (mxArray **)mxMalloc(sizeof(mxArray *)*NUM_OF_RETURN_FIELD);

// Parameters
rhs[out_id] = mxCreateDoubleMatrix(5 1 mxREAL);
ptr = mxGetPr(rhs[out_id]);
ptr[0] = model->param.svm_type;
ptr[1] = model->param.kernel_type;
ptr[2] = model->param.degree;
ptr[3] = model->param.gamma;
ptr[4] = model->param.coef0;
out_id++;

// nr_class
rhs[out_id] = mxCreateDoubleMatrix(1 1 mxREAL);
ptr = mxGetPr(rhs[out_id]);
ptr[0] = model->nr_class;
out_id++;

// total SV
rhs[out_id] = mxCreateDoubleMatrix(1 1 mxREAL);
ptr = mxGetPr(rhs[out_id]);
ptr[0] = model->l;
out_id++;

// rho
n = model->nr_class*(model->nr_class-1)/2;
rhs[out_id] = mxCreateDoubleMatrix(n 1 mxREAL);
ptr = mxGetPr(rhs[out_id]);
for(i = 0; i < n; i++)
ptr[i] = model->rho[i];
out_id++;

// Label
if(model->label)
{
rhs[out_id] = mxCreateDoubleMatrix(model->nr_class 1 mxREAL);
ptr = mxGetPr(rhs[out_id]);
for(i = 0; i < model->nr_class; i++)
ptr[i] = model->label[i];
}
else
rhs[out_id] = mxCreateDoubleMatrix(0 0 mxREAL);
out_id++;

// sv_indices
if(model->sv_indices)
{
rhs[out_id] = mxCreateDoubleMatrix(model->l 1 mxREAL);
ptr = mxGetPr(rhs[out_id]);
for(i = 0; i < model->l; i++)
ptr[i] = model->sv_indices[i];
}
else
rhs[out_id] = mxCreateDoubleMatrix(0 0 mxREAL);
out_id++;

// probA
if(model->probA != NULL)
{
rhs[out_id] = mxCreateDoubleMatrix(n 1 mxREAL);
ptr = mxGetPr(rhs[out_id]);
for(i = 0; i < n; i++)
ptr[i] = model->probA[i];
}
else
rhs[out_id] = mxCreateDoubleMatrix(0 0 mxREAL);
out_id ++;

// probB
if(model->probB != NULL)
{
rhs[out_id] = mxCreateDoubleMatrix(n 1 mxREAL);
ptr = mxGetPr(rhs[out_id]);
for(i = 0; i < n; i++)
ptr[i] = model->probB[i];
}
else
rhs[out_id] = mxCreateDoubleMatrix(0 0 mxREAL);
out_id++;

// nSV
if(model->nSV)
{
rhs[out_id] = mxCreateDoubleMatrix(model->nr_class 1 mxREAL);
ptr = mxGetPr(rhs[out_id]);
for(i = 0; i < model->nr_class; i++)
ptr[i] = model->nSV[i];
}
else
rhs[out_id] = mxCreateDoubleMatrix(0 0 mxREAL);
out_id++;

// sv_coef
rhs[out_id] = mxCreateDoubleMatrix(model->l model->nr_class-1 mxREAL);
ptr = mxGetPr(rhs[out_id]);
for(i = 0; i < model->nr_class-1; i++)
for(j = 0; j < model->l; j++)
ptr[(i*(model->l))+j] = model->sv_coef[i][j];
out_id++;

// SVs
{
int ir_index nonzero_element;
mwIndex *ir *jc;
mxArray *pprhs[1

评论

共有 条评论