【问题标题】:MICE_Memory error_IterativeImputer_for missing values Pandas pythonMICE_Memory error_IterativeImputer_for 缺失值 Pandas python
【发布时间】:2020-03-11 15:18:51
【问题描述】:

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

X_train

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

X_train 有 100 列,250k 行。

代码

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 导航器
  • 联想 8GB RAM 笔记本电脑
  • 英特尔 CORE i5 第 8 代处理器。
  • GPU 未使用(scikit 不支持 GPU)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    当我们使用 IterativeImputer 时,有时 Jupyter notebook 等中的内存不足以处理所有列数据,特别是如果数据很大。因此,在这种情况下实现迭代 imputer 的方法是将数据分解为可管理的块。

    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 包含您可以直接使用的总估算数据帧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 2020-12-13
      相关资源
      最近更新 更多