Locally Weighted Projection Regression (LWPR) is a recent algorithm that achieves nonlinear function approximation in high dimensional spaces with redundant and irrelevant input dimensions. At its core, it uses locally linear models, spanned by a small number of univariate regressions in selected directions in input space. A locally weighted variant of Partial Least Squares (PLS) is employed for doing the dimensionality reduction. This nonparametric local learning system 1) learns rapidly with second order learning methods based on incremental training, 2) uses statistically sound stochastic cross validation to learn, 3) adjusts its weighting kernels based on local information only, 4) has a computational complexity that is linear in the number of inputs, and 5) can deal with a large number of - possibly redundant - inputs, as shown in evaluations with up to 50 dimensional data sets. To our knowledge, this is the first truly incremental spatially localized learning method to combine all these properties.
We have implemented the LWPR algorithm in plain ANSI C, with wrappers and bindings for C++, Matlab/Octave, and Python (using Numpy). LWPR models can be stored in platform-dependent binary files or optionally in platform-independent, human-readable XML files. The latter functionality relies on the XML parser Expat as the only dependency.
LWPR models are fully interchangeable between the different implementations, that is, you could train a regression model in Matlab, store it to a file, and load it from a Python script or C++ program to calculate predictions. Just as well, you could train a model from real robot data collected online in C/C++, and later inspect the LWPR model comfortably within Matlab.
- Changes to previous version:
- Corrected typo in lwpr.c (wrong function name for multi-threaded helper function on Unix systems) Thanks to Jose Luis Rivero
Other available revisons
Version Changelog Date 1.2.4
February 6, 2012, 19:55:41 1.2.3
Corrected bugs in the Python module (missing Py_DECREF in functions returning multiple numpy arrays that led to a memory leak, as well as bad preprocessor directive "USE_EXPAT" instead of "HAVE_LIBEXPAT") Thanks to Benjamin Dittes
Corrected bad preprocessor directive (see above) in C++ wrapper lwpr.hh. Also added casts between signed and unsigned integers in lwpr.hh and cross.cc Thanks to Peter Pastor, Robert Nickl and Adrian Haith
November 12, 2009, 11:57:54 1.2.2
- Corrected bugs in the Python module (for accessing the "n_pruned" and "num_rfs" members) Thanks to Arjan Gijsberts
- Fixed a missing matrix transpose in the visualisation part of "test_lwpr_nD.m"
- Fixed two missing #includes in C++ wrapper and example that resulted in problems with GCC >= 4.3 Thanks to Dan Grollman
June 29, 2009, 20:20:44 1.2.1
Initial Announcement on mloss.org.
February 13, 2008, 16:45:01
Leave a comment
You must be logged in to post comments.