verstehen, wie diese lambda-Funktion funktioniert
Dachte ich, habe ich verstanden, wie lambda-Funktionen arbeiten, obwohl ich nicht selbst nutzen. Aber die lambda unten aus dieses tutorial völlig stümpfe mich:
import matplotlib.pyplot as plt
import numpy as np
import sklearn
import sklearn.datasets
import sklearn.linear_model
import matplotlib
Das war einfach. Mehr:
# Generate a dataset and plot it
np.random.seed(0)
X, y = sklearn.datasets.make_moons(200, noise=0.20)
plt.scatter(X[:,0], X[:,1], s=40, c=y, cmap=plt.cm.Spectral)
clf = sklearn.linear_model.LogisticRegressionCV()
clf.fit(X, y)
# Helper function to plot a decision boundary.
# If you don't fully understand this function don't worry, it just generates the contour plot below.
def plot_decision_boundary(pred_func):
# Set min and max values and give it some padding
x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
h = 0.01
# Generate a grid of points with distance h between them
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
# Predict the function value for the whole gid
Z = pred_func(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
# Plot the contour and training examples
plt.contourf(xx, yy, Z, cmap=plt.cm.Spectral)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Spectral)
Nun die Zeile, die ich nicht verstehe:
plot_decision_boundary(lambda x: clf.predict(x))
Habe ich oft gelesen, wie lambdas arbeiten, aber ich weiß einfach nicht, wie die x
hier übergeben die richtigen Werte vor. Wie ist die x
zugeordnet, um die relevanten Werte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
x
ist die verkettete Numpy-Objekt übergeben Sie hier:pred_func
ist das argumentplot_decision_boundary()
; wenn Sie aufgerufen wird, rufen Sie die Funktion Objekt definiert durch den lambda-Ausdruck. Die obige Zeile übersetzt:lambdas sind nur anonyme Funktionen. lambda-Körper können nur ein Ausdruck (als Teilmenge von dem, was Sie können in einer Funktion), weil Sie zu haben passen inline mit anderen code.
plot_decision_boundary(lambda x: clf.predict(x))
könnte umgeschrieben werdenHier seine mehr klar, was Los ist.
plot_decision_boundary
bekommt ein callable und ruft es mit dem single-parameternp.c_[xx.ravel(), yy.ravel()]
.Aber lambda sollte nicht verwendet wurden hier in den ersten Platz. Sie könnte einfach tun
In der großen tradition des python-tutorials, lambda-wird dazu missbraucht, wieder einmal.
Diese Zeile übergeben Sie eine Funktion, die nimmt ein einzelnes argument in der Methode. Wenn der lambda-Ausdruck bewertet werden, oder der Methode "genannt" mit einem argument
x
werde es tunclf.predict(x)
Innerhalb der Methode, die Funktion heißt
pred_func
und es als Ihr einziges argument anAlso den code ran
plot_decision_boundary(pred_func) tatsächlich erfordert drei Eingaben
X,y,pred_func
Wenn
clf.predict(x)
dauert nur inx
als Eingabe, dann keine Notwendigkeit für lambda.Aber für andere Vorhersage-Funktionen, die erfordern, mehr Eingänge ( wie
func(parameters, x)
alspred_func
), und eine äußere Funktion (plot_decision_boundary
), die nicht in die Parameter, die wir einführen müssen, um Sie von Anfang an:Wir wollen, zeichnen Sie die Konturen, also müssen wir andere Koordinaten für die X-Achse, Y-Achse und die entsprechenden Werte der Z-Achse.
Also beim generieren des meshgrid und verketten es (hier ist ein guter link, um zu verstehen, Verkettung) und pass es in
pred_func
was du machst, ist tatsächlich die übergabe der Werte in die x-argument der lambda-Funktion die Ausgänge, die Vorhersagen aus der lambda-Funktionclf.predict()
ie. Z-Matrix (Ausgänge z, entsprechend verschiedenen Werten von feature1 und feature2), die verwendet wird, um eine Darstellung der Konturen.