A variety of matrix completion and imputation algorithms implemented in Python 3.6.
To install:
pip install fancyimpute
If you run into tensorflow
problems and use anaconda, you can try to fix them with conda install cudatoolkit
.
Important Caveats
(1) This project is in "bare maintenance" mode. That means we are not planning on adding more imputation algorithms or features (but might if we get inspired). Please do report bugs, and we'll try to fix them. Also, we are happy to take pull requests for more algorithms and/or features.
(2) IterativeImputer
started its life as a fancyimpute
original, but was then merged into scikit-learn
and we deleted it from fancyimpute
in favor of the better-tested sklearn
version. As a convenience, you can still from fancyimpute import IterativeImputer
, but under the hood it's just doing from sklearn.impute import IterativeImputer
. That means if you update scikit-learn
in the future, you may also change the behavior of IterativeImputer
.
Usage
from fancyimpute import KNN, NuclearNormMinimization, SoftImpute, BiScaler
X_filled_knn = KNN(k=3).fit_transform(X_incomplete)
X_filled_nnm = NuclearNormMinimization().fit_transform(X_incomplete)
X_incomplete_normalized = BiScaler().fit_transform(X_incomplete)
X_filled_softimpute = SoftImpute().fit_transform(X_incomplete_normalized)
nnm_mse = ((X_filled_nnm[missing_mask] - X[missing_mask]) ** 2).mean()
print("Nuclear norm minimization MSE: %f" % nnm_mse)
softImpute_mse = ((X_filled_softimpute[missing_mask] - X[missing_mask]) ** 2).mean()
print("SoftImpute MSE: %f" % softImpute_mse)
knn_mse = ((X_filled_knn[missing_mask] - X[missing_mask]) ** 2).mean()
print("knnImpute MSE: %f" % knn_mse)
Algorithms
-
SimpleFill
: Replaces missing entries with the mean or median of each column.
-
KNN
: Nearest neighbor imputations which weights samples using the mean squared difference
on features for which two rows both have observed data.
-
SoftImpute
: Matrix completion by iterative soft thresholding of SVD decompositions. Inspired by the softImpute package for R, which is based on Spectral Regularization Algorithms for Learning Large Incomplete Matrices by Mazumder et. al.
-
IterativeImputer
: A strategy for imputing missing values by modeling each feature with missing values as a function of other features in a round-robin fashion. A stub that links to scikit-learn
's IterativeImputer.
-
IterativeSVD
: Matrix completion by iterative low-rank SVD decomposition. Should be similar to SVDimpute from Missing value estimation methods for DNA microarrays by Troyanskaya et. al.
-
MatrixFactorization
: Direct factorization of the incomplete matrix into low-rank U
and V
, with per-row and per-column biases, as well as a global bias. Solved by SGD in pure numpy.
-
NuclearNormMinimization
: Simple implementation of Exact Matrix Completion via Convex Optimization by Emmanuel Candes and Benjamin Recht using cvxpy. Too slow for large matrices.
-
BiScaler
: Iterative estimation of row/column means and standard deviations to get doubly normalized
matrix. Not guaranteed to converge but works well in practice. Taken from Matrix Completion and Low-Rank SVD via Fast Alternating Least Squares.
Citation
If you use fancyimpute
in your academic publication, please cite it as follows:
@software{fancyimpute,
author = {Alex Rubinsteyn and Sergey Feldman},
title={fancyimpute: An Imputation Library for Python},
url = {https://github.com/iskandr/fancyimpute},
version = {0.7.0},
date = {2016},
}