SelectKBest即使使用稀疏矩阵也会产生内存错误

时间:2019-06-24 16:59:29

标签: machine-learning scikit-learn

我有一些电子表格数据超过GB,并且希望使用随机森林。在这里回答了其他一些问题后,我能够调整算法以处理我的数据,但不幸的是要获得最佳性能,我需要对分类特征进行一次热编码,现在我的输入矩阵具有3000多个特征,导致存储错误

我正尝试减少这些功能,因此我将SelectKBest与chi2一起使用,根据文档,它将处理我的稀疏矩阵,但仍然出现内存错误。

我尝试将to_sparse与fill_value = 0结合使用,这似乎减少了内存占用,但是当我调用fit_transform时却遇到了内存错误

MemoryError跟踪(最近一次呼叫最近)  在()中       4 Y_sparse = df_processed.loc [:,'Purchase']。to_sparse(fill_value = 0)       5 ----> 6 X_new = kbest.fit_transform(X_sparse,Y_sparse)

kbest = SelectKBest(mutual_info_regression, k = 5)
X_sparse = df_processed.loc[:,df_processed.columns != 'Purchase'].to_sparse(fill_value=0)
Y_sparse = df_processed.loc[:,'Purchase'].to_sparse(fill_value=0)

X_new = kbest.fit_transform(X_sparse, Y_sparse)

我只是想将3000个特征减少到更易于管理的程度,例如20个,这些特征与我的Y值(连续响应)紧密相关

1 个答案:

答案 0 :(得分:0)

所有内容都出现错误的原因是,要在Pandas或sklearn中执行任何操作,必须将整个数据集与临时步骤中的所有其他数据一起加载到内存中。

尝试执行二进制编码或哈希编码,而不是进行一种热编码。单次热编码的线性增长率为n,其中n是分类特征中类别的数量。二进制编码的增长速度为log_2(n),因此您可以避免存储错误。如果没有,请尝试哈希编码。