Sometimes also called the Netflix Problem, The main task in this problem is to fill or complete the missing entries of an incomplete matrix M.
In this project we explore and analyze several algorithms to solve the matrix completion problem such as Convex Relaxation, SVD and RPCA, and its corresponding implementation.
For a detailed explanation and formulation of such algoriths refer to the project report. We also made a presentation easy to understand, here project slides.
Here we show some results of the matrix completion applied to an image:
Original Image | Incomplete Image |
---|---|
![]() |
![]() |
After performing matrix completion on the incomplete image we get:
Original Image | Complete Image |
---|---|
![]() |
![]() |
And here applied to Movie Recommender System:
To reproduce the results of the experiments, follow the guidelines below:
A machine that supports the following packages
- Pillow
- numpy
- cvxpy
- scikit-image
- opencv-python
Installation:
- Clone this repository:
git clone https://github.com/jwilliamn/Matrix-Completion
cd Matrix-Completion
- Install requirements:
pip install -r requirements.txt
Run the notebook: NuclearNorm.ipynb
To change the data distortion modify the following parameter:
noise = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
Note: Slow
Run the notebook: SVT_image.ipynb
for Image Inpainting, and SVT_movie_recommender.ipynb
for Movie Recommender System
Change the following parameter for a different noise levels:
p = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
Run the notebook: RPCA.ipynb
-
For recommender system we used MovieLens Latest Datasets
Small version: 100,000 ratings and 3,600 tag applications applied to 9,000 movies by 600 users.
-
Image inpainting, we used the following picture
Note: Only SVT algorithm was applied to both datasets, while Nuclear norm (Convex relaxation) and Robust PCA were applied just to Image.