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

📄 training.cpp

📁 支持向量机是一种专门用于样本分类的算法,本程序用VC++实现了SVM算法
💻 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,&param);
	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 + -