14 #include <shogun/lib/external/libqp.h>
18 static int32_t kmm_K_ld = 0;
20 static const float64_t* kmm_get_col(uint32_t i)
22 return kmm_K + kmm_K_ld*i;
27 CKernelMeanMatching::CKernelMeanMatching() :
28 CSGObject(), m_kernel(NULL)
32 CKernelMeanMatching::CKernelMeanMatching(CKernel* kernel, SGVector<index_t> training_indices,
33 SGVector<index_t> test_indices) :
34 CSGObject(), m_kernel(NULL)
37 set_training_indices(training_indices);
38 set_test_indices(test_indices);
41 SGVector<float64_t> CKernelMeanMatching::compute_weights()
45 ASSERT(m_training_indices.vlen)
46 ASSERT(m_test_indices.vlen)
48 int32_t n_tr = m_training_indices.vlen;
49 int32_t n_te = m_test_indices.vlen;
56 float64_t* diag_K = SG_MALLOC(float64_t, n_tr);
57 for (i=0; i<n_tr; i++)
59 float64_t d = m_kernel->kernel(m_training_indices[i], m_training_indices[i]);
62 for (j=i+1; j<n_tr; j++)
64 d = m_kernel->kernel(m_training_indices[i],m_training_indices[j]);
69 float64_t* kappa = SG_MALLOC(float64_t, n_tr);
70 for (i=0; i<n_tr; i++)
73 for (j=0; j<n_te; j++)
74 avg+= m_kernel->kernel(m_training_indices[i],m_test_indices[j]);
79 float64_t* a = SG_MALLOC(float64_t, n_tr);
80 for (i=0; i<n_tr; i++) a[i] = 1.0;
81 float64_t* LB = SG_MALLOC(float64_t, n_tr);
82 float64_t* UB = SG_MALLOC(float64_t, n_tr);
84 for (i=0; i<n_tr; i++)
89 for (i=0; i<n_tr; i++)
92 libqp_state_T result =
93 libqp_gsmo_solver(&kmm_get_col,diag_K,kappa,a,1.0,LB,UB,weights,n_tr,1000,1e-9,NULL);
95 SG_DEBUG(
"libqp exitflag=%d, %d iterations passed, primal objective=%f\n",
96 result.exitflag,result.nIter,result.QP);
109 #endif //USE_GPL_SHOGUN
all of classes and functions are contained in the shogun namespace
void set_kernel(CKernel *k)