ScikitLearn回归:设计矩阵X对回归来说太大了.我该怎么办?

Eul*_*ter 4 python regression numpy matrix scikit-learn

我有一个矩阵X,有7000列和38000行.因此它numpy array具有形状(38000, 7000).

我实例化了模型

model = RidgeCV(alphas = (0.001,0.01, 0.1, 1)
Run Code Online (Sandbox Code Playgroud)

然后安装它

model.fit(X, y)
Run Code Online (Sandbox Code Playgroud)

y响应向量在哪里是具有形状的numpy数组(38000,).

通过运行这个我得到一个Memory Error.

我怎么解决这个问题?

我的想法

我的第一个想法是将矩阵X"水平"划分.我的意思是,我将X划分为两个具有相同列数的矩阵(从而保留所有特征),但行数较少.那么我每次都为每个子矩阵拟合模型?但我担心这实际上不等于拟合整个矩阵.

有任何想法吗?

Nat*_*han 6

这是一个众所周知的问题,可以使用核心外学习来解决.通过谷歌搜索该术语,您将找到几种方法来解决这个问题.

对于您的特定问题,您首先要创建一个生成器,它将生成矩阵的一行(或几行),而不是使用partial_fit算法的方法.

scikit-learn的标准算法实际上是对解决方案的精确计算,如sklearn.linear_model.LinearRegressionsklearn.linear_model.LinearRegression.RidgeCV.其他方法是基于一批学习有partial_fit方法,如sklearn.linear_model.SGDRegressor,允许只适合一小批.这是你在寻找的.

过程是:使用生成器生成小批量,应用partial_fit方法,从内存中删除小批量并获取新的批次.

但是,由于此方法是随机的,并且取决于数据的顺序和权重的初始化,与标准回归方法给出的解决方案相反,后者可以适合内存中的所有数据.我不会详细介绍,但请查看梯度下降优化以了解它的工作原理(http://ruder.io/optimizing-gradient-descent/)