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划分为两个具有相同列数的矩阵(从而保留所有特征),但行数较少.那么我每次都为每个子矩阵拟合模型?但我担心这实际上不等于拟合整个矩阵.
有任何想法吗?
这是一个众所周知的问题,可以使用核心外学习来解决.通过谷歌搜索该术语,您将找到几种方法来解决这个问题.
对于您的特定问题,您首先要创建一个生成器,它将生成矩阵的一行(或几行),而不是使用partial_fit算法的方法.
scikit-learn的标准算法实际上是对解决方案的精确计算,如sklearn.linear_model.LinearRegression或sklearn.linear_model.LinearRegression.RidgeCV.其他方法是基于一批学习有partial_fit方法,如sklearn.linear_model.SGDRegressor,允许只适合一小批.这是你在寻找的.
过程是:使用生成器生成小批量,应用partial_fit方法,从内存中删除小批量并获取新的批次.
但是,由于此方法是随机的,并且取决于数据的顺序和权重的初始化,与标准回归方法给出的解决方案相反,后者可以适合内存中的所有数据.我不会详细介绍,但请查看梯度下降优化以了解它的工作原理(http://ruder.io/optimizing-gradient-descent/)
| 归档时间: |
|
| 查看次数: |
331 次 |
| 最近记录: |