Ich arbeite durch Andrew Ng Machine Learning auf Coursera durch die Implementierung aller Code in Python und nicht MATLAB.Coursera ML - Implementieren regulierte logistische Regression Kostenfunktion in Python
In Programmierung Übung 3 implementierte ich meine gesetzlich geregelte Funktion logistische Regression Kosten in einer vektorisierten Form:
def compute_cost_regularized(theta, X, y, lda):
reg =lda/(2*len(y)) * np.sum(theta**2)
return 1/len(y) * np.sum(-y @ np.log(sigmoid([email protected]))
- (1-y) @ np.log(1-sigmoid([email protected]))) + reg
Auf den folgenden Testeingänge:
theta_test = np.array([-2,-1,1,2])
X_test = np.concatenate((np.ones((5,1)),
np.fromiter((x/10 for x in range(1,16)), float).reshape((3,5)).T), axis = 1)
y_test = np.array([1,0,1,0,1])
lambda_test = 3
die oben Kostenfunktion Ausgänge 3.734819396109744
. Nach dem uns zur Verfügung gestellten MATLAB-Code sollte die korrekte Ausgabe jedoch 2.534819
lauten. Ich bin verwirrt, weil ich mit meiner Kostenfunktion nichts falsch finde, aber ich glaube, dass es einen Fehler hat. In der Tat habe ich auch implemented it in Programming Exercise 2 in der binären Klassifizierung Fall und es funktioniert gut, was eine result close to the expected value.
Ich dachte, dass ein Grund dafür sein könnte, dass ich falsch meine *_test
Eingabefelder aufgebaut haben, basierend auf dem mitgelieferten Skelett MATLAB-Code falsch interpretiert, die sind:
theta_t = [-2; -1; 1; 2];
X_t = [ones(5,1) reshape(1:15,5,3)/10];
y_t = ([1;0;1;0;1] >= 0.5);
lambda_t = 3;
Allerdings hatte ich sie durch einen Octave Dolmetscher lief zu Sehen Sie, was sie wirklich sind, und stellen Sie sicher, dass ich sie genau in Python zuordnen konnte.
Darüber hinaus ist auch die Berechnung von Gradienten basierend auf diesen Eingaben mit meiner eigenen vektorisierten und regulierten Gradientenfunktion korrekt. Schließlich habe ich beschlossen, einfach mit der Berechnung fortzufahren und die Vorhersageergebnisse zu untersuchen. Die Genauigkeit meiner Vorhersagen war viel niedriger als die erwartete Genauigkeit, so dass es mehr Grund zu der Annahme gibt, dass etwas mit meiner Kostenfunktion nicht stimmt, die alles andere falsch macht.
Hilfe bitte! Vielen Dank.
Vielen Dank für die Suche nach meinem Fehler! Dies repariert die Funktion! Ich habe nun auch die Änderung an meinem Notebook für die Programmierung von Übung 2 übernommen und drücke zu meinem Github. Ich frage mich, warum dies nicht Auswirkungen auf die Leistung meines Modells in der Übung obwohl ... – AKKA
Sorry @ Crayryeng, ich bin mir immer noch nicht sicher, warum 'scipy.optimize.minimize' würde nicht die Kostenfunktion über den ersten Aufruf, es erfordern, wenn Ich verstehe deine Antwort richtig.In der gedruckten Ausgabe von der Optimierung, wie Sie auf meinem Notebook sehen können, 'Iterations: 19' und' Function evaluations: 55', wo 'Funktion' bezieht sich auf die Kostenfunktion (die ursprünglich falsch codiert wurde), die ich zur Verfügung gestellt zu minimieren() '. Wird die Kostenfunktion während der Optimierung nicht mehrfach verwendet? – AKKA
@AKKA Sie haben Recht. Ich entschuldige mich. Ich lösche den vorherigen Kommentar. Sie benötigen die Kostenfunktion und optional kann der Gradient für exakte Gradienten verwendet werden, anstatt numerische Näherungen zu verwenden. Da Sie jedoch anfangs den richtigen Gradienten angegeben haben, wird die Kostenfunktion nicht mehr in der Richtung verwendet, in der das Minimum auftritt, und die Kostenfunktion wird nur zum Bewerten der Kosten der Parameter in jedem Schritt verwendet. Daher ist die ausgegebene Kostenfunktionsausgabe nicht korrekt, aber der richtige Gradient wird verwendet, um das Minimum zu erreichen (weiter unten). – rayryeng