2016-03-30 2 views
6

Dies ist ein Scikit-Learn Fehler, die ich bekomme, wenn ichValueerror: Ein Wert in x_new unter dem Interpolationsverfahren Bereich

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

Hinweis zu tun, wenn ich max_n_alphas von 1e5 bis 1e4 verringere ich das nicht Fehler mehr.

Jeder hat eine Idee was passiert?

Der Fehler tritt auf, wenn I

my_estimator.fit(x, y) 

nennen I 40k Datenpunkte in 40 Abmessungen haben.

Der vollständige Stack-Trace sieht wie folgt aus

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. 
+3

Wenn ich 'von sklearn.linear_model importieren LassoLarsCV importieren, gefolgt von Ihrer Codezeile Ich bekomme keinen Fehler. Bitte stellen Sie genügend Code zur Verfügung, um den Fehler, den Sie erhalten, sowie die vollständige Traceback-Nachricht zu reproduzieren. –

+1

Der Fehler tritt nicht in dieser Zeile, aber wenn ich .fit() aufrufen. Leider ist mein Datensatz hier schwer zu reproduzieren und hat 40.000 Punkte. –

+1

Die Interpolatoren in scipy erfordern oft, dass die x-Werte monoton ansteigen. Ist 'x' für Ihren Datensatz monoton steigend? Wenn dies nicht der Fall ist, versuchen Sie, das Dataset mit 'x' als Schlüssel zu sortieren und versuchen Sie es erneut. Wenn es funktioniert, lass es mich wissen, und ich werde eine angemessene Antwort für die Bounty hinzufügen :) –

Antwort

4

Es gibt etwas, insbesondere auf Ihre Daten sein müssen. LassoLarsCV() scheint richtig mit diesem synthetischen Beispiel ziemlich gut erzogene Daten zu arbeiten:

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 

Die in sklearn ist 0,16, ich habe nicht positive=True Option.

Ich bin nicht sicher, warum Sie sowieso ein sehr großes max_n_alphas verwenden möchten. Während ich nicht weiß, warum 1e + 4 funktioniert und 1e + 5 in Ihrem Fall nicht, vermute ich, dass die Pfade von max_n_alphas = ndims + 1 und max_n_alphas = 1e + 4 oder was auch immer für gut ermittelte Daten identisch ist. Auch das optimale Alpha, das durch die Kreuzvalidierung in clf.alpha_ geschätzt wird, wird identisch sein. Schauen Sie sich Lasso path using LARS Beispiel für was Alpha versucht zu tun.

Auch aus dem LassoLars documentation

alphas_ array, shape (n_alphas + 1,)

Maximum of covariances (in absolute value) at each iteration. n_alphas is either max_iter, n_features, or the number of nodes in the path with correlation greater than alpha, whichever is smaller.

so macht es Sinn, dass wir mit alphas_ der Größe ndims + 1 (dh n_features + 1) oben zu beenden.

P.S. Getestet mit sklearn 0.17.1 und positiv = True, auch getestet mit einigen positiven und negativen Koeffizienten, dasselbe Ergebnis: alphas_ ist ndims + 1 oder weniger.

+0

Es hat nichts mit den Daten zu tun. Wenn dasselbe wie oben angegeben auf n_alphas reduziert wird, verschwindet das Problem auf demselben Datensatz. Der Fehler tritt bei der Generierung von Alphas auf, nicht beim Umgang mit dem Problemsatz. –

+0

@BaronYugovich Sie sehen den Code, wo mit den verschiedenen Datensätzen der gleichen Dimensionen, ein großer max_n_alphas, gibt es kein Problem. Warum denken Sie, dass das Problem nicht datenbezogen ist? Bitte veröffentlichen Sie ein vollständiges ausführbares Beispiel, das Ihr Problem reproduziert. Danke :) –

+0

Macht Sinn. Aus Neugier, mit Ihrem Experiment mit zufälligen Daten, was bekommen Sie mit orthogonalen Matching-Verfolgung http://StackOverflow.com/Questions/36287045/orthogonal-Matching-Pursuit-Regression-am-I-User-It-Wrong ? noredirect = 1 # comment60438035_36287045 –

Verwandte Themen