首页 > 解决方案 > 如何将大型数据集拆分为块并执行 fit_transform / fit_resample 和联合结果?

问题描述

我正在处理高度不平衡的大型数据集。我正在努力学习

smote_nc = SMOTENC(categorical_features=[df.dtypes=='category'], random_state=0)
X, y = smote_nc.fit_resample(X,y)    

却陷入了MemoryError

MemoryError: Unable to allocate 15.2 GiB for an array with shape (190824, 10724) and data type float64

有没有办法将此操作分块并将平衡结果保存到数据帧?

数据集示例如下所示在此处输入图像描述

标签: pythonmachine-learningscikit-learnimblearn

解决方案


Smote 是一种过采样方法。它会生成新的额外训练样本,帮助您克服原始数据集的不平衡。这种方法创建了一个非常大的数据集,不适合内存。您可以尝试的一件事是指定采样策略关键字。例如,对于二元分类,您可以将比率设置为 0.3。输出数据集应该更小,因此适合内存。

请注意,我没有测试过它。这只是一个建议。如果这不是您的选择,请随时粘贴一些示例数据,以便我们查看。


推荐阅读