Class SubGradientSVM trains a linear classifier called Linear Programming Machine, i.e. a SVM using a norm regularizer.
It solves the following optimization problem using subgradient descent.
Note that this implementation is not very stable numerically for a large number of dimensions. Also note that currently CPLEX is required to solve this problem.
Definition at line 48 of file SubGradientLPM.h.
Public Member Functions | |
CSubGradientLPM () | |
CSubGradientLPM (float64_t C, CDotFeatures *traindat, CLabels *trainlab) | |
virtual | ~CSubGradientLPM () |
virtual EClassifierType | get_classifier_type () |
virtual bool | train (CFeatures *data=NULL) |
void | set_C (float64_t c1, float64_t c2) |
float64_t | get_C1 () |
float64_t | get_C2 () |
void | set_bias_enabled (bool enable_bias) |
bool | get_bias_enabled () |
void | set_epsilon (float64_t eps) |
float64_t | get_epsilon () |
void | set_qpsize (int32_t q) |
int32_t | get_qpsize () |
void | set_qpsize_max (int32_t q) |
int32_t | get_qpsize_max () |
Protected Member Functions | |
int32_t | find_active (int32_t num_feat, int32_t num_vec, int32_t &num_active, int32_t &num_bound) |
void | update_active (int32_t num_feat, int32_t num_vec) |
float64_t | compute_objective (int32_t num_feat, int32_t num_vec) |
compute svm objective | |
float64_t | compute_min_subgradient (int32_t num_feat, int32_t num_vec, int32_t num_active, int32_t num_bound) |
float64_t | line_search (int32_t num_feat, int32_t num_vec) |
performs a line search to determine step size | |
void | compute_projection (int32_t num_feat, int32_t num_vec) |
compute projection | |
void | update_projection (float64_t alpha, int32_t num_vec) |
only computes updates on the projection | |
void | init (int32_t num_vec, int32_t num_feat) |
alloc helper arrays | |
void | cleanup () |
de-alloc helper arrays | |
virtual const char * | get_name () const |
Protected Attributes | |
float64_t | C1 |
float64_t | C2 |
float64_t | epsilon |
float64_t | work_epsilon |
float64_t | autoselected_epsilon |
int32_t | qpsize |
int32_t | qpsize_max |
int32_t | qpsize_limit |
bool | use_bias |
int32_t | last_it_noimprovement |
int32_t | num_it_noimprovement |
uint8_t * | active |
uint8_t * | old_active |
int32_t * | idx_active |
int32_t * | idx_bound |
int32_t | delta_active |
int32_t | delta_bound |
float64_t * | proj |
float64_t * | tmp_proj |
int32_t * | tmp_proj_idx |
float64_t * | sum_CXy_active |
float64_t * | v |
float64_t * | old_v |
float64_t | sum_Cy_active |
int32_t | pos_idx |
int32_t | neg_idx |
int32_t | zero_idx |
int32_t * | w_pos |
int32_t * | w_zero |
int32_t * | w_neg |
float64_t * | grad_w |
float64_t | grad_b |
float64_t * | grad_proj |
float64_t * | hinge_point |
int32_t * | hinge_idx |
float64_t * | beta |
CCplex * | solver |
float64_t | lpmtim |
CSubGradientLPM | ( | ) |
Definition at line 29 of file SubGradientLPM.cpp.
CSubGradientLPM | ( | float64_t | C, | |
CDotFeatures * | traindat, | |||
CLabels * | trainlab | |||
) |
Definition at line 35 of file SubGradientLPM.cpp.
~CSubGradientLPM | ( | ) | [virtual] |
Definition at line 45 of file SubGradientLPM.cpp.
void cleanup | ( | ) | [protected] |
de-alloc helper arrays
Definition at line 501 of file SubGradientLPM.cpp.
float64_t compute_min_subgradient | ( | int32_t | num_feat, | |
int32_t | num_vec, | |||
int32_t | num_active, | |||
int32_t | num_bound | |||
) | [protected] |
compute minimum norm subgradient return norm of minimum norm subgradient
Definition at line 325 of file SubGradientLPM.cpp.
float64_t compute_objective | ( | int32_t | num_feat, | |
int32_t | num_vec | |||
) | [protected] |
compute svm objective
Definition at line 411 of file SubGradientLPM.cpp.
void compute_projection | ( | int32_t | num_feat, | |
int32_t | num_vec | |||
) | [protected] |
compute projection
Definition at line 424 of file SubGradientLPM.cpp.
int32_t find_active | ( | int32_t | num_feat, | |
int32_t | num_vec, | |||
int32_t & | num_active, | |||
int32_t & | num_bound | |||
) | [protected] |
returns number of changed constraints for precision work_epsilon and fills active array
Definition at line 50 of file SubGradientLPM.cpp.
bool get_bias_enabled | ( | ) |
Definition at line 75 of file SubGradientLPM.h.
float64_t get_C1 | ( | ) |
Definition at line 71 of file SubGradientLPM.h.
float64_t get_C2 | ( | ) |
Definition at line 72 of file SubGradientLPM.h.
virtual EClassifierType get_classifier_type | ( | ) | [virtual] |
get classifier type
Reimplemented from CClassifier.
Definition at line 57 of file SubGradientLPM.h.
float64_t get_epsilon | ( | ) |
Definition at line 78 of file SubGradientLPM.h.
virtual const char* get_name | ( | ) | const [protected, virtual] |
int32_t get_qpsize | ( | ) |
Definition at line 81 of file SubGradientLPM.h.
int32_t get_qpsize_max | ( | ) |
Definition at line 84 of file SubGradientLPM.h.
void init | ( | int32_t | num_vec, | |
int32_t | num_feat | |||
) | [protected] |
alloc helper arrays
Definition at line 435 of file SubGradientLPM.cpp.
float64_t line_search | ( | int32_t | num_feat, | |
int32_t | num_vec | |||
) | [protected] |
performs a line search to determine step size
Definition at line 242 of file SubGradientLPM.cpp.
void set_bias_enabled | ( | bool | enable_bias | ) |
Definition at line 74 of file SubGradientLPM.h.
Definition at line 69 of file SubGradientLPM.h.
void set_epsilon | ( | float64_t | eps | ) |
Definition at line 77 of file SubGradientLPM.h.
void set_qpsize | ( | int32_t | q | ) |
Definition at line 80 of file SubGradientLPM.h.
void set_qpsize_max | ( | int32_t | q | ) |
Definition at line 83 of file SubGradientLPM.h.
bool train | ( | CFeatures * | data = NULL |
) | [virtual] |
train classifier
data | training data (parameter can be avoided if distance or kernel-based classifiers are used and distance/kernels are initialized with train data) |
Reimplemented from CClassifier.
Definition at line 541 of file SubGradientLPM.cpp.
void update_active | ( | int32_t | num_feat, | |
int32_t | num_vec | |||
) | [protected] |
swaps the active / old_active and computes idx_active, idx_bound and sum_CXy_active arrays and the sum_Cy_active variable
Definition at line 221 of file SubGradientLPM.cpp.
void update_projection | ( | float64_t | alpha, | |
int32_t | num_vec | |||
) | [protected] |
only computes updates on the projection
Definition at line 430 of file SubGradientLPM.cpp.
uint8_t* active [protected] |
Definition at line 139 of file SubGradientLPM.h.
float64_t autoselected_epsilon [protected] |
Definition at line 129 of file SubGradientLPM.h.
Definition at line 169 of file SubGradientLPM.h.
Definition at line 125 of file SubGradientLPM.h.
Definition at line 126 of file SubGradientLPM.h.
int32_t delta_active [protected] |
Definition at line 143 of file SubGradientLPM.h.
int32_t delta_bound [protected] |
Definition at line 144 of file SubGradientLPM.h.
Definition at line 127 of file SubGradientLPM.h.
Definition at line 163 of file SubGradientLPM.h.
Definition at line 164 of file SubGradientLPM.h.
Definition at line 162 of file SubGradientLPM.h.
int32_t* hinge_idx [protected] |
Definition at line 166 of file SubGradientLPM.h.
float64_t* hinge_point [protected] |
Definition at line 165 of file SubGradientLPM.h.
int32_t* idx_active [protected] |
Definition at line 141 of file SubGradientLPM.h.
int32_t* idx_bound [protected] |
Definition at line 142 of file SubGradientLPM.h.
int32_t last_it_noimprovement [protected] |
Definition at line 135 of file SubGradientLPM.h.
Definition at line 172 of file SubGradientLPM.h.
int32_t neg_idx [protected] |
Definition at line 157 of file SubGradientLPM.h.
int32_t num_it_noimprovement [protected] |
Definition at line 136 of file SubGradientLPM.h.
uint8_t* old_active [protected] |
Definition at line 140 of file SubGradientLPM.h.
Definition at line 152 of file SubGradientLPM.h.
int32_t pos_idx [protected] |
Definition at line 156 of file SubGradientLPM.h.
Definition at line 145 of file SubGradientLPM.h.
int32_t qpsize [protected] |
Definition at line 130 of file SubGradientLPM.h.
int32_t qpsize_limit [protected] |
Definition at line 132 of file SubGradientLPM.h.
int32_t qpsize_max [protected] |
Definition at line 131 of file SubGradientLPM.h.
Definition at line 171 of file SubGradientLPM.h.
float64_t* sum_CXy_active [protected] |
Definition at line 150 of file SubGradientLPM.h.
float64_t sum_Cy_active [protected] |
Definition at line 153 of file SubGradientLPM.h.
Definition at line 146 of file SubGradientLPM.h.
int32_t* tmp_proj_idx [protected] |
Definition at line 147 of file SubGradientLPM.h.
bool use_bias [protected] |
Definition at line 133 of file SubGradientLPM.h.
Definition at line 151 of file SubGradientLPM.h.
int32_t* w_neg [protected] |
Definition at line 161 of file SubGradientLPM.h.
int32_t* w_pos [protected] |
Definition at line 159 of file SubGradientLPM.h.
int32_t* w_zero [protected] |
Definition at line 160 of file SubGradientLPM.h.
float64_t work_epsilon [protected] |
Definition at line 128 of file SubGradientLPM.h.
int32_t zero_idx [protected] |
Definition at line 158 of file SubGradientLPM.h.