Gradientenabstieg mit Python und Numpy
def gradient(X_norm,y,theta,alpha,m,n,num_it):
temp=np.array(np.zeros_like(theta,float))
for i in range(0,num_it):
h=np.dot(X_norm,theta)
#temp[j]=theta[j]-(alpha/m)*( np.sum( (h-y)*X_norm[:,j][np.newaxis,:] ) )
temp[0]=theta[0]-(alpha/m)*(np.sum(h-y))
temp[1]=theta[1]-(alpha/m)*(np.sum((h-y)*X_norm[:,1]))
theta=temp
return theta
X_norm,mean,std=featureScale(X)
#length of X (number of rows)
m=len(X)
X_norm=np.array([np.ones(m),X_norm])
n,m=np.shape(X_norm)
num_it=1500
alpha=0.01
theta=np.zeros(n,float)[:,np.newaxis]
X_norm=X_norm.transpose()
theta=gradient(X_norm,y,theta,alpha,m,n,num_it)
print theta
Mein theta aus dem obigen code ist 100.2 100.2
sollte, aber es 100.2 61.09
in matlab korrekt ist.
InformationsquelleAutor der Frage Madan Ram | 2013-07-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dein code ist etwas zu kompliziert und es braucht mehr Struktur, weil sonst wirst du verloren sein in alle Gleichungen und Operationen. Am Ende dieser regression reduziert sich auf vier Operationen:
In Ihrem Fall, ich denke, Sie verwechselt haben
m
mitn
. Hierm
bezeichnet die Anzahl der Beispiele in Ihrer Ausbildung setzen, nicht die Anzahl der features.Let ' s haben einen Blick auf meine Variante von code:
Zuerst erstelle ich eine kleine random dataset, das sollte dann so Aussehen:
Wie Sie sehen können ich habe auch die erzeugte Regressionsgerade und die Formel wurde berechnet durch excel.
Sie benötigen zu kümmern über, die intuition der regression mit Gradienten-Abstieg. Wie Sie eine vollständige batch-Durchlauf über Ihre Daten X, müssen Sie zur Verringerung der m-Verlusten jedes Beispiel auf eine einzelne Gewicht-update. In diesem Fall ist der Mittelwert der Summe über die Verläufe, so ist die division durch
m
.Die nächste Sache, die Sie benötigen zu kümmern über, verfolgen die Annäherung und Anpassung der Lern-rate. Für diese Angelegenheit sollten Sie immer verfolgen Sie Ihre Kosten jeder iteration, vielleicht sogar zeichnen Sie es.
Wenn du mein Beispiel, das theta zurückgegeben wird wie folgt Aussehen:
Ist eigentlich ganz in der Nähe der Gleichung berechnet wurde, die von excel (y = x + 30). Beachten Sie, dass während wir an der Voreingenommenheit in der ersten Spalte, der ersten theta-Wert bezeichnet die Neigung Gewicht.
InformationsquelleAutor der Antwort Thomas Jungblut
Unten finden Sie meine Implementierung der Gradienten-Abstieg für die lineare regression problem.
Zuerst berechnet man Gradienten wie
X.T * (X * w - y) /N
und aktualisieren Sie Ihre aktuelle theta mit diesem Farbverlauf gleichzeitig.Hier ist der python-code:
InformationsquelleAutor der Antwort Muatik
Ich weiß, diese Frage bereits beantworten, aber ich habe einige update der GD-Funktion :
Dieser Funktion reduzieren Sie die alpha über die iteration macht die Funktion zu konvergieren schneller sehen Die Schätzung der linearen regression mit Gradient Descent (Steilster Abstieg) für ein Beispiel in der R., die ich gelten die gleiche Logik, aber in Python.
InformationsquelleAutor der Antwort Nico Coallier
Folgende @thomas-jungblut-Implementierung in python, ich Tat das gleiche für die Oktave. Wenn Sie feststellen, etwas falsch ist bitte lassen Sie mich wissen, und ich werde fix+update.
Daten kommen aus einer txt-Datei mit den folgenden Zeilen:
denken als ein sehr grobes Beispiel für Funktionen [Anzahl der Zimmer] [mts2] und die Letzte Spalte [Preis] - das ist das, was wir Vorhersagen möchten.
Hier ist die Oktave Umsetzung:
InformationsquelleAutor der Antwort Fernando Gabrieli