资源简介
该程序是svm和模糊的源程序,挺好用的,值得一看哦
代码片段和文件信息
// suanfa.cpp : Defines the entry point for the DLL application.
//
#include
#include
#include
#include
#include
#include “svm.h“
#include “arithmetic.h“
#include
#include se.h>
BOOL APIENTRY DllMain( HANDLE hModule
DWORD ul_reason_for_call
LPVOID lpReserved
)
{
return TRUE;
}
//**************************************************
//LPSTR input_file_name;
//LPSTR model_file_name;
CHAR input_file_name[100];
CHAR model_file_name[100];
//***************************************************
#define Malloc(typen) (type *)malloc((n)*sizeof(type))
void exit_with_help()
{
exit(1);
}
void parse_command_line(char *input_file_name char *model_file_nameint c_s);
void read_problem(const char *filename);
void do_cross_validation(); //交叉验证
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;
static int cross_validation=0;
int nr_fold=5;
double best_C=1best_gamma=1best_accuracy=0;
extern “C“ _declspec(dllexport) void name(LPSTR in_nameLPSTR model_name)
{
//input_file_name=in_name;
//model_file_name=model_name;
strcpy(input_file_name in_name);
strcpy(model_file_name model_name);
}
extern “C“ _declspec(dllexport) int TrainModel(int signal)
{
//初始化c和gamma的起始值,步长和最大值
double begin_C=-4step_C=1end_C=8;
double begin_gamma=-10step_gamma=1end_gamma=0;
const char *error_msg;
parse_command_line(input_file_name model_file_namesignal); //在该步骤中,把signal付给了cross_validation,并做了一些初始化操作
read_problem(input_file_name);
error_msg = svm_check_parameter(&prob¶m);
if(error_msg)
{
fprintf(stderr“Error: %s\n“error_msg);
exit(1);
}
if(cross_validation) //cross_validation是1时代表进行训练,cross_validation是0时代表
{
for(param.C=pow(2begin_C);param.C<=pow(2end_C);param.C*=pow(2step_C))
for(param.gamma=pow(2begin_gamma);param.gamma<=pow(2end_gamma);param.gamma*=pow(2step_gamma))
do_cross_validation();
//c=best_C;g=begin_gamma;
printf(“\n*************\nbest_C = %g\n“best_C);
printf(“best_gamma=%g\n“best_gamma);
printf(“best_accuracy = %g%%\n“best_accuracy);
}
else
{
model = svm_train(&prob¶m);
svm_save_model(model_file_namemodel);
svm_destroy_model(model);
}
svm_destroy_param(¶m);
free(prob.y);
free(prob.x);
free(x_space);
return 0;
}
void do_cross_validation() //对c和gamma的值加以修正
{
int i;
int total_correct = 0;
double total_error = 0;
double sumv = 0 sumy = 0 sumvv = 0 sumyy = 0 sumvy = 0;
double *target = Malloc(doubleprob.l); //分配行数个double个类型的存储单元
double accuracy=0;
svm_cross_validation(&prob¶mnr_foldtarget); //svm的交叉验证
for(i=0;i if(target[i] == prob.y[i])
+
评论
共有 条评论