SHOGUN  v2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
MultitaskROCEvaluation.cpp
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * Copyright (C) 2012 Sergey Lisitsyn
8  */
9 
12 
13 #include <set>
14 #include <vector>
15 
16 using namespace std;
17 using namespace shogun;
18 
19 void CMultitaskROCEvaluation::set_indices(SGVector<index_t> indices)
20 {
21  indices.display_vector("indices");
22  ASSERT(m_task_relation);
23 
24  set<index_t> indices_set;
25  for (int32_t i=0; i<indices.vlen; i++)
26  indices_set.insert(indices[i]);
27 
28  if (m_num_tasks>0)
29  {
30  for (int32_t t=0; t<m_num_tasks; t++)
31  m_tasks_indices[t].~SGVector<index_t>();
32  SG_FREE(m_tasks_indices);
33  }
34  m_num_tasks = m_task_relation->get_num_tasks();
35  m_tasks_indices = SG_MALLOC(SGVector<index_t>, m_num_tasks);
36 
37  SGVector<index_t>* tasks_indices = m_task_relation->get_tasks_indices();
38  for (int32_t t=0; t<m_num_tasks; t++)
39  {
40  new (&m_tasks_indices[t]) SGVector<index_t>();
41  vector<index_t> task_indices_cut;
42  SGVector<index_t> task_indices = tasks_indices[t];
43  //task_indices.display_vector("task indices");
44  for (int32_t i=0; i<task_indices.vlen; i++)
45  {
46  if (indices_set.count(task_indices[i]))
47  {
48  //SG_SPRINT("%d is in %d task\n",task_indices[i],t);
49  task_indices_cut.push_back(task_indices[i]);
50  }
51  }
52 
53  SGVector<index_t> cutted(task_indices_cut.size());
54  for (int32_t i=0; i<cutted.vlen; i++)
55  cutted[i] = task_indices_cut[i];
56  //cutted.display_vector("cutted");
57  m_tasks_indices[t] = cutted;
58  tasks_indices[t].~SGVector<index_t>();
59  }
60  SG_FREE(tasks_indices);
61 }
62 
63 float64_t CMultitaskROCEvaluation::evaluate(CLabels* predicted, CLabels* ground_truth)
64 {
65  //SG_SPRINT("Evaluate\n");
66  predicted->remove_all_subsets();
67  ground_truth->remove_all_subsets();
68  float64_t result = 0.0;
69  for (int32_t t=0; t<m_num_tasks; t++)
70  {
71  //SG_SPRINT("%d task", t);
72  //m_tasks_indices[t].display_vector();
73  predicted->add_subset(m_tasks_indices[t]);
74  ground_truth->add_subset(m_tasks_indices[t]);
75  result += evaluate_roc(predicted,ground_truth)/m_tasks_indices[t].vlen;
76  predicted->remove_subset();
77  ground_truth->remove_subset();
78  }
79  return result;
80 }

SHOGUN Machine Learning Toolbox - Documentation