我有一些电子表格数据超过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值(连续响应)紧密相关
答案 0 :(得分:0)
所有内容都出现错误的原因是,要在Pandas或sklearn中执行任何操作,必须将整个数据集与临时步骤中的所有其他数据一起加载到内存中。
尝试执行二进制编码或哈希编码,而不是进行一种热编码。单次热编码的线性增长率为n
,其中n
是分类特征中类别的数量。二进制编码的增长速度为log_2(n)
,因此您可以避免存储错误。如果没有,请尝试哈希编码。