One of 640 (as of May 2020) Mathworks contributors to have a submission with 25 five star ratings “5-Star Galaxy Level 5”.

Github software

Most of our group’s latest software is on github. These are github project or user pages for students who have been in our research group or collaborated with our group:

A few specific software packages

  • Misc Python optimization routines for classic first and second order methods, as part of the optimization class I teach. I think there may be a bug in the one of the linesearch options, but otherwise it should work well.

  • Random sketching operators in Matlab and Python, as part of the class I teach. This has Gaussian sketch, Fast Johnson Lindenstrauss (with FFT or a fast Hadamard), and count sketch. The Hadamard and count sketch have C functions to make them extra fast. (For the tensor product sketches, which is more complicated, see Osman’s github page ).

  • 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. A version for GMM, written in Python and C, is also available.

  • L-BFGS-B-C 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.

  • fastRPCA 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.

  • zeroSR1 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.

  • TFOCS 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

  • NESTA 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. You can download the paper here: Paper. A local version of the package is hosted here:

  • SVD 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 (UPDATE: June 2019, I have put SVT code on github, but maintenance is minimal)

Misc. documentation