Giter Site home page Giter Site logo

qipengwang / sparselowranksoftware Goto Github PK

View Code? Open in Web Editor NEW

This project forked from nicholasjohnson2020/sparselowranksoftware

0.0 0.0 0.0 74 KB

Software supplement for the paper "Sparse and Low Rank Matrix Decomposition: A Discrete Optimization Approach" by Dimitris Bertsimas, Ryan Cory-Wright and Nicholas A. G. Johnson

License: MIT License

Julia 100.00%

sparselowranksoftware's Introduction

SparseLowRankSoftware

Software supplement for the paper "Sparse Plus Low Rank Matrix Decomposition: A Discrete Optimization Approach" by Dimitris Bertsimas, Ryan Cory-Wright and Nicholas A. G. Johnson for which a preprint is available here.

Introduction

The software in this package is designed to provide high quality feasible solutions at scale and certifiably near-optimal solutions for small instances of the Sparse Plus Low Rank optimization problem given by

min ||U - X - Y||_F^2 + \lambda * ||X||_F^2 + \mu * ||Y||_F^2

s.t. rank(X) <= k_rank, ||Y||_0 <= k_sparse

using algorithms described in the paper "Sparse Plus Low Rank Matrix Decomposition: A Discrete Optimization Approach" by Dimitris Bertsimas, Ryan Cory-Wright and Nicholas A. G. Johnson. Specifically, alternating minimization is used to compute scalable high quality feasible solutions and a custom branch and bound algorithm that leverages alternating minimization and a novel convex relaxation is used to compute certfiably near-optimal solutions.

Installation and set up

In order to run this software, you must install a recent version of Julia from http://julialang.org/downloads/, and a recent version of the Mosek solver (academic licenses are freely available at https://www.mosek.com/products/academic-licenses/). The most recent version of Julia at the time this code was last tested was Julia 1.5.1 using Mosek version 9.2.

Several packages must be installed in Julia before the code can be run. These packages can be found in "SparseLowRankSoftware.jl". The code was last tested using the following package versions:

  • Distributions v0.25.0
  • JuMP v0.21.4
  • LowRankApprox v0.5.0
  • Mosek v1.1.3
  • MosekTools v0.9.4
  • SCS v0.7.1
  • StatsBase v0.33.8
  • TSVD v0.4.3

Use of the SLR_AM() and SLR_BnB() functions

The two key methods in this package are SLR_AM() and SLR_BnB(). They both take five required arguments: U, \mu, \lambda, k_sparse and k_rank, as well as several optional arguments which are described in the respective function docstring. The five required arguments correspond to the input data to the optimization problem.

Citing sparseLowRankSoftware.jl

If you use sparseLowRankSoftware.jl, we ask that you please cite the following paper:

@misc{bertsimas2021sparse,
      title={Sparse Plus Low Rank Matrix Decomposition: A Discrete Optimization Approach},
      author={Dimitris Bertsimas and Ryan Cory-Wright and Nicholas A. G. Johnson},
      year={2021},
      eprint={2109.12701},
      archivePrefix={arXiv},
      primaryClass={stat.ML}
}

Thank you

Thank you for your interest in SparseLowRankSoftware. Please let us know if you encounter any issues using this code, or have comments or questions. Feel free to email us anytime.

Dimitris Bertsimas [email protected]

Ryan Cory-Wright [email protected]

Nicholas A. G. Johnson [email protected]

sparselowranksoftware's People

Contributors

nicholasjohnson2020 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.