jubatus_core  0.1.2
Jubatus: Online machine learning framework for distributed environment
recommender.cpp
Go to the documentation of this file.
1 // Jubatus: Online machine learning framework for distributed environment
2 // Copyright (C) 2011,2012 Preferred Networks and Nippon Telegraph and Telephone Corporation.
3 //
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License version 2.1 as published by the Free Software Foundation.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 
17 #include "recommender.hpp"
18 
19 #include <string>
20 #include <utility>
21 #include <vector>
22 
23 #include "jubatus/util/lang/shared_ptr.h"
24 
25 #include "../common/exception.hpp"
26 #include "../common/vector_util.hpp"
27 #include "../fv_converter/datum.hpp"
28 #include "../fv_converter/datum_to_fv_converter.hpp"
29 #include "../fv_converter/converter_config.hpp"
30 #include "../fv_converter/revert.hpp"
31 #include "../recommender/recommender_factory.hpp"
32 
33 using std::string;
34 using std::vector;
35 using std::pair;
38 using jubatus::util::lang::shared_ptr;
39 
40 namespace jubatus {
41 namespace core {
42 namespace driver {
43 
45  shared_ptr<core::recommender::recommender_base> recommender_method,
46  shared_ptr<fv_converter::datum_to_fv_converter> converter)
47  : converter_(converter),
48  recommender_(recommender_method),
49  wm_(mixable_weight_manager::model_ptr(new weight_manager)) {
50  register_mixable(recommender_->get_mixable());
52 
53  converter_->set_weight_manager(wm_.get_model());
54 }
55 
57 }
58 
59 void recommender::clear_row(const std::string& id) {
60  recommender_->clear_row(id);
61 }
62 
64  const std::string& id,
65  const fv_converter::datum& dat) {
67  converter_->convert_and_update_weight(dat, v);
68  recommender_->update_row(id, v);
69 }
70 
72  recommender_->clear();
73  converter_->clear_weights();
74 }
75 
78  recommender_->complete_row(id, v);
79 
82  return ret;
83 }
84 
86  const fv_converter::datum& dat) {
87  common::sfv_t u, v;
88  converter_->convert(dat, u);
89  recommender_->complete_row(u, v);
90 
93  return ret;
94 }
95 
96 std::vector<std::pair<std::string, float> > recommender::similar_row_from_id(
97  const std::string& id,
98  size_t ret_num) {
99  std::vector<std::pair<std::string, float> > ret;
100  recommender_->similar_row(id, ret, ret_num);
101  return ret;
102 }
103 
104 std::vector<std::pair<std::string, float> >
106  const fv_converter::datum& data,
107  size_t size) {
109  converter_->convert(data, v);
110 
111  std::vector<std::pair<std::string, float> > ret;
112  recommender_->similar_row(v, ret, size);
113  return ret;
114 }
115 
117  const fv_converter::datum& l,
118  const fv_converter::datum& r) {
119  common::sfv_t v0, v1;
120  converter_->convert(l, v0);
121  converter_->convert(r, v1);
123 }
124 
126  common::sfv_t v0;
127  converter_->convert(q, v0);
129 }
130 
133  recommender_->decode_row(id, v);
134 
137  return ret;
138 }
139 
140 std::vector<std::string> recommender::get_all_rows() {
141  std::vector<std::string> ret;
142  recommender_->get_all_row_ids(ret);
143  return ret;
144 }
145 
147  pk.pack_array(2);
148  recommender_->pack(pk);
149  wm_.get_model()->pack(pk);
150 }
151 
152 void recommender::unpack(msgpack::object o) {
153  if (o.type != msgpack::type::ARRAY || o.via.array.size != 2) {
154  throw msgpack::type_error();
155  }
156 
157  // clear before load
158  recommender_->clear();
159  converter_->clear_weights();
160  recommender_->unpack(o.via.array.ptr[0]);
161  wm_.get_model()->unpack(o.via.array.ptr[1]);
162 }
163 
164 } // namespace driver
165 } // namespace core
166 } // namespace jubatus
static float calc_l2norm(const common::sfv_t &query)
void revert_feature(const common::sfv_t &fv, fv_converter::datum &data)
Definition: revert.cpp:31
std::vector< std::pair< std::string, float > > similar_row_from_datum(const fv_converter::datum &data, size_t size)
fv_converter::datum complete_row_from_id(const std::string &id)
Definition: recommender.cpp:76
void unpack(msgpack::object o)
void clear_row(const std::string &id)
Definition: recommender.cpp:59
jubatus::util::lang::shared_ptr< core::recommender::recommender_base > recommender_
Definition: recommender.hpp:78
void pack(framework::packer &pk) const
core::common::sfv_t sfv_diff_t
fv_converter::mixable_weight_manager wm_
Definition: recommender.hpp:79
std::vector< std::string > get_all_rows()
void update_row(const std::string &id, const fv_converter::datum &dat)
Definition: recommender.cpp:63
std::vector< std::pair< std::string, float > > similar_row_from_id(const std::string &id, size_t ret_num)
Definition: recommender.cpp:96
fv_converter::datum decode_row(const std::string &id)
framework::linear_mixable_helper< weight_manager, versioned_weight_diff > mixable_weight_manager
recommender(jubatus::util::lang::shared_ptr< core::recommender::recommender_base > method, jubatus::util::lang::shared_ptr< fv_converter::datum_to_fv_converter > converter)
Definition: recommender.cpp:44
float calc_similality(const fv_converter::datum &l, const fv_converter::datum &r)
jubatus::util::lang::shared_ptr< fv_converter::datum_to_fv_converter > converter_
Definition: recommender.hpp:76
float calc_l2norm(const fv_converter::datum &q)
std::vector< T > v(size)
std::vector< std::pair< std::string, float > > sfv_t
Definition: type.hpp:29
static float calc_similality(common::sfv_t &q1, common::sfv_t &q2)
fv_converter::datum complete_row_from_datum(const fv_converter::datum &dat)
Definition: recommender.cpp:85
void register_mixable(framework::mixable *mixable)
Definition: driver.cpp:242
storage::mixable_lsh_index_storage::model_ptr model_ptr
Definition: euclid_lsh.cpp:90