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

How to make polynomial features using sparse matrix in 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 Issues 请求此功能的地方。但仍未实施。

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

这是即将发布的 0.20 版 sklearn 中的一项新功能。参见 Release History - V0.20 - Enhancements If you really wanted to test it out you could install the development version by following the instructions in Sklean - Advanced Installation - Install Bleeding Edge

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

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

由于使用了 version 0.21.0, the PolynomialFeatures class accepts CSR matrices for degrees 2 and 3. The method laid out here,计算速度比输入 CSC 矩阵或密集矩阵快得多(假设数据稀疏到任何合理程度 - 甚至轻微)。