scikit-learn 岭回归 UnboundLocalError
我只是个初学者,正在尝试在scikit-learn中实现多项式回归。普通的回归没有正则化时运行得很好。
regr = linear_model.LinearRegression(copy_X=True)
X = np.array(time_list[0:24]).reshape(24,1)
for i in range(2,10):
X=np.append(X, X**i, 1)
Y = np.array(tempm_list[0:24]).reshape(24,1)
regr.fit(X, Y)
但是当我试着用完全相同的方法实现岭回归时,我遇到了以下错误:
regularized_regr=linear_model.Ridge(alpha =1, copy_X=True)
regularized_regr.fit(X,Y)
File "/usr/local/lib/python2.7/site-packages/sklearn/linear_model/ridge.py", line 449, in fit
return super(Ridge, self).fit(X, y, sample_weight=sample_weight)
File "/usr/local/lib/python2.7/site-packages/sklearn/linear_model/ridge.py", line 338, in fit
solver=self.solver)
File "/usr/local/lib/python2.7/site-packages/sklearn/linear_model/ridge.py", line 294, in ridge_regression
coef = safe_sparse_dot(X.T, dual_coef, dense_output=True).T
UnboundLocalError: local variable 'dual_coef' referenced before assignment
谢谢
1 个回答
1
第一个建议:把你的多项式的次数降低到比如说5或者更少。次数太高的话,可能会导致过拟合,尤其是考虑到你的样本数量。
第二个建议:把Scikit-learn升级到最新的github版本,这似乎是一个与异常相关的bug,因为你的矩阵是奇异的。
如果你无法升级Scikit-learn,可以尝试使用更强的正则化:
import numpy as np
_, S, _ = np.linalg.svd(X, full_matrices=False)
s = S[0]
alpha = 1.2 * s # you may vary this fraction between 0.1 and larger
regularized_regr=linear_model.Ridge(alpha=alpha)
regularized_regr.fit(X,Y)