MICE_Memory error_IterativeImputer_for缺少值的熊猫python

时间:2020-03-11 04:38:49

标签: python pandas

在python中实现迭代迭代器时,出现内存错误。 python中的迭代冲动(类似于R中的MICE技术的实现)将一行中的每个缺失值都视为因变量,并将该行中的所有其他特征视为自变量。然后,它对自变量应用回归并计算每行中因变量的缺失值。因此,与其使用平均值,中位数等代替缺失值,不如使用回归技术将缺失值填充为合成值

X_train

Col1  Col2  Col3  Col4 ...........Col100

X_train有100列,有25万行。

代码

from sklearn.experimental import enable_iterative_imputer
# now you can import normally from sklearn.impute
from sklearn.impute import IterativeImputer
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.linear_model import BayesianRidge
import random

imputer = IterativeImputer(BayesianRidge())
impute_data = pd.DataFrame(imputer.fit_transform(X_train))

错误

MemoryError                               Traceback (most recent call last)
<ipython-input-71-4b5dc3d8a845> in <module>
      1 imputer = IterativeImputer(BayesianRidge())
----> 2 impute_data = pd.DataFrame(imputer.fit_transform(X_train))

实施IterativeImputer时出现内存错误

环境

  • Python 3.7
  • Jupyter笔记本
  • Anaconda Navigator
  • 联想8GB RAM笔记本电脑
  • 英特尔CORE i5第八代处理器。
  • 未使用GPU(scikit不支持GPU)

1 个答案:

答案 0 :(得分:0)

当我们使用IterativeImputer时,有时在Jupyter笔记本等中内存不足以专门处理所有列数据(如果数据量很大)。因此,在这种情况下,实现迭代式干扰的方法是将数据分解为可管理的块。

imputer = IterativeImputer(BayesianRidge())

将数据划分为子集:

subset1=X_train[['Col1', 'Col2', 'Col3',...'Col10']]
subset2=X_train[['Col1', 'Col11', 'Col12',...'Col20']]  #assuming col1 is key column
and so on till Col100 is reached

impute_data_subset1 = pd.DataFrame(imputer.fit_transform(subset1))
impute_data_subset2 = pd.DataFrame(imputer.fit_transform(subset2))
impute_data_subset3 = pd.DataFrame(imputer.fit_transform(subset3))

依次类推,然后加入数据

subset_1_to_2= pd.merge(impute_data_subset1,impute_data_subset2, on='Col1')
subset_1_to_3= pd.merge(impute_data_subset3, subset_1_to_2,on='Col1')
subset_1_to_4= pd.merge(impute_data_subset4, subset_1_to_3,on='Col1')

.........
subset_1_to_10 = pd.merge(impute_data_subset9, subset_1_to_9,on='Col1')

以此类推

subset_1_to_10包含可以直接使用的总估算数据帧。