为了决定哪种策略是合适的,重要的是调查导致缺失值的机制,以确定缺失数据是完全随机缺失 (MCAR)、随机缺失 (MAR) 还是非随机缺失 (MNAR) )。
- MCAR意味着数据的缺失与任何值之间没有关系。
- MAR意味着缺失值的倾向与观察到的数据之间存在系统关系,但与缺失数据无关。
- MNAR意味着一个值的缺失倾向与其值之间存在系统的关系。
鉴于您所说的可能是其MCAR。(假设您已经尝试自己找到这种倾向(领域知识)或在缺失的列和其他特征之间建立模型但没有这样做)
其他一些估算数据的技术,我建议查看 KNN 估算(根据经验总是可靠的结果),但您应该尝试不同的方法
精美的估算支持这种估算,使用以下 API:
from fancyimpute import KNN
# Use 10 nearest rows which have a feature to fill in each row's missing features
X_fill_knn = KNN(k=10).fit_transform(X)
以下是此软件包还支持的不同方法:
•SimpleFill:用每列的平均值或中值替换缺失的条目。
•KNN:最近邻插补,使用两行都有观测数据的特征的均方差对样本进行加权。
•SoftImpute:通过SVD分解的迭代软阈值完成矩阵。受 R 的 softImpute 包的启发,该包基于 Mazumder 等人的用于学习大型不完整矩阵的谱正则化算法。人。
•IterativeSVD:通过迭代低秩 SVD 分解完成矩阵。应该类似于 Troyanskaya 等人的 DNA 微阵列缺失值估计方法中的 SVDimpute。人。
•MICE:通过链式方程重新实现多重插补。
•MatrixFactorization:将不完整矩阵直接分解为低秩U 和V,对U 的元素进行L1 稀疏惩罚,对V 的元素进行L2 惩罚。通过梯度下降求解。
•NuclearNormMinimization:Emmanuel Candes 和Benjamin Recht 使用cvxpy 通过凸优化简单实现精确矩阵完成。对于大型矩阵来说太慢了。
•BiScaler:行/列均值和标准差的迭代估计以获得双重归一化矩阵。不保证收敛,但在实践中效果很好。通过快速交替最小二乘法取自矩阵完成和低秩 SVD。
编辑:MICE 已被弃用,他们将其移至迭代插补下的 sklearn