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

#include <euclid_lsh.hpp>

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

Classes

struct  config
 

Public Member Functions

virtual float calc_similarity (float distance) const
 
 euclid_lsh (const config &conf, jubatus::util::lang::shared_ptr< storage::column_table > table, const std::string &id)
 
 euclid_lsh (const config &conf, jubatus::util::lang::shared_ptr< storage::column_table > table, std::vector< storage::column_type > &schema, const std::string &id)
 
virtual void neighbor_row (const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, uint64_t ret_num) const
 
virtual void neighbor_row (const std::string &query, std::vector< std::pair< std::string, float > > &ids, uint64_t ret_num) const
 
virtual void set_row (const std::string &id, const common::sfv_t &sfv)
 
virtual std::string type () const
 
- Public Member Functions inherited from jubatus::core::nearest_neighbor::nearest_neighbor_base
virtual void clear ()
 
void get_all_row_ids (std::vector< std::string > &ids) const
 
jubatus::util::lang::shared_ptr< const storage::column_tableget_const_table () const
 
framework::mixableget_mixable () const
 
jubatus::util::lang::shared_ptr< storage::column_tableget_table ()
 
 nearest_neighbor_base (jubatus::util::lang::shared_ptr< storage::column_table > table, const std::string &id)
 
void pack (framework::packer &packer) const
 
virtual void similar_row (const common::sfv_t &query, std::vector< std::pair< std::string, float > > &ids, uint64_t ret_num) const
 
virtual void similar_row (const std::string &query_id, std::vector< std::pair< std::string, float > > &ids, uint64_t ret_num) const
 
void unpack (msgpack::object o)
 
virtual ~nearest_neighbor_base ()
 

Private Member Functions

void fill_schema (std::vector< storage::column_type > &schema)
 
storage::const_bit_vector_columnlsh_column () const
 
void neighbor_row_from_hash (const storage::bit_vector &bv, float norm, std::vector< std::pair< std::string, float > > &ids, uint64_t ret_num) const
 
storage::const_float_columnnorm_column () const
 
void set_config (const config &conf)
 

Private Attributes

uint64_t first_column_id_
 
uint32_t hash_num_
 

Additional Inherited Members

- Protected Attributes inherited from jubatus::core::nearest_neighbor::nearest_neighbor_base
std::string my_id_
 

Detailed Description

Definition at line 35 of file euclid_lsh.hpp.

Constructor & Destructor Documentation

jubatus::core::nearest_neighbor::euclid_lsh::euclid_lsh ( const config conf,
jubatus::util::lang::shared_ptr< storage::column_table table,
const std::string &  id 
)
jubatus::core::nearest_neighbor::euclid_lsh::euclid_lsh ( const config conf,
jubatus::util::lang::shared_ptr< storage::column_table table,
std::vector< storage::column_type > &  schema,
const std::string &  id 
)

Member Function Documentation

virtual float jubatus::core::nearest_neighbor::euclid_lsh::calc_similarity ( float  distance) const
inlinevirtual

Reimplemented from jubatus::core::nearest_neighbor::nearest_neighbor_base.

Definition at line 75 of file euclid_lsh.hpp.

75  {
76  return -distance;
77  }
void jubatus::core::nearest_neighbor::euclid_lsh::fill_schema ( std::vector< storage::column_type > &  schema)
private

Definition at line 125 of file euclid_lsh.cpp.

125  {
126  first_column_id_ = schema.size();
127  schema.push_back(column_type(column_type::bit_vector_type, hash_num_));
128  schema.push_back(column_type(column_type::float_type));
129 }
const_bit_vector_column & jubatus::core::nearest_neighbor::euclid_lsh::lsh_column ( ) const
private

Definition at line 131 of file euclid_lsh.cpp.

131  {
132  return get_const_table()->get_bit_vector_column(first_column_id_);
133 }
jubatus::util::lang::shared_ptr< const storage::column_table > get_const_table() const
virtual void jubatus::core::nearest_neighbor::euclid_lsh::neighbor_row ( const common::sfv_t query,
std::vector< std::pair< std::string, float > > &  ids,
uint64_t  ret_num 
) const
virtual
virtual void jubatus::core::nearest_neighbor::euclid_lsh::neighbor_row ( const std::string &  query,
std::vector< std::pair< std::string, float > > &  ids,
uint64_t  ret_num 
) const
virtual
void jubatus::core::nearest_neighbor::euclid_lsh::neighbor_row_from_hash ( const storage::bit_vector bv,
float  norm,
std::vector< std::pair< std::string, float > > &  ids,
uint64_t  ret_num 
) const
private

Definition at line 139 of file euclid_lsh.cpp.

References jubatus::core::storage::fixed_size_heap< T, Comp >::get_sorted(), jubatus::core::storage::fixed_size_heap< T, Comp >::push(), and jubatus::core::regression::squared_norm().

143  {
144  jubatus::util::lang::shared_ptr<const column_table> table = get_const_table();
145 
147  {
149  const_float_column& norm_col = norm_column();
150 
151  const float denom = bv.bit_num();
152  for (size_t i = 0; i < table->size(); ++i) {
153  const size_t hamm_dist = bv.calc_hamming_distance(bv_col[i]);
154  const float theta = hamm_dist * M_PI / denom;
155  const float score =
156  norm_col[i] * (norm_col[i] - 2 * norm * std::cos(theta));
157  heap.push(make_pair(score, i));
158  }
159  }
160 
161  vector<pair<float, size_t> > sorted;
162  heap.get_sorted(sorted);
163 
164  ids.clear();
165  const float squared_norm = norm * norm;
166  for (size_t i = 0; i < sorted.size(); ++i) {
167  ids.push_back(make_pair(table->get_key(sorted[i].second),
168  std::sqrt(squared_norm + sorted[i].first)));
169  }
170 }
storage::const_bit_vector_column & lsh_column() const
Definition: euclid_lsh.cpp:131
static float squared_norm(const common::sfv_t &fv)
const bit_vector_column const_bit_vector_column
storage::const_float_column & norm_column() const
Definition: euclid_lsh.cpp:135
jubatus::util::lang::shared_ptr< const storage::column_table > get_const_table() const
const typed_column< float > const_float_column

Here is the call graph for this function:

const_float_column & jubatus::core::nearest_neighbor::euclid_lsh::norm_column ( ) const
private

Definition at line 135 of file euclid_lsh.cpp.

135  {
136  return get_const_table()->get_float_column(first_column_id_ + 1);
137 }
jubatus::util::lang::shared_ptr< const storage::column_table > get_const_table() const
void jubatus::core::nearest_neighbor::euclid_lsh::set_config ( const config conf)
private

Definition at line 116 of file euclid_lsh.cpp.

References jubatus::core::nearest_neighbor::euclid_lsh::config::hash_num, and JUBATUS_EXCEPTION.

116  {
117  if (!(1 <= conf.hash_num)) {
118  throw JUBATUS_EXCEPTION(
119  common::invalid_parameter("1 <= hash_num"));
120  }
121 
122  hash_num_ = conf.hash_num;
123 }
#define JUBATUS_EXCEPTION(e)
Definition: exception.hpp:79
void jubatus::core::nearest_neighbor::euclid_lsh::set_row ( const std::string &  id,
const common::sfv_t sfv 
)
virtual

Implements jubatus::core::nearest_neighbor::nearest_neighbor_base.

Definition at line 83 of file euclid_lsh.cpp.

References jubatus::core::nearest_neighbor::cosine_lsh().

83  {
84  // TODO(beam2d): support nested algorithm, e.g. when used by lof and then we
85  // cannot suppose that the first two columns are assigned to euclid_lsh.
86  get_table()->add(id, owner(my_id_), cosine_lsh(sfv, hash_num_), l2norm(sfv));
87 }
jubatus::util::lang::shared_ptr< storage::column_table > get_table()
bit_vector cosine_lsh(const common::sfv_t &sfv, uint32_t hash_num)

Here is the call graph for this function:

virtual std::string jubatus::core::nearest_neighbor::euclid_lsh::type ( ) const
inlinevirtual

Implements jubatus::core::nearest_neighbor::nearest_neighbor_base.

Definition at line 61 of file euclid_lsh.hpp.

61  {
62  return "euclid_lsh";
63  }

Member Data Documentation

uint64_t jubatus::core::nearest_neighbor::euclid_lsh::first_column_id_
private

Definition at line 91 of file euclid_lsh.hpp.

uint32_t jubatus::core::nearest_neighbor::euclid_lsh::hash_num_
private

Definition at line 92 of file euclid_lsh.hpp.


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