pub struct SVMSGD { /* private fields */ }
Expand description
! Stochastic Gradient Descent SVM classifier
SVMSGD provides a fast and easy-to-use implementation of the SVM classifier using the Stochastic Gradient Descent approach, as presented in bottou2010large.
The classifier has following parameters:
- model type,
- margin type,
- margin regularization (
),
- initial step size (
),
- step decreasing power (
),
- and termination criteria.
The model type may have one of the following values: \ref SGD and \ref ASGD.
-
\ref SGD is the classic version of SVMSGD classifier: every next step is calculated by the formula
where
is the weights vector for decision function at step
,
is the step size of model parameters at the iteration
, it is decreased on each step by the formula
is the target functional from SVM task for sample with number
, this sample is chosen stochastically on each step of the algorithm.
-
\ref ASGD is Average Stochastic Gradient Descent SVM Classifier. ASGD classifier averages weights vector on each step of algorithm by the formula
The recommended model type is ASGD (following bottou2010large).
The margin type may have one of the following values: \ref SOFT_MARGIN or \ref HARD_MARGIN.
- You should use \ref HARD_MARGIN type, if you have linearly separable sets.
- You should use \ref SOFT_MARGIN type, if you have non-linearly separable sets or sets with outliers.
- In the general case (if you know nothing about linear separability of your sets), use SOFT_MARGIN.
The other parameters may be described as follows:
-
Margin regularization parameter is responsible for weights decreasing at each step and for the strength of restrictions on outliers (the less the parameter, the less probability that an outlier will be ignored). Recommended value for SGD model is 0.0001, for ASGD model is 0.00001.
-
Initial step size parameter is the initial value for the step size
. You will have to find the best initial step for your problem.
-
Step decreasing power is the power parameter for
decreasing by the formula, mentioned above. Recommended value for SGD model is 1, for ASGD model is 0.75.
-
Termination criteria can be TermCriteria::COUNT, TermCriteria::EPS or TermCriteria::COUNT + TermCriteria::EPS. You will have to find the best termination criteria for your problem.
Note that the parameters margin regularization, initial step size, and step decreasing power should be positive.
To use SVMSGD algorithm do as follows:
-
first, create the SVMSGD object. The algorithm will set optimal parameters by default, but you can set your own parameters via functions setSvmsgdType(), setMarginType(), setMarginRegularization(), setInitialStepSize(), and setStepDecreasingPower().
-
then the SVM model can be trained using the train features and the correspondent labels by the method train().
-
after that, the label of a new feature vector can be predicted using the method predict().
// Create empty object
cv::Ptr<SVMSGD> svmsgd = SVMSGD::create();
// Train the Stochastic Gradient Descent SVM
svmsgd->train(trainData);
// Predict labels for the new samples
svmsgd->predict(samples, responses);
Implementations§
Source§impl SVMSGD
impl SVMSGD
Sourcepub fn create() -> Result<Ptr<SVMSGD>>
pub fn create() -> Result<Ptr<SVMSGD>>
Creates empty model. Use StatModel::train to train the model. Since %SVMSGD has several parameters, you may want to find the best parameters for your problem or use setOptimalParameters() to set some default parameters.
Sourcepub fn load(filepath: &str, node_name: &str) -> Result<Ptr<SVMSGD>>
pub fn load(filepath: &str, node_name: &str) -> Result<Ptr<SVMSGD>>
Loads and creates a serialized SVMSGD from a file
Use SVMSGD::save to serialize and store an SVMSGD to disk. Load the SVMSGD from this file again, by calling this function with the path to the file. Optionally specify the node for the file containing the classifier
§Parameters
- filepath: path to serialized SVMSGD
- nodeName: name of node containing the classifier
§C++ default parameters
- node_name: String()
Sourcepub fn load_def(filepath: &str) -> Result<Ptr<SVMSGD>>
pub fn load_def(filepath: &str) -> Result<Ptr<SVMSGD>>
Loads and creates a serialized SVMSGD from a file
Use SVMSGD::save to serialize and store an SVMSGD to disk. Load the SVMSGD from this file again, by calling this function with the path to the file. Optionally specify the node for the file containing the classifier
§Parameters
- filepath: path to serialized SVMSGD
- nodeName: name of node containing the classifier
§Note
This alternative version of SVMSGD::load function uses the following default values for its arguments:
- node_name: String()
Trait Implementations§
Source§impl AlgorithmTrait for SVMSGD
impl AlgorithmTrait for SVMSGD
Source§impl AlgorithmTraitConst for SVMSGD
impl AlgorithmTraitConst for SVMSGD
fn as_raw_Algorithm(&self) -> *const c_void
Source§fn write(&self, fs: &mut impl FileStorageTrait) -> Result<()>
fn write(&self, fs: &mut impl FileStorageTrait) -> Result<()>
Source§fn write_1(&self, fs: &mut impl FileStorageTrait, name: &str) -> Result<()>
fn write_1(&self, fs: &mut impl FileStorageTrait, name: &str) -> Result<()>
Source§fn write_with_name(&self, fs: &Ptr<FileStorage>, name: &str) -> Result<()>
fn write_with_name(&self, fs: &Ptr<FileStorage>, name: &str) -> Result<()>
Source§fn write_with_name_def(&self, fs: &Ptr<FileStorage>) -> Result<()>
fn write_with_name_def(&self, fs: &Ptr<FileStorage>) -> Result<()>
§Note
Source§fn empty(&self) -> Result<bool>
fn empty(&self) -> Result<bool>
Source§fn save(&self, filename: &str) -> Result<()>
fn save(&self, filename: &str) -> Result<()>
Source§fn get_default_name(&self) -> Result<String>
fn get_default_name(&self) -> Result<String>
Source§impl Boxed for SVMSGD
impl Boxed for SVMSGD
Source§unsafe fn from_raw(ptr: <SVMSGD as OpenCVFromExtern>::ExternReceive) -> Self
unsafe fn from_raw(ptr: <SVMSGD as OpenCVFromExtern>::ExternReceive) -> Self
Source§fn into_raw(self) -> <SVMSGD as OpenCVTypeExternContainer>::ExternSendMut
fn into_raw(self) -> <SVMSGD as OpenCVTypeExternContainer>::ExternSendMut
Source§fn as_raw(&self) -> <SVMSGD as OpenCVTypeExternContainer>::ExternSend
fn as_raw(&self) -> <SVMSGD as OpenCVTypeExternContainer>::ExternSend
Source§fn as_raw_mut(&mut self) -> <SVMSGD as OpenCVTypeExternContainer>::ExternSendMut
fn as_raw_mut(&mut self) -> <SVMSGD as OpenCVTypeExternContainer>::ExternSendMut
Source§impl SVMSGDTrait for SVMSGD
impl SVMSGDTrait for SVMSGD
fn as_raw_mut_SVMSGD(&mut self) -> *mut c_void
Source§fn set_optimal_parameters(
&mut self,
svmsgd_type: i32,
margin_type: i32,
) -> Result<()>
fn set_optimal_parameters( &mut self, svmsgd_type: i32, margin_type: i32, ) -> Result<()>
Source§fn set_optimal_parameters_def(&mut self) -> Result<()>
fn set_optimal_parameters_def(&mut self) -> Result<()>
Source§fn set_svmsgd_type(&mut self, svmsgd_type: i32) -> Result<()>
fn set_svmsgd_type(&mut self, svmsgd_type: i32) -> Result<()>
Source§fn set_margin_type(&mut self, margin_type: i32) -> Result<()>
fn set_margin_type(&mut self, margin_type: i32) -> Result<()>
Source§fn set_margin_regularization(
&mut self,
margin_regularization: f32,
) -> Result<()>
fn set_margin_regularization( &mut self, margin_regularization: f32, ) -> Result<()>
Source§fn set_initial_step_size(&mut self, initial_step_size: f32) -> Result<()>
fn set_initial_step_size(&mut self, initial_step_size: f32) -> Result<()>
Source§fn set_step_decreasing_power(
&mut self,
step_decreasing_power: f32,
) -> Result<()>
fn set_step_decreasing_power( &mut self, step_decreasing_power: f32, ) -> Result<()>
Source§fn set_term_criteria(&mut self, val: TermCriteria) -> Result<()>
fn set_term_criteria(&mut self, val: TermCriteria) -> Result<()>
Source§impl SVMSGDTraitConst for SVMSGD
impl SVMSGDTraitConst for SVMSGD
fn as_raw_SVMSGD(&self) -> *const c_void
Source§fn get_svmsgd_type(&self) -> Result<i32>
fn get_svmsgd_type(&self) -> Result<i32>
Source§fn get_margin_regularization(&self) -> Result<f32>
fn get_margin_regularization(&self) -> Result<f32>
Source§fn get_initial_step_size(&self) -> Result<f32>
fn get_initial_step_size(&self) -> Result<f32>
Source§fn get_step_decreasing_power(&self) -> Result<f32>
fn get_step_decreasing_power(&self) -> Result<f32>
Source§fn get_term_criteria(&self) -> Result<TermCriteria>
fn get_term_criteria(&self) -> Result<TermCriteria>
Source§impl StatModelTrait for SVMSGD
impl StatModelTrait for SVMSGD
fn as_raw_mut_StatModel(&mut self) -> *mut c_void
Source§fn train_with_data(
&mut self,
train_data: &Ptr<TrainData>,
flags: i32,
) -> Result<bool>
fn train_with_data( &mut self, train_data: &Ptr<TrainData>, flags: i32, ) -> Result<bool>
Source§fn train_with_data_def(&mut self, train_data: &Ptr<TrainData>) -> Result<bool>
fn train_with_data_def(&mut self, train_data: &Ptr<TrainData>) -> Result<bool>
Source§fn train(
&mut self,
samples: &impl ToInputArray,
layout: i32,
responses: &impl ToInputArray,
) -> Result<bool>
fn train( &mut self, samples: &impl ToInputArray, layout: i32, responses: &impl ToInputArray, ) -> Result<bool>
Source§impl StatModelTraitConst for SVMSGD
impl StatModelTraitConst for SVMSGD
fn as_raw_StatModel(&self) -> *const c_void
Source§fn get_var_count(&self) -> Result<i32>
fn get_var_count(&self) -> Result<i32>
fn empty(&self) -> Result<bool>
Source§fn is_trained(&self) -> Result<bool>
fn is_trained(&self) -> Result<bool>
Source§fn is_classifier(&self) -> Result<bool>
fn is_classifier(&self) -> Result<bool>
Source§fn calc_error(
&self,
data: &Ptr<TrainData>,
test: bool,
resp: &mut impl ToOutputArray,
) -> Result<f32>
fn calc_error( &self, data: &Ptr<TrainData>, test: bool, resp: &mut impl ToOutputArray, ) -> Result<f32>
Source§fn predict(
&self,
samples: &impl ToInputArray,
results: &mut impl ToOutputArray,
flags: i32,
) -> Result<f32>
fn predict( &self, samples: &impl ToInputArray, results: &mut impl ToOutputArray, flags: i32, ) -> Result<f32>
Source§fn predict_def(&self, samples: &impl ToInputArray) -> Result<f32>
fn predict_def(&self, samples: &impl ToInputArray) -> Result<f32>
impl Send for SVMSGD
Auto Trait Implementations§
impl Freeze for SVMSGD
impl RefUnwindSafe for SVMSGD
impl !Sync for SVMSGD
impl Unpin for SVMSGD
impl UnwindSafe for SVMSGD
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<Mat> ModifyInplace for Matwhere
Mat: Boxed,
impl<Mat> ModifyInplace for Matwhere
Mat: Boxed,
Source§unsafe fn modify_inplace<Res>(
&mut self,
f: impl FnOnce(&Mat, &mut Mat) -> Res,
) -> Res
unsafe fn modify_inplace<Res>( &mut self, f: impl FnOnce(&Mat, &mut Mat) -> Res, ) -> Res
Mat
or another similar object. By passing
a mutable reference to the Mat
to this function your closure will get called with the read reference and a write references
to the same Mat
. This is unsafe in a general case as it leads to having non-exclusive mutable access to the internal data,
but it can be useful for some performance sensitive operations. One example of an OpenCV function that allows such in-place
modification is imgproc::threshold
. Read more