-
大小: 596KB文件類型: .gz金幣: 1下載: 0 次發(fā)布日期: 2024-02-02
- 語言: 其他
- 標簽: libsvm-3.20??
資源簡介
臺灣林智仁的libsvm工具箱,安裝方法也很簡單,解壓文件,把當前工作目錄調(diào)整到libsvm所在的文件夾下,再在set path里將libsvm所在的文件夾加到里面.
代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?“svm.h“
int?print_null(const?char?*s...)?{return?0;}
static?int?(*info)(const?char?*fmt...)?=?&printf;
struct?svm_node?*x;
int?max_nr_attr?=?64;
struct?svm_model*?model;
int?predict_probability=0;
static?char?*line?=?NULL;
static?int?max_line_len;
static?char*?readline(FILE?*input)
{
int?len;
if(fgets(linemax_line_leninput)?==?NULL)
return?NULL;
while(strrchr(line‘\n‘)?==?NULL)
{
max_line_len?*=?2;
line?=?(char?*)?realloc(linemax_line_len);
len?=?(int)?strlen(line);
if(fgets(line+lenmax_line_len-leninput)?==?NULL)
break;
}
return?line;
}
void?exit_input_error(int?line_num)
{
fprintf(stderr“Wrong?input?format?at?line?%d\n“?line_num);
exit(1);
}
void?predict(FILE?*input?FILE?*output)
{
int?correct?=?0;
int?total?=?0;
double?error?=?0;
double?sump?=?0?sumt?=?0?sumpp?=?0?sumtt?=?0?sumpt?=?0;
int?svm_type=svm_get_svm_type(model);
int?nr_class=svm_get_nr_class(model);
double?*prob_estimates=NULL;
int?j;
if(predict_probability)
{
if?(svm_type==NU_SVR?||?svm_type==EPSILON_SVR)
info(“Prob.?model?for?test?data:?target?value?=?predicted?value?+?z\nz:?Laplace?distribution?e^(-|z|/sigma)/(2sigma)sigma=%g\n“svm_get_svr_probability(model));
else
{
int?*labels=(int?*)?malloc(nr_class*sizeof(int));
svm_get_labels(modellabels);
prob_estimates?=?(double?*)?malloc(nr_class*sizeof(double));
fprintf(output“l(fā)abels“);
for(j=0;j fprintf(output“?%d“l(fā)abels[j]);
fprintf(output“\n“);
free(labels);
}
}
max_line_len?=?1024;
line?=?(char?*)malloc(max_line_len*sizeof(char));
while(readline(input)?!=?NULL)
{
int?i?=?0;
double?target_label?predict_label;
char?*idx?*val?*label?*endptr;
int?inst_max_index?=?-1;?//?strtol?gives?0?if?wrong?format?and?precomputed?kernel?has??start?from?0
label?=?strtok(line“?\t\n“);
if(label?==?NULL)?//?empty?line
exit_input_error(total+1);
target_label?=?strtod(label&endptr);
if(endptr?==?label?||?*endptr?!=?‘\0‘)
exit_input_error(total+1);
while(1)
{
if(i>=max_nr_attr-1) //?need?one?more?for?index?=?-1
{
max_nr_attr?*=?2;
x?=?(struct?svm_node?*)?realloc(xmax_nr_attr*sizeof(struct?svm_node));
}
idx?=?strtok(NULL“:“);
val?=?strtok(NULL“?\t“);
if(val?==?NULL)
break;
errno?=?0;
x[i].index?=?(int)?strtol(idx&endptr10);
if(endptr?==?idx?||?errno?!=?0?||?*endptr?!=?‘\0‘?||?x[i].index?<=?inst_max_index)
exit_input_error(total+1);
else
inst_max_index?=?x[i].index;
errno?=?0;
x[i].value?=?strtod(val&endptr);
if(endptr?==?val?||?errno?!=?0?||?(*endptr?!=?‘\0‘?&&?!isspace(*endptr)))
exit_input_error(total+1);
++i;
}
x[i].index?=?-1;
if?(predict_probability?&&?(svm_type==C_SVC?||?svm_type==NU_SVC))
{
predict_label?=?svm_predict_probability(modelxprob_estimates);
fprintf(output“%g“predict_label);
for
評論
共有 條評論