| 224 | // ---------------------------------------------------------------------------------------- |
| 225 | |
| 226 | void dotest_sparse_vectors() |
| 227 | { |
| 228 | print_spinner(); |
| 229 | dlog << LINFO << "in dotest_sparse_vectors()"; |
| 230 | |
| 231 | typedef std::map<unsigned long,double> sample_type; |
| 232 | |
| 233 | typedef sparse_linear_kernel<sample_type> kernel_type; |
| 234 | |
| 235 | svm_rank_trainer<kernel_type> trainer; |
| 236 | |
| 237 | |
| 238 | std::vector<ranking_pair<sample_type> > samples; |
| 239 | |
| 240 | ranking_pair<sample_type> p; |
| 241 | sample_type samp; |
| 242 | |
| 243 | samp[3] = 1; p.relevant.push_back(samp); samp.clear(); |
| 244 | samp[0] = 1; p.nonrelevant.push_back(samp); samp.clear(); |
| 245 | samples.push_back(p); |
| 246 | |
| 247 | samp[2] = 1; p.relevant.push_back(samp); samp.clear(); |
| 248 | samp[0] = 1; p.nonrelevant.push_back(samp); samp.clear(); |
| 249 | samp[1] = 1; p.nonrelevant.push_back(samp); samp.clear(); |
| 250 | samp[1] = 1; p.nonrelevant.push_back(samp); samp.clear(); |
| 251 | samples.push_back(p); |
| 252 | |
| 253 | |
| 254 | trainer.set_c(10); |
| 255 | |
| 256 | decision_function<kernel_type> df = trainer.train(samples); |
| 257 | |
| 258 | matrix<double,1,2> res; |
| 259 | res = 1,1; |
| 260 | |
| 261 | dlog << LINFO << "accuracy: "<< test_ranking_function(df, samples); |
| 262 | DLIB_TEST(equal(test_ranking_function(df, samples), res)); |
| 263 | |
| 264 | DLIB_TEST(equal(test_ranking_function(trainer.train(samples[1]), samples), res)); |
| 265 | |
| 266 | trainer.set_epsilon(1e-13); |
| 267 | df = trainer.train(samples); |
| 268 | |
| 269 | dlog << LINFO << sparse_to_dense(df.basis_vectors(0)); |
| 270 | sample_type truew; |
| 271 | truew[0] = -0.5; |
| 272 | truew[1] = -0.5; |
| 273 | truew[2] = 0.5; |
| 274 | truew[3] = 0.5; |
| 275 | DLIB_TEST(length(subtract(truew , df.basis_vectors(0))) < 1e-10); |
| 276 | |
| 277 | dlog << LINFO << "accuracy: "<< test_ranking_function(df, samples); |
| 278 | DLIB_TEST(equal(test_ranking_function(df, samples), res)); |
| 279 | |
| 280 | dlog << LINFO << "cv-accuracy: "<< cross_validate_ranking_trainer(trainer, samples,2); |
| 281 | DLIB_TEST(std::abs(cross_validate_ranking_trainer(trainer, samples,2)(0) - 0.7777777778) < 0.0001); |
| 282 | |
| 283 | trainer.set_learns_nonnegative_weights(true); |
no test coverage detected