📄 bsvm_util.c
字号:
#include <sys/times.h>#include <time.h>#include <math.h>#include "bsvm.h"#include "bsvm_util.h"extern kernel_param_t kernel_param;double sparsedot(feature_t *vec1, feature_t *vec2){ /* vec1 dot vec2 */ double ans = 0; feature_t *p1 = vec1, *p2 = vec2; while (p1->num != -1 && p2->num !=-1) { if(p1->num == p2->num) { ans += p1->value*p2->value; p1++; p2++; } else { if(p1->num > p2->num) p2++; else p1++; } } return ans;}double kernel_rbf(sample_t* s1, sample_t* s2){ /* |x - y|^2 = |x|^2 + |y|^2 - 2*(x dot y) */ return exp(-kernel_param.gamma*(s1->twonorm_sq + s2->twonorm_sq - 2*sparsedot(s1->v, s2->v))) + 1; }double kernel_poly(sample_t* s1, sample_t* s2){ return pow(kernel_param.gamma*sparsedot(s1->v, s2->v) + kernel_param.coef0, kernel_param.degree) + 1;}double kernel_linear(sample_t *s1, sample_t *s2){ return sparsedot(s1->v, s2->v) + 1;}double kernel_tanh(sample_t* s1, sample_t* s2){ return tanh(kernel_param.gamma*sparsedot(s1->v, s2->v) + kernel_param.coef0) + 1;}/* return number of samples in dataset */int get_N(FILE *dataset){ char line[MAXLEN]; int i = 0; while (fgets(line, MAXLEN, dataset) != NULL) i++; if (i == 0) myerror("Data set is empty"); rewind(dataset); return i;}void get_nnz(FILE *dataset, int *nnzl){ char line[MAXLEN]; int i, nnz, j; for(i=0;fgets(line, MAXLEN, dataset) != NULL;i++) { /* number of nonzero element in this sparse vector */ for(nnz=0,j=0;line[j];j++) if (line[j] == ':') nnz++; nnzl[i] = nnz; } rewind(dataset);}double get_utime(){ struct tms buffer; times(&buffer); return ((double) ((int) buffer.tms_utime)/CLK_TCK);}void myerror(char *errormsg){ fprintf(stderr, "%s.\n", errormsg); exit(1);}void *xmalloc(size_t size){ void *ptr = (void *) malloc(size); if (!ptr) myerror("Out of memory"); return ptr;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -