📄 training.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "svm.h"
#define Malloc(type,n) (type *)malloc((n)*sizeof(type))
struct svm_parameter param; // set by parse_command_line
struct svm_problem prob; // set by read_problem
struct svm_model *model;
struct svm_node *x_space;
struct svm_result result;
int cross_validation = 0;
int nr_fold;
svm_result training(double data[][LENGTH],double * label,int num)
{
param.svm_type = C_SVC;
param.kernel_type = RBF;
param.degree = 4;
param.gamma = 0.08; // 1/k
param.coef0 = 0;
param.nu = 0.5;
param.cache_size = 40;
param.C = 100000;
param.eps = 1e-3;
param.p = 0.1;
param.shrinking = 1;
param.nr_weight = 0;
param.weight_label = NULL;
param.weight = NULL;
int elements, i, j, z;
double *alpha ;//= Malloc(double,num+1);
prob.l = num;
//count for nonzero then mark
z=0; elements=0;
for(i=0;i<prob.l;i++)
{
z=0;
for(j=0;j<LENGTH;j++)
{
if(data[i][j]!=0)
{z++;}
}
z++; //for mark -1
elements+=z;
}
prob.y = Malloc(double,prob.l);
prob.x = Malloc(struct svm_node *,prob.l);
x_space = Malloc(struct svm_node,elements);
//max_index = 0;
j=0;
//transform into space form;
z=0;
for(i=0;i<prob.l;i++)
{
prob.x[i] = &x_space[z];
prob.y[i] = label[i];
for(j=0;j<LENGTH;j++)
{
if(data[i][j]!=0)
{
x_space[z].index = j;
x_space[z].value = data[i][j];
z++;
}
}
x_space[z].index=-1;
z++;
}
alpha = svm_train(&prob,¶m);
z=0;
for(i=0;i<num;i++)
if(alpha[i]!=0)
z++;
result.alpha = Malloc(double , z);
result.index = Malloc(int ,z);
result.sv = Malloc(double * ,z);
result.rho = alpha[num];
z=0;
for(i=0;i<num;i++)
{
if(alpha[i]!=0)
{
result.alpha[z]=alpha[i];
result.index[z]=i;
result.sv[z] = Malloc(double , LENGTH);
for(j=0;j<LENGTH;j++)
{result.sv[z][j]=data[i][j];}
z++;
}
}
result.total_sv = z;
free(prob.y);
free(prob.x);
free(x_space);
free(alpha);
return result;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -