DAGSVM实现思路(以前工作总结)
(2008-05-02 21:57:53)
标签:
dagsvm
it
int l = model->l;\\支持向量的个数
double *kvalue = Malloc(double,l);
for(i=0;i
kvalue[i] = Kernel::k_function(x,model->SV[i],model->param);// 函数
int *start = Malloc(int,nr_class);//类别数
start[0] = 0;
for(i=1;i
start[i] = start[i-1]+model->nSV[i-1];//每个类别的支持向量数
i = 0;
int j = nr_class - 1;
while (i < j)
{
double sum = 0;
int si = start[i];
int sj = start[j];
int ci = model->nSV[i];
int cj = model->nSV[j];
int k;
double *coef1 = model->sv_coef[j-1];//相当于alpha
double *coef2 = model->sv_coef[i];
for(k=0;k
sum += coef1[si+k] * kvalue[si+k];
for(k=0;k
sum += coef2[sj+k] * kvalue[sj+k];
sum -= model->rho[i*(nr_class - 1) - //rho可以理解为b,这里是以i为中心的.
i*(i + 1)/2 + j - 1];//没反应过来,后来想了想把这个当成 结构的
//的话就比较容易理解了.还是数据结构没学好,没反应过来.相当于n*n的矩阵中的aij. 为取到i的话说明
//i前面的类已经被pass掉了.所以才有相减一说
if(sum > 0)//这个意思是说如果wx-b>0也就是说偏向i,那么非j,沿着j的 往下走.
j--;
else
i++;
}
free(kvalue);
free(start);
return model->label[i];
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。