[SciPy-User] weighted griddata

Pauli Virtanen pav@iki...
Fri Sep 17 04:19:06 CDT 2010


Thu, 16 Sep 2010 21:41:28 -0700, Adam Ryan wrote:
[clip]
> > You may need to fiddle with the smoothing parameter `s=...` for
> > SmoothBivariateSpline.
> 
> I was using interpolate.SmoothBivariateSpline previously and had good
> results when it worked, but I struggled with the smoothing parameter
> for so long I had to put it down.  I could not figure out how to
> consistently calculate/estimate/predict a smoothing factor (from the
> data) that was not too low (and never return) or too high (and give
> blocky results).
> 
> Is there a way to calculate an optimal smoothing factor from a data set?

If there is, it's probably explained in P. Dierckx's book
http://books.google.fi/books?id=-RIQ3SR0sZMC about FITPACK.

[clip]
>> No, I tell a lie, the Clough-Tocher 2D spline could easily be used for
>> weighed data smoothing. The only change needed would be to adjust the
>> gradient estimation routine ...
>
> Yea, that's what I was thinking, ha ha, I just don't know how. 
> Pointers?

You'd have to change the approach in the _estimate_gradients_2d_global 
function to also minimize some norm over the data points:

http://projects.scipy.org/scipy/browser/trunk/scipy/interpolate/
interpnd.pyx#L270

The optimization problem solved iteratively at each vertex should be 
changed to also optimize the function value, and a quadratic penalty term 
should be added to the error functional. (Quadratic, since we want the 
optimization problem to remain linear.)

The main problem here is choosing the weights of the error term for each 
vertex in a way that makes sense. I suppose some good recipe for this can 
be found in the literature.

Actually, I think I'll take a look at this during the weekend, it sounds 
interesting (some of us have weird tastes in fun...). I won't promise 
anything, though :)

>> I think the rbf routines might be appropriate.
> 
> I've used the rbf routines to ortho-rectify our barrel-distorted images
> (where the data comes from), but here the positional data is not based
> around a center point.  Or maybe I don't understand the rbf stuff fully.
> How would I use weights with the rbf stuff?

You'd probably need to add the weights to the distance function, and 
somehow balance it against the smooth parameter.

The distance function you pass to Rbf() has the data points always along 
the last axis, so weights can in principle be added.

Anyway, I guess some inverse distance weighting scheme (i.e. the same 
thing as simple kriging) would be more efficient than RBF. The RBF in 
Scipy always looks at all points, whereas IDW's typically look only at N 
nearest neighbours, which is probably more efficient and more stable.

[clip]
> For clarification, all the points of a line have the same t value, but
> each point has a weight of 0 to 1.  Would LSQBivariateSpline be any
> better than SmoothBivariateSpline?  Again, the smoothing factor drove me
> nuts.

LSQBivariateSpline might be better. I somehow suppose part of the 
problems with FITPACK come from the knot selection, at least Chuck's 
comment points to that direction...

Now, I really wonder: is the spline fitting problem inherently difficult, 
or is there just some simple bug in FITPACK making it work like this?

-- 
Pauli Virtanen



More information about the SciPy-User mailing list