【问题标题】:SelectKBest gives memory error even with sparse matrix即使使用稀疏矩阵,SelectKBest 也会出现内存错误
【发布时间】:2019-11-06 12:32:49
【问题描述】:

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

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

我尝试将 to_sparse 与 fill_value=0 一起使用,这似乎可以减少内存占用,但是当我调用 fit_transform 时出现内存错误

MemoryError Traceback(最近一次调用最后一次) 在 () 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 值密切相关(持续响应)

【问题讨论】:

    标签: machine-learning scikit-learn


    【解决方案1】:

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

    尝试二进制编码或散列编码,而不是进行一种热编码。 One-hot-encoding 具有线性增长率n,其中n 是分类特征中的类别数量。二进制编码具有log_2(n) 增长率,因此您将能够避免内存错误。如果没有,请尝试散列编码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      • 1970-01-01
      • 2010-12-15
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多