Skip to content

Commit

Permalink
DualLibQPBMSOSVM get_result method added + libbmrm update
Browse files Browse the repository at this point in the history
  • Loading branch information
uricamic committed Jul 4, 2012
1 parent 56632ab commit 5fa61fc
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 5 deletions.
5 changes: 2 additions & 3 deletions src/shogun/structure/DualLibQPBMSOSVM.cpp
Expand Up @@ -9,7 +9,6 @@
*/

#include <shogun/structure/DualLibQPBMSOSVM.h>
#include <shogun/structure/libbmrm.h>

using namespace shogun;

Expand Down Expand Up @@ -57,10 +56,10 @@ bool CDualLibQPBMSOSVM::train_machine(CFeatures* data)
bmrm_data.w_dim=nDim;

// call the BMRM solver
bmrm_return_value_T result = svm_bmrm_solver(&bmrm_data, m_w.vector, m_TolRel, m_TolAbs, m_lambda,
m_bmrm_result = svm_bmrm_solver(&bmrm_data, m_w.vector, m_TolRel, m_TolAbs, m_lambda,
m_BufSize, m_cleanICP, m_cleanAfter, m_K, m_Tmax, m_risk_function);

if (result.exitflag==1)
if (m_bmrm_result.exitflag==1)
{
return true;
} else {
Expand Down
7 changes: 7 additions & 0 deletions src/shogun/structure/DualLibQPBMSOSVM.h
Expand Up @@ -13,6 +13,7 @@

#include <shogun/machine/LinearStructuredOutputMachine.h>
#include <shogun/structure/RiskFunction.h>
#include <shogun/structure/libbmrm.h>

namespace shogun
{
Expand Down Expand Up @@ -79,6 +80,9 @@ class CDualLibQPBMSOSVM : public CLinearStructuredOutputMachine
/** get Tmax */
inline uint32_t get_Tmax() { return m_Tmax; }

/** get bmrm result */
inline bmrm_return_value_T get_bmrm_result() { return m_bmrm_result; }

protected:
/** train dual SO-SVM
*
Expand Down Expand Up @@ -114,6 +118,9 @@ class CDualLibQPBMSOSVM : public CLinearStructuredOutputMachine
/** Risk function */
CRiskFunction* m_risk_function;

/** BMRM result */
bmrm_return_value_T m_bmrm_result;

}; /* class CDualLibQPBMSOSVM */

} /* namespace shogun */
Expand Down
13 changes: 11 additions & 2 deletions src/shogun/structure/libbmrm.cpp
Expand Up @@ -180,7 +180,7 @@ bmrm_return_value_T svm_bmrm_solver(
tstop=ttime.cur_time_diff(false);

/* Verbose output */
SG_SPRINT("%4d: tim=%.3f, Fp=%f, Fd=%f, R=%f\n",
SG_SPRINT("%4d: tim=%.3lf, Fp=%lf, Fd=%lf, R=%lf\n",
bmrm.nIter, tstop-tstart, bmrm.Fp, bmrm.Fd, R);

/* main loop */
Expand Down Expand Up @@ -268,7 +268,7 @@ bmrm_return_value_T svm_bmrm_solver(
tstop=ttime.cur_time_diff(false);

/* Verbose output */
SG_SPRINT("%4d: tim=%.3f, Fp=%f, Fd=%f, (Fp-Fd)=%f, (Fp-Fd)/Fp=%f, R=%f, nCP=%d, nzA=%d\n",
SG_SPRINT("%4d: tim=%.3lf, Fp=%lf, Fd=%lf, (Fp-Fd)=%lf, (Fp-Fd)/Fp=%lf, R=%lf, nCP=%d, nzA=%d\n",
bmrm.nIter, tstop-tstart, bmrm.Fp, bmrm.Fd, bmrm.Fp-bmrm.Fd, (bmrm.Fp-bmrm.Fd)/bmrm.Fp, R, bmrm.nCP, bmrm.nzA);

/* Check size of Buffer */
Expand Down Expand Up @@ -369,11 +369,20 @@ bmrm_return_value_T svm_bmrm_solver(
LIBBMRM_FREE(b);
LIBBMRM_FREE(beta);
LIBBMRM_FREE(A);
LIBBMRM_FREE(subgrad);
LIBBMRM_FREE(diag_H);
LIBBMRM_FREE(I);
LIBBMRM_FREE(ICPcounter);
LIBBMRM_FREE(ICPs);

LIBBMRM_FREE(H2);
LIBBMRM_FREE(b2);
LIBBMRM_FREE(beta2);
LIBBMRM_FREE(A2);
LIBBMRM_FREE(diag_H2);
LIBBMRM_FREE(I2);
LIBBMRM_FREE(ICPcounter2);

return(bmrm);
}
}
2 changes: 2 additions & 0 deletions src/shogun/structure/libbmrm.h
Expand Up @@ -27,6 +27,7 @@

namespace shogun
{
/* BMRM result */
typedef struct {
uint32_t nIter; /* number of iterations */
uint32_t nCP; /* number of cutting planes */
Expand All @@ -40,6 +41,7 @@ namespace shogun
-2 .. not enough memory for the solver */
} bmrm_return_value_T;

/* BMRM input data */
typedef struct {
void* X; /* features */
void* y; /* labels */
Expand Down

0 comments on commit 5fa61fc

Please sign in to comment.