首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习岭回归UnboundLocalError

学习岭回归UnboundLocalError
EN

Stack Overflow用户
提问于 2014-05-01 06:28:00
回答 1查看 668关注 0票数 0

我只是一个初学者,我试图实现多项式回归的科学工具包-学习。没有正则化的通常回归效果很好。

代码语言:javascript
复制
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)

但是,当我试图以完全相同的方式实现Ridge回归时,我会得到以下错误:

代码语言:javascript
复制
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 

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-01 07:01:34

第一个建议:将你的多项式度降低到例如<= 5。如果你的样本数量太多,上面的任何东西都会进入过度拟合的范围。

第二个建议:升级Scikit学习到流血边缘的github版本,这似乎是一个与异常相关的bug,因为您的矩阵是单数的。

如果您无法升级scikit学习,请尝试使用更强的正则化:

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23403108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档