【发布时间】:2014-05-19 20:30:18
【问题描述】:
我目前正在尝试使用来自 scikits learn 的 SGDRegressor 来解决大型数据集 X ~= (10^6,10^4) 上的多变量目标问题。因此,我使用以下代码部分生成设计矩阵 (X),其中每次迭代都会产生大约 (10^3,10^4) 的批次:
design = self.__iterX__(events)
reglins = [linear_model.SGDRegressor(fit_intercept=True) for i in range(nTargets)]
for X,times in design:
for i in range(nTargets):
reglins[i].partial_fit(X,y.ix[times].values[:,i])
但是我得到以下堆栈跟踪:
File ".../Enthought/Canopy_64bit/User/lib/python2.7/site- packages/sklearn/linear_model/stochastic_gradient.py", line 841, in partial_fit
coef_init=None, intercept_init=None)
File ".../Enthought/Canopy_64bit/User/lib/python2.7/site-packages/sklearn/linear_model/stochastic_gradient.py", line 812, in _partial_fit
sample_weight, n_iter)
File ".../Enthought/Canopy_64bit/User/lib/python2.7/site-packages/sklearn/linear_model/stochastic_gradient.py", line 948, in _fit_regressor
intercept_decay)
File "sgd_fast.pyx", line 508, in sklearn.linear_model.sgd_fast.plain_sgd (sklearn/linear_model/sgd_fast.c:8651)
ValueError: floating-point under-/overflow occurred.
环顾四周,这似乎是由于没有正确规范化 X 造成的。我知道 scikits learn 对此有多种功能,但是鉴于我以块为单位生成 X,是否足以简单地标准化每个块,或者我需要找出一种方法来一次标准化整个列?
顺便说一句,partial_fit 函数不允许多变量目标是否有特殊原因?
【问题讨论】:
-
“简单地标准化每个块就足够了吗”——取决于。
StandardScaler需要适合数据,然后应用于其他数据。Normalizer是无状态的,因此无需拟合即可应用,但它比高斯特征更适合频率数据。
标签: machine-learning scikit-learn regression