jubatus_core  0.1.2
Jubatus: Online machine learning framework for distributed environment
Classes | Public Member Functions | Private Attributes | List of all members
jubatus::core::unlearner::random_unlearner Class Reference

#include <random_unlearner.hpp>

Inheritance diagram for jubatus::core::unlearner::random_unlearner:
Inheritance graph
Collaboration diagram for jubatus::core::unlearner::random_unlearner:
Collaboration graph

Classes

struct  config
 

Public Member Functions

bool can_touch (const std::string &id)
 
void clear ()
 
bool exists_in_memory (const std::string &id) const
 
 random_unlearner (const config &conf)
 
bool remove (const std::string &id)
 
bool touch (const std::string &id)
 
std::string type () const
 
- Public Member Functions inherited from jubatus::core::unlearner::unlearner_base
void set_callback (const unlearning_callback &callback)
 
virtual ~unlearner_base ()
 

Private Attributes

jubatus::util::data::unordered_map< std::string, size_t > id_map_
 
std::vector< std::string > ids_
 
size_t max_size_
 
jubatus::util::math::random::mtrand mtr_
 

Additional Inherited Members

- Protected Member Functions inherited from jubatus::core::unlearner::unlearner_base
void unlearn (const std::string &id) const
 

Detailed Description

Definition at line 33 of file random_unlearner.hpp.

Constructor & Destructor Documentation

jubatus::core::unlearner::random_unlearner::random_unlearner ( const config conf)
explicit

Definition at line 27 of file random_unlearner.cpp.

References id_map_, ids_, JUBATUS_EXCEPTION, jubatus::core::unlearner::random_unlearner::config::max_size, max_size_, mtr_, and jubatus::core::unlearner::random_unlearner::config::seed.

28  : max_size_(conf.max_size) {
29  if (conf.max_size <= 0) {
30  throw JUBATUS_EXCEPTION(
31  common::config_exception() << common::exception::error_message(
32  "max_size must be a positive integer"));
33  }
34  if (conf.seed) {
35  if (*conf.seed < 0 || std::numeric_limits<uint32_t>::max() < *conf.seed) {
36  throw JUBATUS_EXCEPTION(
37  common::config_exception() << common::exception::error_message(
38  "unlearner seed must be within unsigned 32 bit integer"));
39  }
40  mtr_ = jubatus::util::math::random::mtrand(*conf.seed);
41  }
42  id_map_.reserve(max_size_);
43  ids_.reserve(max_size_);
44 }
jubatus::util::math::random::mtrand mtr_
#define JUBATUS_EXCEPTION(e)
Definition: exception.hpp:79
error_info< struct error_message_, std::string > error_message
Definition: exception.hpp:59
jubatus::util::data::unordered_map< std::string, size_t > id_map_

Member Function Documentation

bool jubatus::core::unlearner::random_unlearner::can_touch ( const std::string &  id)
virtual

Implements jubatus::core::unlearner::unlearner_base.

Definition at line 46 of file random_unlearner.cpp.

46  {
47  return true;
48 }
void jubatus::core::unlearner::random_unlearner::clear ( )
inlinevirtual

Implements jubatus::core::unlearner::unlearner_base.

Definition at line 49 of file random_unlearner.hpp.

References id_map_, and ids_.

49  {
50  id_map_.clear();
51  ids_.clear();
52  }
jubatus::util::data::unordered_map< std::string, size_t > id_map_
bool jubatus::core::unlearner::random_unlearner::exists_in_memory ( const std::string &  id) const
virtual

Implements jubatus::core::unlearner::unlearner_base.

Definition at line 92 of file random_unlearner.cpp.

References id_map_.

92  {
93  return id_map_.count(id) > 0;
94 }
jubatus::util::data::unordered_map< std::string, size_t > id_map_
bool jubatus::core::unlearner::random_unlearner::remove ( const std::string &  id)
virtual

Implements jubatus::core::unlearner::unlearner_base.

Definition at line 73 of file random_unlearner.cpp.

References id_map_, and ids_.

73  {
74  if (id_map_.count(id) == 0) {
75  return false;
76  }
77 
78  const size_t id_pos = id_map_[id];
79  id_map_.erase(id);
80 
81  // Overwrite the ID with the last element to avoid calling erase to vector.
82  const std::string back_id = ids_.back();
83  ids_.pop_back();
84  if (id != back_id) {
85  ids_[id_pos] = back_id;
86  id_map_[back_id] = id_pos;
87  }
88 
89  return true;
90 }
jubatus::util::data::unordered_map< std::string, size_t > id_map_
bool jubatus::core::unlearner::random_unlearner::touch ( const std::string &  id)
virtual

Implements jubatus::core::unlearner::unlearner_base.

Definition at line 50 of file random_unlearner.cpp.

References id_map_, ids_, max_size_, mtr_, and jubatus::core::unlearner::unlearner_base::unlearn().

50  {
51  if (id_map_.count(id) > 0) {
52  return true;
53  }
54 
55  size_t new_id_pos = -1;
56  if (id_map_.size() < max_size_) {
57  // Just add new ID to the ID set.
58  ids_.push_back(id);
59  new_id_pos = ids_.size() - 1;
60  } else {
61  // Need to unlearn the old entry and replace it with new one.
62  new_id_pos = mtr_(id_map_.size());
63  const std::string old_id = ids_[new_id_pos];
64  unlearn(old_id);
65  id_map_.erase(old_id);
66  ids_[new_id_pos] = id;
67  }
68  id_map_.insert(std::make_pair(id, new_id_pos));
69 
70  return true;
71 }
jubatus::util::math::random::mtrand mtr_
void unlearn(const std::string &id) const
jubatus::util::data::unordered_map< std::string, size_t > id_map_

Here is the call graph for this function:

std::string jubatus::core::unlearner::random_unlearner::type ( ) const
inlinevirtual

Implements jubatus::core::unlearner::unlearner_base.

Definition at line 45 of file random_unlearner.hpp.

45  {
46  return "random_unlearner";
47  }

Member Data Documentation

jubatus::util::data::unordered_map<std::string, size_t> jubatus::core::unlearner::random_unlearner::id_map_
private

Map of ID and its position in ids_.

Definition at line 65 of file random_unlearner.hpp.

Referenced by clear(), exists_in_memory(), random_unlearner(), remove(), and touch().

std::vector<std::string> jubatus::core::unlearner::random_unlearner::ids_
private

Unlearner ID set.

Definition at line 70 of file random_unlearner.hpp.

Referenced by clear(), random_unlearner(), remove(), and touch().

size_t jubatus::core::unlearner::random_unlearner::max_size_
private

Maximum size to be hold.

Definition at line 75 of file random_unlearner.hpp.

Referenced by random_unlearner(), and touch().

jubatus::util::math::random::mtrand jubatus::core::unlearner::random_unlearner::mtr_
private

Random number generator.

Definition at line 80 of file random_unlearner.hpp.

Referenced by random_unlearner(), and touch().


The documentation for this class was generated from the following files: