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

时间:2018-01-11 03:34:54

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

我正在使用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-Learning中使用PolynomialFeatures中的稀疏数据格式而不将其转换为密集格式吗?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

version 0.21.0起,PolynomialFeatures类接受2级和3级的CSR矩阵。使用了here布局的方法,并且计算速度比输入是CSC矩阵或密集数据(假设数据稀疏到任何合理的程度-甚至很小)。