如何在Scikit-learn中使用稀疏矩阵制作多项式特征



我正在使用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 问题。但仍未实施。

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

这是即将推出的 sklearn 0.20 版本中的一项新功能。请参阅发布历史记录 - V0.20 - 增强功能 如果您真的想测试它,您可以按照 Sklean - 高级安装 - 安装 Bleeding Edge 中的说明安装开发版本。

从版本 0.21.0 开始,多项式特征类接受 2 度和 3 度的 CSR 矩阵。使用此处列出的方法,并且计算比输入是CSC矩阵或密集(假设数据稀疏到任何合理的程度 - 甚至轻微(要快得多。

当我们在等待 Sklearn 的最新更新时 - 你可以在这里找到稀疏交互的实现:

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

最新更新