22 #include "jubatus/util/data/intern.h"
32 void increase(val3_t& a,
const val3_t& b) {
38 void delete_label_from_weight(uint64_t delete_id,
id_features3_t& tbl) {
39 for (id_features3_t::iterator it = tbl.begin(); it != tbl.end(); ) {
40 it->second.erase(delete_id);
41 if (it->second.empty()) {
58 const string& feature,
61 id_features3_t::const_iterator it =
tbl_.find(feature);
64 if (it !=
tbl_.end()) {
69 id_features3_t::const_iterator it_diff =
tbl_diff_.find(feature);
72 for (id_feature_val3_t::const_iterator it2 = it_diff->second.begin();
73 it2 != it_diff->second.end(); ++it2) {
74 val3_t& val3 = ret[it2->first];
75 increase(val3, it2->second);
82 const std::string& feature,
84 util::concurrent::scoped_lock lk(
mutex_);
88 const std::string& feature,
93 for (id_feature_val3_t::const_iterator it = m3.begin(); it != m3.end();
100 const std::string& feature,
102 util::concurrent::scoped_lock lk(
mutex_);
106 const std::string& feature,
111 for (id_feature_val3_t::const_iterator it = m3.begin(); it != m3.end();
115 val2_t(it->second.v1, it->second.v2)));
120 const std::string& feature,
122 util::concurrent::scoped_lock lk(
mutex_);
126 const std::string& feature,
131 for (id_feature_val3_t::const_iterator it = m3.begin(); it != m3.end();
142 jubatus::util::data::unordered_map<uint64_t, float> ret_id;
143 for (common::sfv_t::const_iterator it = sfv.begin(); it != sfv.end(); ++it) {
144 const string& feature = it->first;
145 const float val = it->second;
148 for (id_feature_val3_t::const_iterator it3 = m.begin(); it3 != m.end();
150 ret_id[it3->first] += it3->second.v1 * val;
155 for (
size_t i = 0; i < labels.size(); ++i) {
156 const std::string& label = labels[i];
161 ret[label] = ret_id[id];
167 const string& feature,
170 util::concurrent::scoped_lock lk(
mutex_);
174 const string& feature,
178 float w_in_table =
tbl_[feature][class_id].v1;
179 tbl_diff_[feature][class_id].v1 = w - w_in_table;
183 const string& feature,
186 util::concurrent::scoped_lock lk(
mutex_);
190 const string& feature,
194 float w1_in_table =
tbl_[feature][class_id].v1;
195 float w2_in_table =
tbl_[feature][class_id].v2;
198 triple.
v1 = w.
v1 - w1_in_table;
199 triple.
v2 = w.
v2 - w2_in_table;
203 const string& feature,
206 util::concurrent::scoped_lock lk(
mutex_);
210 const string& feature,
219 std::map<std::string, std::string>& status)
const {
220 status[
"num_features"] =
221 jubatus::util::lang::lexical_cast<std::string>(
tbl_.size());
222 status[
"num_classes"] = jubatus::util::lang::lexical_cast<std::string>(
224 status[
"diff_size"] =
225 jubatus::util::lang::lexical_cast<std::string>(
tbl_diff_.size());
229 const string& feature,
230 const string& inc_class,
231 const string& dec_class,
241 const string& inc_class,
242 const string& dec_class) {
244 typedef common::sfv_t::const_iterator iter_t;
245 if (dec_class !=
"") {
247 for (iter_t it = sfv.begin(); it != sfv.end(); ++it) {
248 float val = it->second * step_width;
250 feature_row[inc_id].v1 += val;
251 feature_row[dec_id].v1 -= val;
254 for (iter_t it = sfv.begin(); it != sfv.end(); ++it) {
255 float val = it->second * step_width;
257 feature_row[inc_id].v1 += val;
264 for (jubatus::util::data::unordered_map<string, id_feature_val3_t>::
266 id_feature_val3_t::const_iterator it2 = it->second.begin();
268 for (; it2 != it->second.end(); ++it2) {
271 ret.
diff.push_back(make_pair(it->first, fv3));
279 for (features3_t::const_iterator it = average.
diff.begin();
280 it != average.
diff.end();
284 for (feature_val3_t::const_iterator it2 = avg.begin(); it2 != avg.end();
287 increase(triple, it2->second);
304 util::concurrent::scoped_lock lk(
mutex_);
313 delete_label_from_weight(delete_id,
tbl_);
314 delete_label_from_weight(delete_id,
tbl_diff_);
343 return "local_storage_mixture";
bool set_label(const std::string &label)
uint64_t get_id_const(const std::string &key) const
void set3_nolock(const std::string &feature, const std::string &klass, const val3_t &w)
void update(const std::string &feature, const std::string &inc_class, const std::string &dec_class, const val1_t &v)
void get2_nolock(const std::string &feature, feature_val2_t &ret) const
void set(const std::string &feature, const std::string &klass, const val1_t &w)
bool get_internal(const std::string &feature, id_feature_val3_t &ret) const
void inp(const common::sfv_t &sfv, map_feature_val1_t &ret) const
inner product
void get3(const std::string &feature, feature_val3_t &ret) const
jubatus::util::data::unordered_map< std::string, val1_t > map_feature_val1_t
void get3_nolock(const std::string &feature, feature_val3_t &ret) const
void get(const std::string &feature, feature_val1_t &ret) const
util::concurrent::mutex mutex_
bool set_key(const std::string &key)
jubatus::util::data::unordered_map< std::string, id_feature_val3_t > id_features3_t
common::key_manager class2id_
void set3(const std::string &feature, const std::string &klass, const val3_t &w)
std::vector< std::pair< std::string, val1_t > > feature_val1_t
bool set_average_and_clear_diff(const diff_t &average)
std::vector< std::string > get_labels() const
const std::string & get_key(const uint64_t id) const
void get_nolock(const std::string &feature, feature_val1_t &ret) const
void unpack(msgpack::object o)
msgpack::packer< jubatus_packer > packer
void pack(framework::packer &packer) const
void get_status(std::map< std::string, std::string > &status) const
void get2(const std::string &feature, feature_val2_t &ret) const
void set_nolock(const std::string &feature, const std::string &klass, const val1_t &w)
uint64_t get_id(const std::string &key)
std::vector< std::pair< std::string, val3_t > > feature_val3_t
void register_label(const std::string &label)
bool delete_label(const std::string &label)
void set2(const std::string &feature, const std::string &klass, const val2_t &w)
std::vector< std::pair< std::string, float > > sfv_t
void delete_key(const std::string &name)
jubatus::util::data::unordered_map< uint64_t, val3_t > id_feature_val3_t
bool delete_label_nolock(const std::string &label)
std::vector< std::pair< std::string, val2_t > > feature_val2_t
void set2_nolock(const std::string &feature, const std::string &klass, const val2_t &w)
std::vector< std::string > get_all_id2key() const
void swap(key_manager &km)
void bulk_update(const common::sfv_t &sfv, float step_width, const std::string &inc_class, const std::string &dec_class)
void get_diff(diff_t &ret) const