From f77a4937a5f09d1f49a114ada70b9e11be44b1d6 Mon Sep 17 00:00:00 2001 From: Joe Zhao Date: Sun, 31 May 2015 15:10:15 +0800 Subject: misc --- model/rankaccu.cpp | 3 +-- model/ranksvm.cpp | 10 +++++----- model/ranksvmtn.cpp | 24 +++++++++++++++--------- train.cpp | 2 +- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/model/rankaccu.cpp b/model/rankaccu.cpp index fc5b7b7..8404abf 100644 --- a/model/rankaccu.cpp +++ b/model/rankaccu.cpp @@ -108,12 +108,11 @@ void rank_accu(RidList &D,const vector pred) void rank_CMC(RidList &D,const std::vector pred,CMC & cmc) { unsigned long n = D.getSize(); - vector orig_rank(n),pred_rank(n); + vector pred_rank(n); vector orig(n); int i,j; for (i=0;i &rank,const VectorXd &corr,const VectorX tmp(i) = alpha(i)*Ds(i)-gamma(i); VectorXd res = VectorXd::Zero(D.getfSize()); cal_Dtw(D,tmp,res); - Hs = s + C*res; + Hs = s + RC*res; return 0; } @@ -188,7 +190,7 @@ int line_search(const VectorXd &w,RidList &D,const VectorXd &corr,const VectorXd VectorXd tmp = alpha.cwiseProduct(yt)-beta; VectorXd res = VectorXd::Zero(D.getfSize()); cal_Dtw(D,tmp,res); - grad = grad + C*res; + grad = grad + RC*res; g = grad.dot(step); cal_Hs(D,rank,corr,alpha,step,Hs); h = Hs.dot(step); @@ -216,7 +218,7 @@ int train_orig(int fsize, RidList &Data,const VectorXd &corr,VectorXd &weight){ VectorXd grad(fsize); VectorXd step(fsize); vector rank(n); - double obj,t; + double obj,t,l; VectorXd dw(n); VectorXd yt; @@ -227,11 +229,12 @@ int train_orig(int fsize, RidList &Data,const VectorXd &corr,VectorXd &weight){ cal_Dw(Data,weight,dw); cal_alpha_beta(dw,corr,Data,rank,yt,alpha,beta); // Generate support vector matrix sv & gradient - obj = (weight.dot(weight) + C*(alpha.dot(yt.cwiseProduct(yt))-beta.dot(yt)))/2; + l=alpha.dot(yt.cwiseProduct(yt))-beta.dot(yt); + obj = (weight.dot(weight) + RC*l)/2; VectorXd tmp = alpha.cwiseProduct(yt)-beta; VectorXd res = VectorXd::Zero(fsize); cal_Dtw(Data,tmp,res); - grad = weight + C*res; + grad = weight + RC*res; // Solve cg_solve(Data,rank,corr,alpha,grad,step); // do line search @@ -240,7 +243,7 @@ int train_orig(int fsize, RidList &Data,const VectorXd &corr,VectorXd &weight){ // When dec is small enough double nprec = step.dot(grad)/obj; ++iter; - LOG(INFO)<<"Iter: "<= maxiter) { LOG(INFO)<< "Maxiter reached"; @@ -254,11 +257,11 @@ int train_orig(int fsize, RidList &Data,const VectorXd &corr,VectorXd &weight){ int RSVMTN::train(RidList &D){ VectorXd corr(D.getSize()); - vector A1,A2; - int i,j; + int i; LOG(INFO)<<"Processing input"; for (i=0;i0?0.5:-0.5; + RC=2.0*C; train_orig(fsize,D,corr,model.weight); return 0; }; @@ -267,6 +270,9 @@ int RSVMTN::predict(RidList &D, vector &res){ res.clear(); int n = D.getSize(); for (int i=0;itrain(D); -- cgit v1.2.3-70-g09d2