22 #include "jubatus/util/lang/bind.h"
23 #include "../clustering/clustering.hpp"
24 #include "../fv_converter/datum_to_fv_converter.hpp"
25 #include "../common/vector_util.hpp"
26 #include "../fv_converter/revert.hpp"
27 #include "../fv_converter/weight_manager.hpp"
28 #include "../fv_converter/mixable_weight_manager.hpp"
36 using jubatus::util::lang::shared_ptr;
37 using fv_converter::datum;
39 using fv_converter::weight_manager;
42 shared_ptr<core::clustering::clustering> clustering_method,
43 shared_ptr<fv_converter::datum_to_fv_converter> converter)
44 : converter_(converter),
45 clustering_(clustering_method),
47 register_mixable(clustering_->get_mixable());
48 register_mixable(&wm_);
50 converter_->set_weight_manager(wm_.get_model());
53 clustering::~clustering() {
56 void clustering::push(
const vector<datum>& points) {
57 clustering_->push(to_weighted_point_vector(points));
60 datum clustering::get_nearest_center(
61 const datum& point)
const {
63 clustering_->get_nearest_center(to_sfv_const(point)));
67 clustering::get_nearest_members(
const datum& point)
const {
68 return to_weighted_datum_vector(
69 clustering_->get_nearest_members(to_sfv_const(point)));
72 vector<datum> clustering::get_k_center()
const {
73 return to_datum_vector(clustering_->get_k_center());
77 clustering::get_core_members()
const {
78 vector<vector<core::clustering::weighted_point> > src =
79 clustering_->get_core_members();
82 ret.reserve(src.size());
86 std::back_inserter(ret),
87 jubatus::util::lang::bind(
88 &clustering::to_weighted_datum_vector,
89 this, jubatus::util::lang::_1));
94 size_t clustering::get_revision()
const {
95 return clustering_->get_revision();
98 void clustering::do_clustering() {
99 clustering_->do_clustering();
106 converter_->convert_and_update_weight(dat, ret);
113 converter_->convert(dat, ret);
127 ret.
data = to_sfv(src);
133 pair<double, datum> clustering::to_weighted_datum(
138 vector<datum> clustering::to_datum_vector(
139 const vector<common::sfv_t>& src)
const {
141 ret.reserve(src.size());
145 std::back_inserter(ret),
146 jubatus::util::lang::bind(
147 &clustering::to_datum,
148 this, jubatus::util::lang::_1));
152 vector<core::clustering::weighted_point>
153 clustering::to_weighted_point_vector(
154 const vector<datum>& src) {
155 vector<core::clustering::weighted_point> ret;
156 ret.reserve(src.size());
160 std::back_inserter(ret),
161 jubatus::util::lang::bind(
162 &clustering::to_weighted_point,
163 this, jubatus::util::lang::_1));
168 clustering::to_weighted_datum_vector(
169 const vector<core::clustering::weighted_point>& src)
const {
171 ret.reserve(src.size());
175 std::back_inserter(ret),
176 jubatus::util::lang::bind(
177 &clustering::to_weighted_datum,
178 this, jubatus::util::lang::_1));
184 clustering_->pack(pk);
185 wm_.get_model()->pack(pk);
188 void clustering::unpack(msgpack::object o) {
189 if (o.type != msgpack::type::ARRAY || o.via.array.size != 2) {
190 throw msgpack::type_error();
194 clustering_->clear();
195 converter_->clear_weights();
198 clustering_->unpack(o.via.array.ptr[0]);
199 wm_.get_model()->unpack(o.via.array.ptr[1]);
202 void clustering::clear() {
203 clustering_->clear();
204 converter_->clear_weights();
void revert_feature(const common::sfv_t &fv, fv_converter::datum &data)
std::vector< cluster_unit > cluster_set
fv_converter::datum original
std::vector< std::pair< cluster_weight, jubatus::core::fv_converter::datum > > cluster_unit
framework::linear_mixable_helper< weight_manager, versioned_weight_diff > mixable_weight_manager
clustering(jubatus::util::lang::shared_ptr< core::clustering::clustering > clustering_method, jubatus::util::lang::shared_ptr< fv_converter::datum_to_fv_converter > converter)
void sort_and_merge(sfv_t &sfv)
std::vector< std::pair< std::string, float > > sfv_t
storage::mixable_lsh_index_storage::model_ptr model_ptr