From 4a9b3f837b1e5e6175d2f1d3fa718c7ddffce964 Mon Sep 17 00:00:00 2001 From: Joe Zhao Date: Fri, 15 May 2015 18:21:26 +0800 Subject: misc --- model/ranksvmtn.cpp | 36 ++++++++++++++++++++---------------- tools/dataProvider.h | 8 ++++---- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/model/ranksvmtn.cpp b/model/ranksvmtn.cpp index 81b13ab..3436cce 100644 --- a/model/ranksvmtn.cpp +++ b/model/ranksvmtn.cpp @@ -7,7 +7,7 @@ using namespace std; using namespace Eigen; // Main terminating criteria -const int maxiter = 60; // max iteration count +const int maxiter = 40; // max iteration count const double prec=1e-10; // precision // conjugate gradient const double cg_prec=1e-10; // precision @@ -19,22 +19,24 @@ const double line_turb=1e-15; // purturbation int cal_Hs(RidList &D,const vector &rank,const VectorXd &corr,const VectorXd &alpha,const VectorXd s,VectorXd &Hs) { + int n = D.getSize(); + int q = D.getqSize(); Hs = VectorXd::Zero(s.rows()); - VectorXd Ds(D.getSize()); - for (int i=0;i=0;--j) + for (int j = q-1;j>=0;--j) if (corr[rank[i+j]]>0) gamma[rank[i+j]]=g; else g+=Ds[rank[i+j]]; g=0; - i+=D.getqSize(); - for (int j = D.getqSize();j>0;--j) + i+=q; + for (int j = q;j>0;--j) if (corr[rank[i-j]]<0) gamma[rank[i-j]]=g; else @@ -42,7 +44,7 @@ int cal_Hs(RidList &D,const vector &rank,const VectorXd &corr,const VectorX } VectorXd tmp = alpha.cwiseProduct(Ds)-gamma; VectorXd res = 0*s; - for (int i=0;i &rank,VectorXd &ref) int cal_alpha_beta(const VectorXd &dw,const VectorXd &corr,RidList &D,vector &rank,VectorXd &yt,VectorXd &alpha,VectorXd &beta) { long n = dw.rows(); + int q = D.getqSize(); yt = dw - corr; alpha=VectorXd::Zero(n); beta=VectorXd::Zero(n); for (int i=0;i rank(D.getSize()); + + vector rank(n); int iter = 0; double g,h; @@ -163,7 +167,7 @@ int line_search(const VectorXd &w,RidList &D,const VectorXd &corr,const VectorXd while (1) { grad=w+t*step; - for (int i=0;ifeature; + Eigen::VectorXd vec; if (bfeature; + vec=uniq[a]->feature-uniq[b]->feature; else if (bfeature; + vec=uniq[a]->feature-uniq[b+1]->feature; else - vec=vec-other[b-uniq.size()+1]->feature; + vec=uniq[a]->feature-other[b-uniq.size()+1]->feature; return vec.cwiseAbs(); }; inline double getL(int x){ -- cgit v1.2.3-70-g09d2