>However, to control the sensitivity and specificity of the SVM, I
apply
>
>an upper bound only on (+1) class (C+) without any upper bound on the
>(-1) class,...
>But, I do not know why the SVM give me always 100% Sensitivity and 0%
>Specificity,
Alizera,
What you are doing by setting C+ finite and C- infinite is the
following optimization:
(*) min 0.5||w||^2 + C+sum(xi+)
where xi+ are the slack variables for the +ve training examples.
This results in the standard SVM formulation with:
0 <= alpha_i <= C+ for +ve's (B1)
0 <= alpha_i for -ve's (B2)
i.e., the -ve's have infinite weight, thus enforcing FP=0
However, the SVM originally came in two flavours: separable or
non-separable, this combination might thus throw some SVM
packages. Using my own toolbox I obtained the same results as you,
i.e. FP=N, FN=0 which is contradictory to what's expected.
The reason is that the objective function is actually:
(**) min 0.5||w||^2 + C+sum(xi+) + C-sum(xi+)
and this is reduced to (*) by implicitly setting C- = 0 somewhere
deep in the code.
This results in enforcing:
0 <= alpha_i <= 0 for -ve's (B2')
Which obviously results in all points being predicted +ve, which
is what you observed and I reproduced.
The solution, therefore is to ensure that the bound (B2) is
explicitly enforced in the code, not indirectly via a cost ratio
or other quantity.
Rgds
Robert
PS. See also:
K. Veropoulos,C. Campbell, and N. Cristianini 'Controlling the
Sensitivity of Support Vector Machines'
although they somehow obtain FP increases as C+ increases, which
contradicts the above
|