私は初心者で、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
ありがとう
最初の提案:多項式の次数をたとえば<= 5に減らします。サンプル数を考えると、上記のものはすべて過剰適合の領域に入ります。
2番目の提案:Scikitlearnを最先端の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)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加