# [SciPy-User] scipy.interpolate.rbf sensitive to input noise ?

josef.pktd@gmai... josef.pktd@gmai...
Fri Feb 19 10:41:06 CST 2010

```On Fri, Feb 19, 2010 at 11:26 AM, denis <denis-bz-gg@t-online.de> wrote:
> On Feb 18, 4:48 pm, Robert Kern <robert.k...@gmail.com> wrote:
>> On Thu, Feb 18, 2010 at 09:19, denis <denis-bz...@t-online.de> wrote:
>
>> > Running rbf on 100 1d random.uniform input points
>> > (after changing the linalg.solve in rbf.py to lstsq)
>>
>> Why would you do this? This does not magically turn Rbf interpolation
>> into a smoothing approximation. Use the "smooth" keyword to specify a
>> smoothing parameter.
>
> Robert,
>  i'm interpolating  y = np.sin(x) + np.random.normal( 0,  .1 ), not
> random noise.
> The idea was to look at gaussian vs thin-plate;
> true, that 1d snippet doesn't say much,
> but my 2d plots were so noisy that I went down to 1d.
>
> Use "smooth" ? rbf.py just does
>    self.A = self._function(r) - eye(self.N)*self.smooth
> and you don't know A .

rbf is a global interpolator, and as Robert said for some cases you
get very unstable results.

with a large number of points self._function(r)  is not very well
behaved and you need the penalization to make it smoother. In a
variation of your example, I printed out the eigenvalues for self.A
and they don't look nice without penalization.
There are still some strange things that I don't understand with the
behavior rbf, but when I looked at it in the past, I got better
results by using only local information, i.e. fit rbf only to a
neighborhood of the points, although I think thinplate did pretty well
also with a larger number of points.

Josef

>
> Bytheway (googling), http://www.farfieldtechnology.com/products/toolbox
> ...
> have an O(N lnN) FastRBF TM in matlab, \$
>
> cheers
>  -- denis
> _______________________________________________
> SciPy-User mailing list
> SciPy-User@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
```