Exact linesearch for LASSO

Simple Matlab code for exact step-size selection for LASSO objectives, and Exact linesearch for LASSO Tech. Report which describes the method.

Sparsified K-Means

faster K-means for big data (2015)
Uses fast Johnson-Lindenstrauss ideas to appropriately sample from big datasets. This is a one-pass algorithm that performs K-means clustering, suitable for distributed datasets. It also works on in-core problems and is much faster than Matlab's default K-means, and uses modern ideas on initialization. Hosted in github, BSD license.


C version of L-BFGS-B (2015)
A version of L-BFGS-B 3.0 in C, with Matlab mex wrapper. Hosted on github, BSD license.


fast robust PCA (2014)
A Matlab software package to solve all variants of robust PCA and stable principal component pursuit (SPCP) problems. This is actively maintained, and hosted on github under the BSD license.

Robust partial sketching

better sketching for big least-squaraes problems (2014)
Preliminary Matlab and Python code is available on request.


zero SR1 (2013)
A Matlab software package that is the only rigorous quasi-Newton method to solve the non-smooth LASSO problem. We use new results from convex analysis to show that a quasi-Newton update can be done in closed-form on a proximal objective. Existing approaches would solve the update via a slow iterative method, or smooth the problem, or apply quasi-Newton methods to the unsmooth problem in a heurstic fashion. Our solver is one of the most consistently fast LASSO solvers (it also solves non-linear least-squares problems, among others), and is faster than well-known algorithms like L-BFGS-B. This is also actively maintained on github under the BSD license.


Templates for First-Order Conic Solvers (2010)
A Matlab software package designed to solve all compressed sensing (and low-rank recovery) problems, but in fact it goes much farther and solves all conic programming problems. Joint work with Michael Grant and Emmanuel Candès. This is actively maintained, and under the BSD license. Paper


Nesterov's Algorithm (2009)
A Matlab software package designed to solve some constrained compressed sensing problems, when the measurement matrix is a partial isometry or not too large (however, the analysis dictionary may be very large). Joint work with Jerome Bobin and Emmanuel Candès. Paper


Singular Value Thresholding (2009)
A Matlab (with mex files) package for matrix completion via nuclear-norm minimization. Please email me if you have questions about the software (and include information on the verson of Matlab, the operating system, and the hardware – e.g. 32-bit or 64-bit). I am working on making it more compatible with 64-bit systems and compatible with complex-valued data. We have experimental versions using Nesterov stepsizes and even L-BFGS acceleration, but these are standard optimization tricks so we have not described them in papers. SVT is now one of the classic “reference” algorithms used in the field. The version provided is very simple and doesn't use a line search feature, and may even diverge if you set the stepsize above the legal limit. For this reason, we recommend using TFOCS, which is a more powerful version of SVT. Paper

Misc. documentation

Parallel computing

For working on a cluster with Portable Batch Script (PBS), and specifically for the SHC cluster at Caltech's CACR group, see my introductory SHC guide written in August 2008.


Here is a quick reference guide to BLAS in PDF which I have taken from netlib's version and used pkfix-helper and pkfix to make a PDF that actually has readable fonts.