[pymvpa] GPR woes

Per B. Sederberg persed at princeton.edu
Sat Mar 28 13:51:08 UTC 2009


Hi Scott:

You are correct on all accounts.  epsilon is currently hard-coded and
either of your proposed solutions would help to make GPR work more
frequently/consistently.  I'll try out some combination of both and
report back.

Best,
Per

On Sat, Mar 28, 2009 at 9:46 AM, Scott Gorlin <gorlins at mit.edu> wrote:
>
> Epsilon is the Tikhonov regularization parameter, no?  (Haven't read
> much about this classifier, but it looks similar to the RLS solution to
> me...).  As such it should be adjustable to enable punishing overfit
> solutions, so maybe it should actually be a formal parameter.
>
> If the default returns a LinAlg error, you could also stick the cholesky
> decomposition in a finite loop where epsilon is doubled each time
> (though not too many iterations...)
>
> On a wild tangent, also check that your kernel matrix (here self._C) is
> double precision, since 1e-20 is close to the precision limit for single
> floats.
>
> Per B. Sederberg wrote:
>> Hi Everybody (and Emanuele in particular):
>>
>> I've tried GPR on about 5 different datasets and I've never actually
>> gotten it to run through an entire cross validation process.  I always
>> get the following error:
>>
>> /home/per/lib/python/mvpa/clfs/gpr.pyc in _train(self, data)
>>     308             except SLAError:
>>     309                 epsilon = 1.0e-20 * N.eye(self._C.shape[0])
>> --> 310                 self._L = SLcholesky(self._C + epsilon, lower=True)
>>     311                 self._LL = (self._L, True)
>>     312                 pass
>>
>> /usr/lib/python2.5/site-packages/scipy/linalg/decomp.pyc in
>> cholesky(a, lower, overwrite_a)
>>     552     potrf, = get_lapack_funcs(('potrf',),(a1,))
>>     553     c,info = potrf(a1,lower=lower,overwrite_a=overwrite_a,clean=1)
>> --> 554     if info>0: raise LinAlgError, "matrix not positive definite"
>>     555     if info<0: raise ValueError,\
>>     556        'illegal value in %-th argument of internal potrf'%(-info)
>>
>> LinAlgError: matrix not positive definite
>>
>> I think Yarik mentioned changing epsilon or something like that, but
>> it seems to me that having to change source code to tweak a classifier
>> to not crash is not ideal.
>>
>> Do you have any suggestions for how to fix this?  I've been tantalized
>> with some very good transfer errors in the folds that GPR was able to
>> complete before crashing.  Is there a permanent change we could make
>> to the GPR code to make it more stable across datasets?  Or could we
>> turn epsilon into a configurable variable when setting up the
>> classifier?  If so, what should I change epsilon to in order to see if
>> I can get it to run?
>>
>> Thanks,
>> Per
>>
>> _______________________________________________
>> Pkg-ExpPsy-PyMVPA mailing list
>> Pkg-ExpPsy-PyMVPA at lists.alioth.debian.org
>> http://lists.alioth.debian.org/mailman/listinfo/pkg-exppsy-pymvpa
>>
>
>
>
> _______________________________________________
> Pkg-ExpPsy-PyMVPA mailing list
> Pkg-ExpPsy-PyMVPA at lists.alioth.debian.org
> http://lists.alioth.debian.org/mailman/listinfo/pkg-exppsy-pymvpa
>



More information about the Pkg-ExpPsy-PyMVPA mailing list