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

#include <confidence_weighted.hpp>

Inheritance diagram for jubatus::core::classifier::confidence_weighted:
Inheritance graph
Collaboration diagram for jubatus::core::classifier::confidence_weighted:
Collaboration graph

Public Member Functions

 confidence_weighted (storage_ptr storage)
 
 confidence_weighted (const classifier_config &config, storage_ptr storage)
 
std::string name () const
 
void train (const common::sfv_t &fv, const std::string &label)
 
- Public Member Functions inherited from jubatus::core::classifier::linear_classifier
std::string classify (const common::sfv_t &fv) const
 
void classify_with_scores (const common::sfv_t &fv, classify_result &scores) const
 
void clear ()
 
bool delete_label (const std::string &label)
 
std::vector< std::string > get_labels () const
 
framework::mixableget_mixable ()
 
virtual void get_status (std::map< std::string, std::string > &status) const
 
jubatus::util::lang::shared_ptr< unlearner::unlearner_baselabel_unlearner () const
 
 linear_classifier (storage_ptr storage)
 
void pack (framework::packer &pk) const
 
bool set_label (const std::string &label)
 
void set_label_unlearner (jubatus::util::lang::shared_ptr< unlearner::unlearner_base > label_unlearner)
 
bool unlearn_label (const std::string &label)
 
void unpack (msgpack::object o)
 
virtual ~linear_classifier ()
 
- Public Member Functions inherited from jubatus::core::classifier::classifier_base
 classifier_base ()
 
virtual ~classifier_base ()
 

Private Member Functions

void update (const common::sfv_t &fv, float step_weigth, const std::string &pos_label, const std::string &neg_label)
 

Private Attributes

classifier_config config_
 

Additional Inherited Members

- Protected Member Functions inherited from jubatus::core::classifier::linear_classifier
float calc_margin (const common::sfv_t &sfv, const std::string &label, std::string &incorrect_label) const
 
float calc_margin_and_variance (const common::sfv_t &sfv, const std::string &label, std::string &incorrect_label, float &variance) const
 
void check_touchable (const std::string &label)
 
std::string get_largest_incorrect_label (const common::sfv_t &sfv, const std::string &label, classify_result &scores) const
 
void touch (const std::string &label)
 
void update_weight (const common::sfv_t &sfv, float step_weigth, const std::string &pos_label, const std::string &neg_class)
 
- Static Protected Member Functions inherited from jubatus::core::classifier::linear_classifier
static float squared_norm (const common::sfv_t &sfv)
 
- Protected Attributes inherited from jubatus::core::classifier::linear_classifier
framework::linear_function_mixer mixable_storage_
 
storage_ptr storage_
 
jubatus::util::lang::shared_ptr< unlearner::unlearner_baseunlearner_
 

Detailed Description

Definition at line 28 of file confidence_weighted.hpp.

Constructor & Destructor Documentation

jubatus::core::classifier::confidence_weighted::confidence_weighted ( storage_ptr  storage)
explicit

Definition at line 33 of file confidence_weighted.cpp.

34  : linear_classifier(storage) {
35 }
jubatus::core::classifier::confidence_weighted::confidence_weighted ( const classifier_config config,
storage_ptr  storage 
)

Definition at line 37 of file confidence_weighted.cpp.

References JUBATUS_EXCEPTION, and jubatus::core::classifier::classifier_config::regularization_weight.

40  : linear_classifier(storage),
41  config_(config) {
42 
43  if (!(0.f < config.regularization_weight)) {
44  throw JUBATUS_EXCEPTION(
45  common::invalid_parameter("0.0 < regularization_weight"));
46  }
47 }
#define JUBATUS_EXCEPTION(e)
Definition: exception.hpp:79

Member Function Documentation

string jubatus::core::classifier::confidence_weighted::name ( ) const
virtual

Implements jubatus::core::classifier::linear_classifier.

Definition at line 104 of file confidence_weighted.cpp.

104  {
105  return string("confidence_weighted");
106 }
void jubatus::core::classifier::confidence_weighted::train ( const common::sfv_t fv,
const std::string &  label 
)
virtual

Implements jubatus::core::classifier::linear_classifier.

Definition at line 49 of file confidence_weighted.cpp.

References jubatus::core::classifier::linear_classifier::calc_margin_and_variance(), jubatus::core::classifier::linear_classifier::check_touchable(), config_, jubatus::core::classifier::classifier_config::regularization_weight, jubatus::core::classifier::linear_classifier::storage_, and update().

49  {
50  check_touchable(label);
51 
52  const float C = config_.regularization_weight;
53  string incorrect_label;
54  float variance = 0.f;
55  float margin = -calc_margin_and_variance(sfv, label, incorrect_label,
56  variance);
57  float b = 1.f + 2 * C * margin;
58  float gamma = -b + std::sqrt(b * b - 8 * C * (margin - C * variance));
59 
60  if (gamma <= 0.f) {
61  storage_->register_label(label);
62  return;
63  }
64  gamma /= 4 * C * variance;
65  update(sfv, gamma, label, incorrect_label);
66 }
void update(const common::sfv_t &fv, float step_weigth, const std::string &pos_label, const std::string &neg_label)
float calc_margin_and_variance(const common::sfv_t &sfv, const std::string &label, std::string &incorrect_label, float &variance) const
void check_touchable(const std::string &label)

Here is the call graph for this function:

void jubatus::core::classifier::confidence_weighted::update ( const common::sfv_t fv,
float  step_weigth,
const std::string &  pos_label,
const std::string &  neg_label 
)
private

Definition at line 68 of file confidence_weighted.cpp.

References config_, jubatus::core::classifier::ClassifierUtil::get_two(), jubatus::core::classifier::classifier_config::regularization_weight, jubatus::core::classifier::linear_classifier::storage_, jubatus::core::classifier::linear_classifier::touch(), jubatus::core::storage::val2_t::v1, and jubatus::core::storage::val2_t::v2.

Referenced by train().

72  {
73  util::concurrent::scoped_lock lk(storage_->get_lock());
74  for (common::sfv_t::const_iterator it = sfv.begin(); it != sfv.end(); ++it) {
75  const string& feature = it->first;
76  float val = it->second;
78  storage_->get2_nolock(feature, val2);
79 
80  storage::val2_t pos_val(0.f, 1.f);
81  storage::val2_t neg_val(0.f, 1.f);
82  ClassifierUtil::get_two(val2, pos_label, neg_label, pos_val, neg_val);
83 
84  const float C = config_.regularization_weight;
85  float covar_pos_step = 2.f * step_width * val * val * C;
86  float covar_neg_step = 2.f * step_width * val * val * C;
87 
88  storage_->set2_nolock(
89  feature,
90  pos_label,
91  storage::val2_t(pos_val.v1 + step_width * pos_val.v2 * val,
92  1.f / (1.f / pos_val.v2 + covar_pos_step)));
93  if (neg_label != "") {
94  storage_->set2_nolock(
95  feature,
96  neg_label,
97  storage::val2_t(neg_val.v1 - step_width * neg_val.v2 * val,
98  1.f / (1.f / neg_val.v2 + covar_neg_step)));
99  }
100  }
101  touch(pos_label);
102 }
static void get_two(const T &t, const std::string &label1, const std::string &label2, U &u1, U &u2)
std::vector< std::pair< std::string, val2_t > > feature_val2_t

Here is the call graph for this function:

Here is the caller graph for this function:

Member Data Documentation

classifier_config jubatus::core::classifier::confidence_weighted::config_
private

Definition at line 42 of file confidence_weighted.hpp.

Referenced by train(), and update().


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