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

#include <minhash.hpp>

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

Classes

struct  config
 

Public Member Functions

void clear ()
 
void clear_row (const std::string &id)
 
void get_all_row_ids (std::vector< std::string > &ids) const
 
framework::mixableget_mixable () const
 
 minhash ()
 
 minhash (const config &config)
 
void neighbor_row (const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
 
void pack (framework::packer &packer) const
 
void similar_row (const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
 
std::string type () const
 
void unpack (msgpack::object o)
 
void update_row (const std::string &id, const sfv_diff_t &diff)
 
 ~minhash ()
 
- 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 ()
 
virtual void neighbor_row (const std::string &id, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
 
 recommender_base ()
 
virtual void similar_row (const std::string &id, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
 
virtual ~recommender_base ()
 
- Public Member Functions inherited from jubatus::core::framework::model
virtual ~model ()
 

Private Member Functions

void calc_minhash_values (const common::sfv_t &sfv, core::storage::bit_vector &bv) const
 
void initialize_model ()
 

Static Private Member Functions

static float calc_hash (uint64_t a, uint64_t b, float val)
 
static void hash_mix64 (uint64_t &a, uint64_t &b, uint64_t &c)
 

Private Attributes

uint64_t hash_num_
 
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storagemixable_storage_
 

Static Private Attributes

static const uint64_t hash_prime = 0xc3a5c85c97cb3127ULL
 

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 36 of file minhash.hpp.

Constructor & Destructor Documentation

jubatus::core::recommender::minhash::minhash ( )

Definition at line 40 of file minhash.cpp.

References initialize_model().

Here is the call graph for this function:

jubatus::core::recommender::minhash::minhash ( const config config)
explicit

Definition at line 45 of file minhash.cpp.

References jubatus::core::recommender::minhash::config::hash_num, initialize_model(), and JUBATUS_EXCEPTION.

46  : hash_num_(config.hash_num) {
47 
48  if (!(1 <= config.hash_num)) {
49  throw JUBATUS_EXCEPTION(
50  common::invalid_parameter("1 <= hash_num"));
51  }
52 
54 }
#define JUBATUS_EXCEPTION(e)
Definition: exception.hpp:79

Here is the call graph for this function:

jubatus::core::recommender::minhash::~minhash ( )

Definition at line 56 of file minhash.cpp.

56  {
57 }

Member Function Documentation

float jubatus::core::recommender::minhash::calc_hash ( uint64_t  a,
uint64_t  b,
float  val 
)
staticprivate

Definition at line 171 of file minhash.cpp.

References hash_mix64(), and hash_prime.

Referenced by calc_minhash_values().

171  {
172  uint64_t c = hash_prime;
173  hash_mix64(a, b, c);
174  hash_mix64(a, b, c);
175  float r = static_cast<float>(a) / static_cast<float>(0xFFFFFFFFFFFFFFFFLLU);
176  return -std::log(r) / val;
177 }
static const uint64_t hash_prime
Definition: minhash.hpp:84
static void hash_mix64(uint64_t &a, uint64_t &b, uint64_t &c)
Definition: minhash.cpp:132

Here is the call graph for this function:

Here is the caller graph for this function:

void jubatus::core::recommender::minhash::calc_minhash_values ( const common::sfv_t sfv,
core::storage::bit_vector bv 
) const
private

Definition at line 93 of file minhash.cpp.

References calc_hash(), jubatus::core::common::hash_util::calc_string_hash(), and hash_num_.

Referenced by similar_row(), and update_row().

94  {
95  vector<float> min_values_buffer(hash_num_, FLT_MAX);
96  vector<uint64_t> hash_buffer(hash_num_);
97  for (size_t i = 0; i < sfv.size(); ++i) {
98  uint64_t key_hash = common::hash_util::calc_string_hash(sfv[i].first);
99  float val = sfv[i].second;
100  for (uint64_t j = 0; j < hash_num_; ++j) {
101  float hashval = calc_hash(key_hash, j, val);
102  if (hashval < min_values_buffer[j]) {
103  min_values_buffer[j] = hashval;
104  hash_buffer[j] = key_hash;
105  }
106  }
107  }
108 
109  bv.resize_and_clear(hash_num_);
110  for (size_t i = 0; i < hash_buffer.size(); ++i) {
111  if ((hash_buffer[i] & 1LLU) == 1) {
112  bv.set_bit(i);
113  }
114  }
115 }
static float calc_hash(uint64_t a, uint64_t b, float val)
Definition: minhash.cpp:171
static uint64_t calc_string_hash(const std::string &s)
Definition: hash.hpp:29

Here is the call graph for this function:

Here is the caller graph for this function:

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

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

Definition at line 83 of file minhash.cpp.

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

83  {
84  orig_.clear();
85  mixable_storage_->get_model()->clear();
86 }
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storage > mixable_storage_
Definition: minhash.hpp:87
core::storage::sparse_matrix_storage orig_

Here is the call graph for this function:

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

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

Definition at line 88 of file minhash.cpp.

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

88  {
89  orig_.remove_row(id);
90  mixable_storage_->get_model()->remove_row(id);
91 }
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storage > mixable_storage_
Definition: minhash.hpp:87
core::storage::sparse_matrix_storage orig_

Here is the call graph for this function:

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

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

Definition at line 127 of file minhash.cpp.

References mixable_storage_.

127  {
128  mixable_storage_->get_model()->get_all_row_ids(ids);
129 }
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storage > mixable_storage_
Definition: minhash.hpp:87
framework::mixable * jubatus::core::recommender::minhash::get_mixable ( ) const
virtual

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

Definition at line 183 of file minhash.cpp.

References mixable_storage_.

183  {
184  return mixable_storage_.get();
185 }
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storage > mixable_storage_
Definition: minhash.hpp:87
void jubatus::core::recommender::minhash::hash_mix64 ( uint64_t &  a,
uint64_t &  b,
uint64_t &  c 
)
staticprivate

Definition at line 132 of file minhash.cpp.

Referenced by calc_hash().

132  {
133  a -= b;
134  a -= c;
135  a ^= (c >> 43);
136  b -= c;
137  b -= a;
138  b ^= (a << 9);
139  c -= a;
140  c -= b;
141  c ^= (b >> 8);
142  a -= b;
143  a -= c;
144  a ^= (c >> 38);
145  b -= c;
146  b -= a;
147  b ^= (a << 23);
148  c -= a;
149  c -= b;
150  c ^= (b >> 5);
151  a -= b;
152  a -= c;
153  a ^= (c >> 35);
154  b -= c;
155  b -= a;
156  b ^= (a << 49);
157  c -= a;
158  c -= b;
159  c ^= (b >> 11);
160  a -= b;
161  a -= c;
162  a ^= (c >> 12);
163  b -= c;
164  b -= a;
165  b ^= (a << 18);
166  c -= a;
167  c -= b;
168  c ^= (b >> 22);
169 }

Here is the caller graph for this function:

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

Definition at line 187 of file minhash.cpp.

References mixable_storage_.

Referenced by minhash().

187  {
188  shared_ptr<storage::bit_index_storage> p(new storage::bit_index_storage);
190 }
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storage > mixable_storage_
Definition: minhash.hpp:87
framework::linear_mixable_helper< bit_index_storage, bit_table_t > mixable_bit_index_storage
Definition: lsh.hpp:34

Here is the caller graph for this function:

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

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

Definition at line 73 of file minhash.cpp.

References similar_row().

76  {
77  similar_row(query, ids, ret_num);
78  for (size_t i = 0; i < ids.size(); ++i) {
79  ids[i].second = 1 - ids[i].second;
80  }
81 }
void similar_row(const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, size_t ret_num) const
Definition: minhash.cpp:59

Here is the call graph for this function:

void jubatus::core::recommender::minhash::pack ( framework::packer packer) const
virtual

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

Definition at line 192 of file minhash.cpp.

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

192  {
193  packer.pack_array(2);
194  orig_.pack(packer);
195  mixable_storage_->get_model()->pack(packer);
196 }
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storage > mixable_storage_
Definition: minhash.hpp:87
void pack(framework::packer &packer) const
msgpack::packer< jubatus_packer > packer
Definition: bandit_base.hpp:31
core::storage::sparse_matrix_storage orig_

Here is the call graph for this function:

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

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

Definition at line 59 of file minhash.cpp.

References calc_minhash_values(), and mixable_storage_.

Referenced by neighbor_row().

62  {
63  ids.clear();
64  if (ret_num == 0) {
65  return;
66  }
67 
68  bit_vector query_bv;
69  calc_minhash_values(query, query_bv);
70  mixable_storage_->get_model()->similar_row(query_bv, ids, ret_num);
71 }
void calc_minhash_values(const common::sfv_t &sfv, core::storage::bit_vector &bv) const
Definition: minhash.cpp:93
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storage > mixable_storage_
Definition: minhash.hpp:87
bit_vector_base< uint64_t > bit_vector

Here is the call graph for this function:

Here is the caller graph for this function:

string jubatus::core::recommender::minhash::type ( ) const
virtual

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

Definition at line 179 of file minhash.cpp.

179  {
180  return string("minhash");
181 }
void jubatus::core::recommender::minhash::unpack ( msgpack::object  o)
virtual

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

Definition at line 198 of file minhash.cpp.

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

198  {
199  if (o.type != msgpack::type::ARRAY || o.via.array.size != 2) {
200  throw msgpack::type_error();
201  }
202  orig_.unpack(o.via.array.ptr[0]);
203  mixable_storage_->get_model()->unpack(o.via.array.ptr[1]);
204 }
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storage > mixable_storage_
Definition: minhash.hpp:87
core::storage::sparse_matrix_storage orig_

Here is the call graph for this function:

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

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

Definition at line 117 of file minhash.cpp.

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

117  {
118  orig_.set_row(id, diff);
119 
120  common::sfv_t row;
121  orig_.get_row(id, row);
122  bit_vector bv;
123  calc_minhash_values(row, bv);
124  mixable_storage_->get_model()->set_row(id, bv);
125 }
void get_row(const std::string &row, std::vector< std::pair< std::string, float > > &columns) const
void calc_minhash_values(const common::sfv_t &sfv, core::storage::bit_vector &bv) const
Definition: minhash.cpp:93
jubatus::util::lang::shared_ptr< storage::mixable_bit_index_storage > mixable_storage_
Definition: minhash.hpp:87
bit_vector_base< uint64_t > bit_vector
core::storage::sparse_matrix_storage orig_
std::vector< std::pair< std::string, float > > sfv_t
Definition: type.hpp:29
void set_row(const std::string &row, const std::vector< std::pair< std::string, float > > &columns)

Here is the call graph for this function:

Member Data Documentation

uint64_t jubatus::core::recommender::minhash::hash_num_
private

Definition at line 85 of file minhash.hpp.

Referenced by calc_minhash_values().

const uint64_t jubatus::core::recommender::minhash::hash_prime = 0xc3a5c85c97cb3127ULL
staticprivate

Definition at line 84 of file minhash.hpp.

Referenced by calc_hash().

jubatus::util::lang::shared_ptr<storage::mixable_bit_index_storage> jubatus::core::recommender::minhash::mixable_storage_
private

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