[R] kernlab's ksvm method freeze

Heiko Strathmann heiko.strathmann at googlemail.com
Mon Nov 30 23:24:54 CET 2009


Sorry, heres the message:

Hi

yes the freeze is rather a result of the kernelMatrix being non-positive
definite, have a look at the eigenvalues of kernelMatrix
with eigs and you will see even small negative values. This is usualy
the result of small numerical inacuracies in the computation of the
kernel matrix that normally do not have an effect but can cause
problems.
The issue is amplified by the fact that you are doing 10-fold cross
validation and in effect training 220 models (sampled from the
kernelMatrix) in a 20 fold loop.

You can get around this issue by adding a small epsilon to the diagonal
of your kernelMatrix thus making sure that all sampled kernelMatrices
are positive semidefinite i.e.

diag(kernelMatrix) <- diag(kernelMatrix) + 0.05

seems to do the trick for me.

regards
Alexandros



Am Montag, den 30.11.2009, 11:22 +0100 schrieb Heiko Strathmann:
> Ok, i reported it.
> thanks for trying it out again.
> 
> Am 30. November 2009 11:06 schrieb Uwe Ligges
> <ligges at statistik.tu-dortmund.de>:
>         My apologies, that must have been a copy&paste error and the
>         essential argument got lost. I can reproduce it now under
>         R-2.10.0 both Windows and Linux.
>         
>         Please report your findings to the package maintainer who
>         might be able to debug this under Linux (probably easier than
>         under Windows).
>         
>         Best,
>         
>         
>         Uwe Ligges
>         
>         
>         
>         
>         
>         
>         Heiko Strathmann wrote:
>                 I tried out the code you wrote, it also works for me,
>                 but it lacks a
>                 parameter i use in my code.
>                 
>                 The problem (at this computer) seems to be this
>                 "cross"-parameter of
>                 ksvm - if I, for example, add the parameter cross=10,
>                 i get the old
>                 problem:
>                 
>                 library("kernlab")
>                 load("freeze_workspace.RDATA")
>                 replicate(10, ksvm(kernel="matrix", kernelMatrix,
>                 trainingDataYs, type="C-svc", C=2, cross=10))
>                 
>                 gets me a frozen R process, CTRL-C does not work
>                 anymore, and the only thing left is to kill it.
>                 
>                 (for cross < 4, the thing still works)
>                 
>                 (I also just reinstalled my Ubuntu and R)
>                 
>                 Heiko Strathmann
>                 
>                 
>                 Am Sonntag, den 29.11.2009, 19:52 +0100 schrieb Uwe
>                 Ligges:
>                         Heiko Strathmann wrote:
>                                 Hello uwe,
>                                 Thanks for trying out.
>                                 the freeze happens after about 10 to
>                                 20 iterations. Did you try as many?
>                         I just tried again:
>                         
>                         library("kernlab")
>                         load("freeze_workspace.RDATA")
>                         replicate(100, ksvm(kernel="matrix",
>                         kernelMatrix, trainingDataYs, type="C-svc",
>                         C=2))
>                         
>                         and everything is still fine (same on Linux).
>                         
>                         Uwe Ligges
>                         
>                         
>                         
>                                 Am Sonntag, den 29.11.2009, 17:22
>                                 +0100 schrieb Uwe Ligges:
>                                         I just tried
>                                         
>                                         ksvm(kernel="matrix",
>                                         kernelMatrix, trainingDataYs,
>                                         type="C-svc", cross=10, C=2)
>                                         
>                                         several times on both
>                                         workspaces and both returned
>                                         some results after a couple of
>                                         seconds under the same
>                                         versions (R version 2.10.0 and
>                                         kernlab 0.9-9.) under Windows
>                                         XP.
>                                         
>                                         There mist be something else
>                                         going on...
>                                         
>                                         Best wishes,
>                                         Uwe Ligges
>                                         
>                                         
>                                         
>                                         
>                                         
>                                         Heiko Strathmann wrote:
>                                                 Hello again,
>                                                 
>                                                 the freeze seems to
>                                                 depend on the kernel
>                                                 matrix.
>                                                 With another kernel
>                                                 matrix of similiar
>                                                 size, gernerated with
>                                                 the same
>                                                 kernel, but on another
>                                                 dataset, there is no
>                                                 freeze.
>                                                 
>                                                 I have put a workspace
>                                                 with the working
>                                                 matrix and one with
>                                                 the freezing
>                                                 matrix online for
>                                                 testing (see old
>                                                 email)
>                                                 http://www-stud.uni-due.de/~sfhestra/
>                                                 
>                                                 In my eyes this
>                                                 behavior is really
>                                                 strange, and i have no
>                                                 clue, what to
>                                                 do to solve this.
>                                                 
>                                                 Regards,
>                                                 Heiko Strathmann
>                                                 
>                                                 Am Sonntag, den
>                                                 29.11.2009, 14:21
>                                                 +0100 schrieb Heiko
>                                                 Strathmann:
>                                                         Hello,
>                                                         
>                                                         I am using
>                                                         kernlab to do
>                                                         some binary
>                                                         classification
>                                                         on aminoacid
>                                                         strings.
>                                                         
>                                                         I am using a
>                                                         custom kernel,
>                                                         so i use the
>                                                         kernel="matrix" option of the
>                                                         ksvm method.
>                                                         
>                                                         My
>                                                         (normalized)
>                                                         kernel matrix
>                                                         is of size
>                                                         1309*1309, my
>                                                         results vector
>                                                         has the same
>                                                         length.
>                                                         
>                                                         I am using
>                                                         C-svc.
>                                                         
>                                                         My kernlab
>                                                         call is
>                                                         something
>                                                         similiar to
>                                                         this:
>                                                         
>                                                         ksvm(kernel="matrix", kernelMatrix, trainingDataYs, type="C-svc",
>                                                         cross=10, C=2)
>                                                         
>                                                         To this point,
>                                                         everything
>                                                         works fine.
>                                                         
>                                                         But now, i
>                                                         want to do a
>                                                         search for a
>                                                         good C
>                                                         Parameter, so
>                                                         I call the
>                                                         ksvm method
>                                                         multiple times
>                                                         in a loop,
>                                                         with changing
>                                                         parameters.
>                                                         This loop
>                                                         freezes after
>                                                         a few
>                                                         iterations.
>                                                         
>                                                         
>                                                         The following
>                                                         simple example
>                                                         also freezes
>                                                         after few
>                                                         iterations
>                                                         (the
>                                                         number
>                                                         varies). See
>                                                         that the ksvm
>                                                         call is always
>                                                         the same in
>                                                         every
>                                                         iteration:
>                                                         
>                                                         for (i in
>                                                         c(1:20)) {
>                                                         
>                                                          print(i)
>                                                         
>                                                          ksvm(kernel="matrix", kernelMatrix, trainingDataYs,
>                                                         type="C-svc",
>                                                         cross=10, C=2)
>                                                         }
>                                                         
>                                                         
>                                                         Does anybody
>                                                         have an idea
>                                                         what causes
>                                                         this? I am new
>                                                         to R and
>                                                         kernlab,
>                                                         perhaps i
>                                                         missed
>                                                         something?
>                                                         
>                                                         I put my
>                                                         workspace
>                                                         online, which
>                                                         contains the
>                                                         kernel matrix
>                                                         and the
>                                                         training
>                                                         labels. Simply
>                                                         load
>                                                         workspace,
>                                                         kernlab
>                                                         library and
>                                                         paste the
>                                                         example code
>                                                         to reproduce:
>                                                         http://www-stud.uni-due.de/~sfhestra/
>                                                         
>                                                         I am using R
>                                                         version 2.10.0
>                                                         and kernlab
>                                                         0.9-9.
>                                                         
>                                                         Thanks for
>                                                         your help!
>                                                         
>                                                         Regards,
>                                                         Heiko
>                                                         Strathmann
>                                                         
>                                                         
>                                                 ______________________________________________
>                                                 R-help at r-project.org
>                                                 mailing list
>                                                 https://stat.ethz.ch/mailman/listinfo/r-help
>                                                 PLEASE do read the
>                                                 posting guide
>                                                 http://www.R-project.org/posting-guide.html
>                                                 and provide commented,
>                                                 minimal,
>                                                 self-contained,
>                                                 reproducible code.
>                                 
>                 
>                 
>




More information about the R-help mailing list