【问题标题】:scikit-learn Ridge Regression UnboundLocalErrorscikit-learn 岭回归 UnboundLocalError
【发布时间】:2014-06-17 15:50:59
【问题描述】:

我只是一个初学者,我正在尝试在 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 

谢谢

【问题讨论】:

  • This commit 表明这是 scikit 中的一个错误。不确定修复程序是否在已发布版本中。您可以尝试更新您的 scikit 安装。
  • 正如@BrenBarn 所说,这可能是在 scikit-learn 的前沿版本中修复的错误。同时,你能试试更高的alpha吗?我将在下面为您计算一个建议。

标签: python scikit-learn linear-regression


【解决方案1】:

第一个建议:将多项式次数减少到例如

第二个建议:将 Scikit learn 升级到最前沿的 github 版本,这似乎是一个与引发异常有关的错误,因为您的矩阵是奇异的。

如果您无法升级 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)

【讨论】:

  • 谢谢大家-我确实尝试过升级到最新的前沿 github 版本,但安装时出现了一些错误:clang:错误:未知参数:'-mno-fused-madd' [ -Wunused- command-line-argument-hard-error-in-future] 但无论如何,尽管我故意过拟合,但将多项式次数减少到 5 可以修复错误。谢谢!!
  • 顺便说一句,最前沿的版本还有sklearn.preprocessing.PolynomialFeatures 用于多项式回归。
猜你喜欢
  • 2017-03-26
  • 2017-06-21
  • 2013-07-10
  • 2018-10-12
  • 2014-11-25
  • 2016-03-12
  • 2016-11-28
  • 2016-02-21
  • 2019-05-14
相关资源
最近更新 更多