diff options
Diffstat (limited to 'ml/dlib/dlib/optimization/optimization_solve_qp3_using_smo_abstract.h')
-rw-r--r-- | ml/dlib/dlib/optimization/optimization_solve_qp3_using_smo_abstract.h | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/ml/dlib/dlib/optimization/optimization_solve_qp3_using_smo_abstract.h b/ml/dlib/dlib/optimization/optimization_solve_qp3_using_smo_abstract.h deleted file mode 100644 index 8efd7215b..000000000 --- a/ml/dlib/dlib/optimization/optimization_solve_qp3_using_smo_abstract.h +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (C) 2010 Davis E. King (davis@dlib.net) -// License: Boost Software License See LICENSE.txt for the full license. -#undef DLIB_OPTIMIZATION_SOLVE_QP3_USING_SMO_ABSTRACT_H_ -#ifdef DLIB_OPTIMIZATION_SOLVE_QP3_USING_SMO_ABSTRACT_H_ - -#include "../matrix/matrix_abstract.h" -#include "../algs.h" - -namespace dlib -{ - -// ---------------------------------------------------------------------------------------- - - class invalid_qp3_error : public dlib::error - { - /*! - WHAT THIS OBJECT REPRESENTS - This object is an exception class used to indicate that the values - of B, Cp, and Cn given to the solve_qp3_using_smo object are incompatible - with the constraints of the quadratic program. - - this->B, this->Cp, and this->Cn will be set to the invalid values used. - !*/ - - public: - invalid_qp3_error( const std::string& msg, double B_, double Cp_, double Cn_) : - dlib::error(msg), B(B_), Cp(Cp_), Cn(Cn_) {}; - - const double B; - const double Cp; - const double Cn; - }; - -// ---------------------------------------------------------------------------------------- - - template < - typename matrix_type - > - class solve_qp3_using_smo - { - /*! - REQUIREMENTS ON matrix_type - Must be some type of dlib::matrix. - - WHAT THIS OBJECT REPRESENTS - This object is a tool for solving the following quadratic programming - problem using the sequential minimal optimization algorithm: - - Minimize: f(alpha) == 0.5*trans(alpha)*Q*alpha + trans(p)*alpha - subject to the following constraints: - - for all i such that y(i) == +1: 0 <= alpha(i) <= Cp - - for all i such that y(i) == -1: 0 <= alpha(i) <= Cn - - trans(y)*alpha == B - - Where all elements of y must be equal to +1 or -1 and f is convex. - This means that Q should be symmetric and positive-semidefinite. - - - This object implements the strategy used by the LIBSVM tool. The following papers - can be consulted for additional details: - - Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for support vector - machines, 2001. Software available at http://www.csie.ntu.edu.tw/~cjlin/libsvm - - Working Set Selection Using Second Order Information for Training Support Vector Machines by - Fan, Chen, and Lin. In the Journal of Machine Learning Research 2005. - !*/ - - public: - - typedef typename matrix_type::mem_manager_type mem_manager_type; - typedef typename matrix_type::type scalar_type; - typedef typename matrix_type::layout_type layout_type; - typedef matrix<scalar_type,0,0,mem_manager_type,layout_type> general_matrix; - typedef matrix<scalar_type,0,1,mem_manager_type,layout_type> column_matrix; - - template < - typename EXP1, - typename EXP2, - typename EXP3, - long NR - > - unsigned long operator() ( - const matrix_exp<EXP1>& Q, - const matrix_exp<EXP2>& p, - const matrix_exp<EXP3>& y, - const scalar_type B, - const scalar_type Cp, - const scalar_type Cn, - matrix<scalar_type,NR,1,mem_manager_type, layout_type>& alpha, - scalar_type eps - ); - /*! - requires - - Q.nr() == Q.nc() - - is_col_vector(y) == true - - is_col_vector(p) == true - - p.size() == y.size() == Q.nr() - - y.size() > 0 - - sum((y == +1) + (y == -1)) == y.size() - (i.e. all elements of y must be equal to +1 or -1) - - alpha must be capable of representing a vector of size y.size() elements - - Cp > 0 - - Cn > 0 - - eps > 0 - ensures - - This function solves the quadratic program defined in this class's main comment. - - The solution to the quadratic program will be stored in #alpha. - - #alpha.size() == y.size() - - This function uses an implementation of the sequential minimal optimization - algorithm. It runs until the KKT violation is less than eps. So eps controls - how accurate the solution is and smaller values result in better solutions. - (a reasonable eps is usually about 1e-3) - - #get_gradient() == Q*(#alpha) - (i.e. stores the gradient of f() at #alpha in get_gradient()) - - returns the number of iterations performed. - throws - - invalid_qp3_error - This exception is thrown if the given parameters cause the constraints - of the quadratic programming problem to be impossible to satisfy. - !*/ - - const column_matrix& get_gradient ( - ) const; - /*! - ensures - - returns the gradient vector at the solution of the last problem solved - by this object. If no problem has been solved then returns an empty - vector. - !*/ - - }; - -// ---------------------------------------------------------------------------------------- - -} - -#endif // DLIB_OPTIMIZATION_SOLVE_QP3_USING_SMO_ABSTRACT_H_ - - - |