在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时出现内存错误
环境
答案 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包含可以直接使用的总估算数据帧。