7

これは、実行時に発生する scikit-learn エラーです。

my_estimator = LassoLarsCV(fit_intercept=False, normalize=False, positive=True, max_n_alphas=1e5)

max_n_alphas を 1e5 から 1e4 に減らすと、このエラーは発生しなくなります。

誰が何が起こっているかについて考えを持っていますか?

呼び出すとエラーが発生します

my_estimator.fit(x, y)

ディメンションに40kデータ ポイントがあります。40

完全なスタック トレースは次のようになります。

  File "/usr/lib64/python2.7/site-packages/sklearn/linear_model/least_angle.py", line 1113, in fit
    axis=0)(all_alphas)
  File "/usr/lib64/python2.7/site-packages/scipy/interpolate/polyint.py", line 79, in __call__
    y = self._evaluate(x)
  File "/usr/lib64/python2.7/site-packages/scipy/interpolate/interpolate.py", line 498, in _evaluate
    out_of_bounds = self._check_bounds(x_new)
  File "/usr/lib64/python2.7/site-packages/scipy/interpolate/interpolate.py", line 525, in _check_bounds
    raise ValueError("A value in x_new is below the interpolation "
ValueError: A value in x_new is below the interpolation range.
4

1 に答える 1

5

あなたのデータには何か特別なものがあるはずです。 LassoLarsCV()かなり正常に動作するデータのこの合成例では、正しく機能しているようです。

import numpy
import sklearn.linear_model

# create 40000 x 40 sample data from linear model with a bit of noise
npoints = 40000
ndims = 40
numpy.random.seed(1)
X = numpy.random.random((npoints, ndims))
w = numpy.random.random(ndims)
y = X.dot(w) + numpy.random.random(npoints) * 0.1

clf = sklearn.linear_model.LassoLarsCV(fit_intercept=False, normalize=False, max_n_alphas=1e6)
clf.fit(X, y)

# coefficients are almost exactly recovered, this prints 0.00377
print max(abs( clf.coef_ - w ))

# alphas actually used are 41 or ndims+1
print clf.alphas_.shape

これは sklearn 0.16 にあり、オプションはありませんpositive=True

とにかく非常に大きな max_n_alphas を使用する理由がわかりません。あなたのケースで 1e+4 が機能し、 1e+5 が機能しない理由はわかりませんが、 max_n_alphas=ndims+1 および max_n_alphas=1e+4 から取得したパス、または正常に動作するデータと同じものは何でもあると思います。また、相互検証によって推定される最適なアルファclf.alpha_も同じになります。alpha が何をしようとしているのかについては、LARS の例を使用した Lasso パスを確認してください。

また、LassoLarsのドキュメントから

alphas_ 配列、形状 (n_alphas + 1,)

各反復における共分散の最大値 (絶対値)。n_alphas は、max_iter、n_features、またはアルファよりも大きい相関を持つパス内のノードの数のいずれか小さい方です。

したがって、上記のサイズ ndims+1 (つまり、n_features+1) の alphas_ で終了することは理にかなっています。

PS sklearn 0.17.1 および positive=True でテストされ、いくつかの正および負の係数でもテストされ、同じ結果: alphas_ は ndims+1 以下です。

于 2016-04-04T10:41:18.437 に答える