1.简介
fancyimpute是python的第三方工具包,主要提供了各种矩阵计算、填充算法的实现。
2.安装过程与踩过的坑
Step1:判断python的版本【python 版本是3.7,以及是64位的】
Step2:在官网上下载对应版本的whl文件
官网:https://www.lfd.uci.edu/~gohlke/pythonlibs/
Ctrl+F查找ctrl+f 键查找 cvxopt、scs、ecos、CVXcanon、fastcache、cvxpy这几个库,找到对应Python 版本的文件进行下载,将这些文件都下在了 E:\anaconda\Scripts文件夹
Step3:在命令行依次pip安装各个whl文件
pip install cvxopt-1.2.5-cp36-cp36m-win_amd64.whl,报了路径的错,说是现在路径是C:\Windows\system32,该路径下自然没有whl文件
解决方案:在该问题添加文件的绝对路径
Step4:最后在pip下载fancyimpute库
安装过程出现问题
解决方案:
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通过快速交替最小二乘。