1.简介
fancyimpute是python的第三方工具包,主要提供了各种矩阵计算、填充算法的实现。
2.安装
在anaconda prompt上直接执行pip3 install fancyimpute会报错pip install ecos error “ Microsoft Visual C++ 14.0 is required.”,需要到https://www.lfd.uci.edu/~gohlke/pythonlibs/#ecos下载对应版本的whl文件,安装一下(pip3 install ecos‑*.whl),最后再执行之前的pip3 install fancyimpute即可。如果仍有问题,请参考PIP安装Python的scipy,scrapy等包出现“failed building wheel for xxx”问题解决办法。
3.应用示例
fancyimpute主要提供以下几种填充方式: KNN、 NuclearNormMinimization、SoftImpute、IterativeImputer、BiScaler,在调用这些算法时需要import一下,代码如下:
from fancyimpute import KNN, NuclearNormMinimization, SoftImpute, IterativeImputer, BiScaler
3.1 SimpleFill
用每列的平均值或中位数来填充缺失值。
3.2 KNN
最近邻估算,使用两行都具有观测数据的特征的均方差来对样本进行加权。然后用加权的结果进行特征值填充(疑问:对于连续特征一般是加权平均,对于离散特征一般是加权投票,该算法是如何区分需要填充的特征是离线变量还是连续型变量?)
X_filled_knn = KNN(k=3).fit_transform(X_incomplete)
3.3 SoftImpute
通过SVD分解的迭代软阈值处理来填充矩阵(https://web.stanford.edu/~hastie/swData/softImpute/vignette.html)。
X_incomplete_normalized = BiScaler().fit_transform(X_incomplete)
X_filled_softimpute = SoftImpute().fit_transform(X_incomplete_normalized)
3.4 IterativeSVD
通过迭代低秩SVD分解来填充矩阵。 原理类似于DNA微阵列缺失值估算方法中的SVDimpute。
3.5 IterativeImputer
通过以循环方式将具有缺失值的每个特征建模为其他特征的函数来估算缺失值的策略。
X_filled_ii = IterativeImputer().fit_transform(X_incomplete)
3.6 MatrixFactorization
将不完全矩阵直接分解为低秩“U”和“V”,对“U”元素进行L1稀疏性惩罚,对“V”元素进行L2惩罚。 通过梯度下降解决。
3.7 NuclearNormMinimization
矩阵填充使用凸优化来找到仍然匹配观测值的低秩解(http://statweb.stanford.edu/~candes/papers/MatrixCompletion.pdf)。对于大型矩阵来说非常缓慢。
X_filled_nnm = NuclearNormMinimization().fit_transform(X_incomplete)
3.8 BiScaler
通过行/列均值和标准偏差的迭代估计得到双重归一化矩阵。 不保证收敛但在实践中运作良好。 基本原理请参考矩阵完成和低秩SVD通过快速交替最小二乘。
参考文献: