Iteratively reweighted least squares
The method of iteratively re-weighted least squares (IRLS) is a numerical algorithm for minimizing any specified objective function using a standard weighted least squares method such as Gaussian elimination. Whereas techniques are widely available and highly optimized for weighted least squares, there are few techniques for minimization of other objective functions.
The IRLS is commonly used to perform robust regression with an M-estimator, as a way of mitigating the influence of outliers in an otherwise normally distributed data set. For example, by minimizing the least absolute error rather than the least square error.
Although not a linear regression problem, Weiszfeld's algorithm for approximating the geometric median can also be viewed as a special case of iteratively re-weighted least squares, in which the objective function is the sum of distances of the estimator from the samples.
The method
Starting with a diagonal weighting matrix equal to the identity matrix and a linear problem , the (weighted) linear equation
is formed. The least squares solution of this equation is then found using standard linear algebra methods. The residuals
are calculated and the weighting matrix is updated to some non-negative function of the residuals, r, e.g.,
With these new weights, the weighted least squares equation is re-solved and the residuals are re-calculated. The process can be iterated many times.
The solution to which this iterative process converges is the minimizer of an objective function related to the function . With the objective is the least absolute deviation .
Convergence
Convergence of the method is not guaranteed. For example, choosing f(r) = |r|p with p < −1 or p ≥ 1 may cause successive solutions to keep oscillating without converging to a limit.
References
- Stanford Lecture Notes on the IRLS algorithm by Antoine Guitton
- Numerical Methods for Least Squares Problems by Åke Björck (Chapter 4: Generalized Least Squares Problems.)
- Robust Estimation in Numerical Recipes in C by Press et al (requires the FileOpen plugin to view)