我正在使用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中的稀疏数据格式而不将其转换为密集格式吗?
答案 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矩阵或密集数据(假设数据稀疏到任何合理的程度-甚至很小)。