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

#include <euclid_lsh.hpp>

Inheritance diagram for jubatus::core::recommender::euclid_lsh:
Inheritance graph
Collaboration diagram for jubatus::core::recommender::euclid_lsh:
Collaboration graph

Classes

struct  config
 

Public Member Functions

virtual void clear ()
 
virtual void clear_row (const std::string &id)
 
 euclid_lsh ()
 
 euclid_lsh (const config &config)
 
virtual void get_all_row_ids (std::vector< std::string > &ids) const
 
framework::mixableget_mixable () const
 
virtual void neighbor_row (const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
 
virtual void neighbor_row (const std::string &id, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
 
void pack (framework::packer &packer) const
 
virtual void similar_row (const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
 
virtual void similar_row (const std::string &id, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
 
virtual std::string type () const
 
void unpack (msgpack::object o)
 
virtual void update_row (const std::string &id, const sfv_diff_t &diff)
 
 ~euclid_lsh ()
 
- Public Member Functions inherited from jubatus::core::recommender::recommender_base
void complete_row (const std::string &id, common::sfv_t &ret) const
 
void complete_row (const common::sfv_t &query, common::sfv_t &ret) const
 
void decode_row (const std::string &id, common::sfv_t &ret) const
 
virtual const core::storage::recommender_storage_baseget_const_storage () const
 
virtual jubatus::util::lang::shared_ptr< const storage::column_tableget_const_table () const
 
virtual jubatus::util::lang::shared_ptr< storage::column_tableget_table ()
 
virtual jubatus::util::lang::shared_ptr< unlearner::unlearner_baseget_unlearner ()
 
 recommender_base ()
 
virtual ~recommender_base ()
 
- Public Member Functions inherited from jubatus::core::framework::model
virtual ~model ()
 

Static Public Attributes

static const float DEFAULT_BIN_WIDTH = 100
 
static const uint64_t DEFAULT_HASH_NUM = 64
 
static const uint32_t DEFAULT_NUM_PROBE = 64
 
static const bool DEFAULT_RETAIN_PROJECTION = false
 
static const uint32_t DEFAULT_SEED = 1091
 
static const uint64_t DEFAULT_TABLE_NUM = 4
 

Private Member Functions

std::vector< float > calculate_lsh (const common::sfv_t &query) const
 
std::vector< float > get_projection (uint32_t seed) const
 
void initialize_model ()
 

Private Attributes

float bin_width_
 
jubatus::util::concurrent::mutex cache_lock_
 
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storagemixable_storage_
 
uint32_t num_probe_
 
jubatus::util::data::unordered_map< uint32_t, std::vector< float > > projection_cache_
 
bool retain_projection_
 

Additional Inherited Members

- Static Public Member Functions inherited from jubatus::core::recommender::recommender_base
static float calc_l2norm (const common::sfv_t &query)
 
static float calc_similality (common::sfv_t &q1, common::sfv_t &q2)
 
- Protected Attributes inherited from jubatus::core::recommender::recommender_base
core::storage::sparse_matrix_storage orig_
 
- Static Protected Attributes inherited from jubatus::core::recommender::recommender_base
static const uint64_t complete_row_similar_num_ = 128
 

Detailed Description

Definition at line 47 of file euclid_lsh.hpp.

Constructor & Destructor Documentation

jubatus::core::recommender::euclid_lsh::euclid_lsh ( )

Definition at line 93 of file euclid_lsh.cpp.

97  DEFAULT_SEED)))),
101 }
storage::lsh_index_storage lsh_index_storage
Definition: euclid_lsh.cpp:91
framework::linear_mixable_helper< lsh_index_storage, lsh_master_table_t > mixable_lsh_index_storage
Definition: euclid_lsh.hpp:43
static const uint64_t DEFAULT_TABLE_NUM
Definition: euclid_lsh.hpp:53
static const uint64_t DEFAULT_HASH_NUM
Definition: euclid_lsh.hpp:52
static const uint32_t DEFAULT_SEED
Definition: euclid_lsh.hpp:56
static const bool DEFAULT_RETAIN_PROJECTION
Definition: euclid_lsh.hpp:57
static const uint32_t DEFAULT_NUM_PROBE
Definition: euclid_lsh.hpp:55
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122
storage::mixable_lsh_index_storage::model_ptr model_ptr
Definition: euclid_lsh.cpp:90
jubatus::core::recommender::euclid_lsh::euclid_lsh ( const config config)
explicit

Definition at line 103 of file euclid_lsh.cpp.

References jubatus::core::recommender::euclid_lsh::config::bin_width, jubatus::core::recommender::euclid_lsh::config::hash_num, JUBATUS_EXCEPTION, mixable_storage_, jubatus::core::recommender::euclid_lsh::config::probe_num, jubatus::core::recommender::euclid_lsh::config::seed, and jubatus::core::recommender::euclid_lsh::config::table_num.

104  : mixable_storage_(),
105  bin_width_(config.bin_width),
106  num_probe_(config.probe_num),
107  retain_projection_(config.retain_projection) {
108 
109  if (!(1 <= config.hash_num)) {
110  throw JUBATUS_EXCEPTION(
111  common::invalid_parameter("1 <= hash_num"));
112  }
113 
114  if (!(1 <= config.table_num)) {
115  throw JUBATUS_EXCEPTION(
116  common::invalid_parameter("1 <= table_num"));
117  }
118 
119  if (!(0.f < config.bin_width)) {
120  throw JUBATUS_EXCEPTION(
121  common::invalid_parameter("0.0 < bin_width"));
122  }
123 
124  if (!(0 <= config.probe_num)) {
125  throw JUBATUS_EXCEPTION(
126  common::invalid_parameter("0 <= probe_num"));
127  }
128 
129  if (!(0 <= config.seed)) {
130  throw JUBATUS_EXCEPTION(
131  common::invalid_parameter("0 <= seed"));
132  }
133 
134  typedef storage::mixable_lsh_index_storage mli_storage;
136  typedef storage::lsh_index_storage li_storage;
137 
138  model_ptr p(new li_storage(config.hash_num, config.table_num, config.seed));
139  mixable_storage_.reset(new mli_storage(p));
140 }
storage::lsh_index_storage lsh_index_storage
Definition: euclid_lsh.cpp:91
framework::linear_mixable_helper< lsh_index_storage, lsh_master_table_t > mixable_lsh_index_storage
Definition: euclid_lsh.hpp:43
#define JUBATUS_EXCEPTION(e)
Definition: exception.hpp:79
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122
storage::mixable_lsh_index_storage::model_ptr model_ptr
Definition: euclid_lsh.cpp:90
jubatus::core::recommender::euclid_lsh::~euclid_lsh ( )

Definition at line 142 of file euclid_lsh.cpp.

142  {
143 }

Member Function Documentation

vector< float > jubatus::core::recommender::euclid_lsh::calculate_lsh ( const common::sfv_t query) const
private

Definition at line 222 of file euclid_lsh.cpp.

References bin_width_, jubatus::core::common::hash_util::calc_string_hash(), get_projection(), and mixable_storage_.

Referenced by update_row().

222  {
223  vector<float> hash(mixable_storage_->get_model()->all_lsh_num());
224  for (size_t i = 0; i < query.size(); ++i) {
225  const uint32_t seed = common::hash_util::calc_string_hash(query[i].first);
226  const vector<float> proj = get_projection(seed);
227  for (size_t j = 0; j < hash.size(); ++j) {
228  hash[j] += query[i].second * proj[j];
229  }
230  }
231  for (size_t j = 0; j < hash.size(); ++j) {
232  hash[j] /= bin_width_;
233  }
234  return hash;
235 }
std::vector< float > get_projection(uint32_t seed) const
Definition: euclid_lsh.cpp:237
static uint64_t calc_string_hash(const std::string &s)
Definition: hash.hpp:29
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122

Here is the call graph for this function:

Here is the caller graph for this function:

void jubatus::core::recommender::euclid_lsh::clear ( )
virtual

Implements jubatus::core::recommender::recommender_base.

Definition at line 185 of file euclid_lsh.cpp.

References jubatus::core::storage::sparse_matrix_storage::clear(), mixable_storage_, jubatus::core::recommender::recommender_base::orig_, projection_cache_, and jubatus::core::clustering::swap().

185  {
186  orig_.clear();
187  mixable_storage_->get_model()->clear();
188 
189  // Clear projection cache
190  jubatus::util::data::unordered_map<uint32_t, std::vector<float> >()
192 }
jubatus::util::data::unordered_map< uint32_t, std::vector< float > > projection_cache_
Definition: euclid_lsh.hpp:127
void swap(weighted_point &p1, weighted_point &p2)
Definition: types.hpp:47
core::storage::sparse_matrix_storage orig_
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122

Here is the call graph for this function:

void jubatus::core::recommender::euclid_lsh::clear_row ( const std::string &  id)
virtual

Implements jubatus::core::recommender::recommender_base.

Definition at line 194 of file euclid_lsh.cpp.

References mixable_storage_, jubatus::core::recommender::recommender_base::orig_, and jubatus::core::storage::sparse_matrix_storage::remove_row().

194  {
195  orig_.remove_row(id);
196  mixable_storage_->get_model()->remove_row(id);
197 }
core::storage::sparse_matrix_storage orig_
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122

Here is the call graph for this function:

void jubatus::core::recommender::euclid_lsh::get_all_row_ids ( std::vector< std::string > &  ids) const
virtual

Implements jubatus::core::recommender::recommender_base.

Definition at line 210 of file euclid_lsh.cpp.

References mixable_storage_.

210  {
211  mixable_storage_->get_model()->get_all_row_ids(ids);
212 }
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122
framework::mixable * jubatus::core::recommender::euclid_lsh::get_mixable ( ) const
virtual

Implements jubatus::core::recommender::recommender_base.

Definition at line 218 of file euclid_lsh.cpp.

References mixable_storage_.

218  {
219  return mixable_storage_.get();
220 }
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122
vector< float > jubatus::core::recommender::euclid_lsh::get_projection ( uint32_t  seed) const
private

Definition at line 237 of file euclid_lsh.cpp.

References cache_lock_, mixable_storage_, projection_cache_, and retain_projection_.

Referenced by calculate_lsh().

237  {
238  if (retain_projection_) {
239  scoped_lock lk(cache_lock_); // lock is needed only retain_projection
240  vector<float>& proj = projection_cache_[seed];
241  if (!proj.empty()) {
242  return proj;
243  }
244  calc_projection(seed, mixable_storage_->get_model()->all_lsh_num(), proj);
245  return proj;
246  } else {
247  vector<float> proj;
248  calc_projection(seed, mixable_storage_->get_model()->all_lsh_num(), proj);
249  return proj;
250  }
251 }
jubatus::util::data::unordered_map< uint32_t, std::vector< float > > projection_cache_
Definition: euclid_lsh.hpp:127
jubatus::util::concurrent::mutex cache_lock_
Definition: euclid_lsh.hpp:128
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122

Here is the caller graph for this function:

void jubatus::core::recommender::euclid_lsh::initialize_model ( )
private

Definition at line 253 of file euclid_lsh.cpp.

References mixable_storage_.

253  {
255  model_ptr p(new storage::lsh_index_storage);
257 }
storage::lsh_index_storage lsh_index_storage
Definition: euclid_lsh.cpp:91
framework::linear_mixable_helper< lsh_index_storage, lsh_master_table_t > mixable_lsh_index_storage
Definition: euclid_lsh.hpp:43
jubatus::util::lang::shared_ptr< Model > model_ptr
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122
storage::mixable_lsh_index_storage::model_ptr model_ptr
Definition: euclid_lsh.cpp:90
virtual void jubatus::core::recommender::euclid_lsh::neighbor_row ( const common::sfv_t query,
std::vector< std::pair< std::string, float > > &  ids,
size_t  ret_num 
) const
virtual
virtual void jubatus::core::recommender::euclid_lsh::neighbor_row ( const std::string &  id,
std::vector< std::pair< std::string, float > > &  ids,
size_t  ret_num 
) const
virtual
void jubatus::core::recommender::euclid_lsh::pack ( framework::packer packer) const
virtual

Implements jubatus::core::framework::model.

Definition at line 259 of file euclid_lsh.cpp.

References mixable_storage_, jubatus::core::recommender::recommender_base::orig_, and jubatus::core::storage::sparse_matrix_storage::pack().

259  {
260  packer.pack_array(2);
261  orig_.pack(packer);
262  mixable_storage_->get_model()->pack(packer);
263 }
void pack(framework::packer &packer) const
msgpack::packer< jubatus_packer > packer
Definition: bandit_base.hpp:31
core::storage::sparse_matrix_storage orig_
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122

Here is the call graph for this function:

virtual void jubatus::core::recommender::euclid_lsh::similar_row ( const common::sfv_t query,
std::vector< std::pair< std::string, float > > &  ids,
size_t  ret_num 
) const
virtual
virtual void jubatus::core::recommender::euclid_lsh::similar_row ( const std::string &  id,
std::vector< std::pair< std::string, float > > &  ids,
size_t  ret_num 
) const
virtual
string jubatus::core::recommender::euclid_lsh::type ( ) const
virtual

Implements jubatus::core::recommender::recommender_base.

Definition at line 214 of file euclid_lsh.cpp.

214  {
215  return "euclid_lsh";
216 }
void jubatus::core::recommender::euclid_lsh::unpack ( msgpack::object  o)
virtual

Implements jubatus::core::framework::model.

Definition at line 265 of file euclid_lsh.cpp.

References mixable_storage_, jubatus::core::recommender::recommender_base::orig_, and jubatus::core::storage::sparse_matrix_storage::unpack().

265  {
266  if (o.type != msgpack::type::ARRAY || o.via.array.size != 2) {
267  throw msgpack::type_error();
268  }
269  orig_.unpack(o.via.array.ptr[0]);
270  mixable_storage_->get_model()->unpack(o.via.array.ptr[1]);
271 }
core::storage::sparse_matrix_storage orig_
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122

Here is the call graph for this function:

void jubatus::core::recommender::euclid_lsh::update_row ( const std::string &  id,
const sfv_diff_t diff 
)
virtual

Implements jubatus::core::recommender::recommender_base.

Definition at line 199 of file euclid_lsh.cpp.

References calculate_lsh(), jubatus::core::storage::sparse_matrix_storage::get_row(), mixable_storage_, jubatus::core::recommender::recommender_base::orig_, jubatus::core::storage::sparse_matrix_storage::set_row(), and jubatus::core::storage::lsh_index_storage::set_row().

199  {
200  storage::lsh_index_storage& lsh_index = *mixable_storage_->get_model();
201  orig_.set_row(id, diff);
202  common::sfv_t row;
203  orig_.get_row(id, row);
204 
205  const vector<float> hash = calculate_lsh(row);
206  const float norm = calc_norm(row);
207  lsh_index.set_row(id, hash, norm);
208 }
storage::lsh_index_storage lsh_index_storage
Definition: euclid_lsh.cpp:91
void get_row(const std::string &row, std::vector< std::pair< std::string, float > > &columns) const
core::storage::sparse_matrix_storage orig_
std::vector< std::pair< std::string, float > > sfv_t
Definition: type.hpp:29
std::vector< float > calculate_lsh(const common::sfv_t &query) const
Definition: euclid_lsh.cpp:222
void set_row(const std::string &row, const std::vector< std::pair< std::string, float > > &columns)
jubatus::util::lang::shared_ptr< storage::mixable_lsh_index_storage > mixable_storage_
Definition: euclid_lsh.hpp:122

Here is the call graph for this function:

Member Data Documentation

float jubatus::core::recommender::euclid_lsh::bin_width_
private

Definition at line 123 of file euclid_lsh.hpp.

Referenced by calculate_lsh().

jubatus::util::concurrent::mutex jubatus::core::recommender::euclid_lsh::cache_lock_
mutableprivate

Definition at line 128 of file euclid_lsh.hpp.

Referenced by get_projection().

const float jubatus::core::recommender::euclid_lsh::DEFAULT_BIN_WIDTH = 100
static

Definition at line 54 of file euclid_lsh.hpp.

const uint64_t jubatus::core::recommender::euclid_lsh::DEFAULT_HASH_NUM = 64
static

Definition at line 52 of file euclid_lsh.hpp.

const uint32_t jubatus::core::recommender::euclid_lsh::DEFAULT_NUM_PROBE = 64
static

Definition at line 55 of file euclid_lsh.hpp.

const bool jubatus::core::recommender::euclid_lsh::DEFAULT_RETAIN_PROJECTION = false
static

Definition at line 57 of file euclid_lsh.hpp.

const uint32_t jubatus::core::recommender::euclid_lsh::DEFAULT_SEED = 1091
static

Definition at line 56 of file euclid_lsh.hpp.

const uint64_t jubatus::core::recommender::euclid_lsh::DEFAULT_TABLE_NUM = 4
static

Definition at line 53 of file euclid_lsh.hpp.

jubatus::util::lang::shared_ptr<storage::mixable_lsh_index_storage> jubatus::core::recommender::euclid_lsh::mixable_storage_
private
uint32_t jubatus::core::recommender::euclid_lsh::num_probe_
private

Definition at line 124 of file euclid_lsh.hpp.

jubatus::util::data::unordered_map<uint32_t, std::vector<float> > jubatus::core::recommender::euclid_lsh::projection_cache_
mutableprivate

Definition at line 127 of file euclid_lsh.hpp.

Referenced by clear(), and get_projection().

bool jubatus::core::recommender::euclid_lsh::retain_projection_
private

Definition at line 129 of file euclid_lsh.hpp.

Referenced by get_projection().


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