我正试图用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
,而不是您尝试的估计器。它也适用于线性回归模型,但设计用于大型数据集,使用的内存要少得多。