Changed the stopping condition for the structured svm to the one suggested

by the Joachims paper.  I also added another useful reference to the docs.

--HG--
extra : convert_revision : svn%3Afdd8eb12-d10e-0410-9acb-85c331704f74/trunk%404247
This commit is contained in:
Davis King 2011-05-04 20:36:44 +00:00
parent ae4c1bef39
commit 53737cb51d
2 changed files with 11 additions and 6 deletions

View File

@ -164,9 +164,7 @@ namespace dlib
bool should_stop = false;
if (current_objective_value == 0)
should_stop = true;
else if (current_error_gap/current_objective_value < eps)
if (current_risk_gap < eps)
should_stop = true;
if (should_stop && !skip_cache)

View File

@ -64,15 +64,21 @@ namespace dlib
and sample_risk(i,w) == max over all Y: LOSS(i,Y) + F(x_i,Y|w) - F(x_i,y_i|w)
and C > 0
For further information you should consult the following paper:
For an introduction to structured support vector machines you should consult
the following paper:
Predicting Structured Objects with Support Vector Machines by
By Thorsten Joachims, Thomas Hofmann, Yisong Yue, and Chun-nam Yu
For a more detailed discussion of the particular algorithm implemented by this
object see the following paper:
T. Joachims, T. Finley, Chun-Nam Yu, Cutting-Plane Training of Structural SVMs,
Machine Learning, 77(1):27-59, 2009.
Note that this object is essentially a tool for solving the 1-Slack structural
SVM with margin-rescaling. Specifically, see Algorithm 3 in the above referenced
paper.
!*/
typedef typename matrix_type::type scalar_type;
@ -101,7 +107,8 @@ namespace dlib
ensures
- returns the error epsilon that determines when training should stop.
Smaller values may result in a more accurate solution but take longer
to execute.
to execute. Specifically, the algorithm stops when the average sample
risk (i.e. R(w) as defined above) is within epsilon of its optimal value.
!*/
void set_max_cache_size (