安装任何类型的模型时出现scikit内存错误



我正试图用scikit的线性模型(Ridge()、Lasso()、LinearRegression())拟合一个(223129108)数据集,并得到以下错误。不知道该怎么办,数据似乎不够大,内存不足(我有16GB)。有什么想法吗?

---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-34-8ea705d45c5d> in <module>()
----> 1 cv_loop(T,yn, model=reg, per_test=0.2,cv_random=False,tresh=450)
<ipython-input-1-ea163943e461> in cv_loop(X, y, model, per_test, cv_random, tresh)
     48     preds_all=np.zeros((y_cv.shape))
     49     for i in range(y_n):
---> 50         model.fit(X_train, y_train[:,i])
     51 
     52         preds = model.predict(X_cv)
C:Usersm&gAppDataLocalEnthoughtCanopy32Userlibsite-packagesscikit_learn-0.14.1-py2.7-win32.eggsklearnlinear_modelcoordinate_descent.pyc in fit(self, X, y, Xy, coef_init)
    608                           "estimator", stacklevel=2)
    609         X = atleast2d_or_csc(X, dtype=np.float64, order='F',
--> 610                              copy=self.copy_X and self.fit_intercept)
    611         # From now on X can be touched inplace
    612         y = np.asarray(y, dtype=np.float64)
C:Usersm&gAppDataLocalEnthoughtCanopy32Userlibsite-packagesscikit_learn-0.14.1-py2.7-win32.eggsklearnutilsvalidation.pyc in atleast2d_or_csc(X, dtype, order, copy, force_all_finite)
    122     """
    123     return _atleast2d_or_sparse(X, dtype, order, copy, sparse.csc_matrix,
--> 124                                 "tocsc", force_all_finite)
    125 
    126 
C:Usersm&gAppDataLocalEnthoughtCanopy32Userlibsite-packagesscikit_learn-0.14.1-py2.7-win32.eggsklearnutilsvalidation.pyc in _atleast2d_or_sparse(X, dtype, order, copy, sparse_class, convmethod, force_all_finite)
    109     else:
    110         X = array2d(X, dtype=dtype, order=order, copy=copy,
--> 111                     force_all_finite=force_all_finite)
    112         if force_all_finite:
    113             _assert_all_finite(X)
C:Usersm&gAppDataLocalEnthoughtCanopy32Userlibsite-packagesscikit_learn-0.14.1-py2.7-win32.eggsklearnutilsvalidation.pyc in array2d(X, dtype, order, copy, force_all_finite)
     89         raise TypeError('A sparse matrix was passed, but dense data '
     90                         'is required. Use X.toarray() to convert to dense.')
---> 91     X_2d = np.asarray(np.atleast_2d(X), dtype=dtype, order=order)
     92     if force_all_finite:
     93         _assert_all_finite(X_2d)
C:Usersm&gAppDataLocalEnthoughtCanopy32Appappdatacanopy-1.0.3.1262.win-x86libsite-packagesnumpycorenumeric.pyc in asarray(a, dtype, order)
    318 
    319     """
--> 320     return array(a, dtype, copy=False, order=order)
    321 
    322 def asanyarray(a, dtype=None, order=None):
MemoryError: 

由于采用了32位处理,16Gb RAM有效地减少到4Gb(因为32位意味着您只能区分2^32个内存地址,即4Gb)。如果你想使用大型数据集,我建议你切换到64位版本。

如果你不能改变比特,那么你应该准备好对你的代码进行欺骗。您应该仔细查看代码,寻找可能的内存分配(感觉像C,不是吗?),有时甚至可能执行一些del(以防您不再需要变量,但解释器不知道)。

或者,由于你所有的数据都只是一个100维的向量,并且你有很多数据(200K),所以你可能只能提取其中的10%,并且仍然具有代表性。但这取决于数据的性质,还需要进一步的研究。

尝试SGDRegressor,而不是您尝试的估计器。它也适用于线性回归模型,但设计用于大型数据集,使用的内存要少得多。

相关内容

  • 没有找到相关文章

最新更新