问题描述
我使用小鼠插补来填充机器学习数据集的缺失值。数据集很大,11726412 行 30 列。以下是此数据中缺失值的数量:
In [2]:X.isnull().sum()
Out[2]:
time 0
count_neshan 0
count_scat_o 4059792
count_avl_en_o 7364664
count_avl_ex_o 7364664
count_anpr_o 9646200
karmnd_dr_mhl_shghl_o 0
veh_own_o 0
n_bussi_unit_o 0
park_area_o 0
area_o 0
office_land_use_o 0
n_office_o 0
commercial_unit_o 0
n_commercial_o 0
schl_o 0
count_scat_d 4059792
count_avl_en_d 7364664
count_avl_ex_d 7364664
count_anpr_d 9646200
karmnd_dr_mhl_shghl_d 0
veh_own_d 0
n_bussi_unit_d 0
park_area_d 0
area_d 0
office_land_use_d 0
n_office_d 0
commercial_unit_d 0
n_commercial_d 0
schl_d 0
dtype: int64
我运行此代码来估算数据集中的缺失值:
from impyute.imputation.cs import mice
imputed_train_data = mice(X.values)
这是我第一次使用鼠标,我无法估计运行所需的时间。我在 8 天前执行了此代码,它仍在运行。
我找不到有关老鼠运行时间的任何信息。我只知道“它很慢”。 如果任何对该主题有经验的人能够估计时间或建议考虑到大数据集的更快的替代方案,我将不胜感激。
解决方法
根据 docs print()
运行直到收敛定义为所有估算值的连续更新之间的变化小于 10%。这意味着它何时停止是不可预测的。我的直觉会说,插补更新无小于 10% 的概率会因大量缺失值而变得非常小。
看到 source code 实际上相当简单,您可以编写自己的版本来限制迭代次数。似乎源代码中的一条评论实际上表明在某些时候原始实现就是这种情况:
#第5步:重复第2-4步直到收敛(100是任意的)
您可以将 mice
替换为 while all(converged):
。