【问题标题】:How to make polynomial features using sparse matrix in Scikit-learn如何在 Scikit-learn 中使用稀疏矩阵制作多项式特征
【发布时间】:2018-06-20 07:55:02
【问题描述】:

我正在使用 Scikit-learn 将我的训练数据转换为多项式特征,然后将其拟合到线性模型。

model = Pipeline([('poly', PolynomialFeatures(degree=3)),
              ('linear', LinearRegression(fit_intercept=False))])
model.fit(X, y)

但是会报错

TypeError: A sparse matrix was passed, but dense data is required

我知道我的数据是sparse matrix 格式。所以当我尝试将我的数据转换为dense matrix 时,它会显示memory error。因为我的数据很大(50k~)。由于这些大量数据,我无法将其转换为密集矩阵。

我还找到了Github Issues 请求此功能的位置。但仍未实施。

那么请有人告诉我如何在 Scikit-learn 的 PolynomialFeatures 中使用稀疏数据格式而不将其转换为密集格式?

【问题讨论】:

  • 正如您已经在 github 问题上讨论过的那样,我们在 stackoverflow 上几乎无能为力。也许您可以尝试实现自己的版本,并在遇到困难时来这里。
  • 好像开发者已经为the same here 做了PR。请看一下。
  • 公平积分。尝试仅选择列的子集以创建多项式特征。

标签: scikit-learn sparse-matrix data-science polynomials sklearn-pandas


【解决方案1】:

由于version 0.21.0PolynomialFeatures 类接受 2 级和 3 级的 CSR 矩阵。使用了 here 布置的方法,计算速度比输入为 CSC 矩阵或密集矩阵时快得多(假设数据稀疏到任何合理的程度 - 甚至是轻微的)。

【讨论】:

    【解决方案2】:

    虽然我们正在等待 Sklearn 的最新更新 - 您可以在此处找到稀疏交互的实现:

    https://github.com/drivendataorg/box-plots-sklearn/blob/master/src/features/SparseInteractions.py

    【讨论】:

      【解决方案3】:

      这是 sklearn 即将发布的 0.20 版本中的一项新功能。请参阅Release History - V0.20 - Enhancements 如果您真的想测试它,可以按照Sklean - Advanced Installation - Install Bleeding Edge 中的说明安装开发版本。

      【讨论】:

      • 能否请您也说一下 0.20 何时会迁移到稳定版?
      猜你喜欢
      • 2015-05-26
      • 2019-05-29
      • 2015-08-04
      • 2013-09-25
      • 2013-04-12
      • 2021-11-03
      • 2018-05-12
      • 2016-10-09
      • 1970-01-01
      相关资源
      最近更新 更多