Seite 1 von 1
Gradient einer Funktion berechnen
Verfasst: Dienstag 12. März 2019, 08:04
von Lizzy
Ich habe eine Funktion, die zwei Werte zurückgeben soll: den gradient und hess des zuvor berechneten "margin".
Code: Alles auswählen
def softmax(mat):
res = np.exp(mat)
res = np.multiply(res, 1/np.sum(res, axis=1, keepdims=True))
return res
def function1(y_true, y_pred_encoded):
pred = y_pred_encoded.reshape((-1, 3), order='F')
pred = softmax(pred)
y_true = OneHotEncoder(sparse=False, categories='auto').fit_transform(y_true.reshape(-1, 1))
#pen wird hier berechnet und hat (wie y_true zuvor) die shape (153,) und wird dann ebenfalls transformiert
pen = OneHotEncoder(sparse=False, categories='auto').fit_transform(pen.reshape(-1, 1))
margin = (pred - y_true + pen).astype("float")
grad = ??
hess =??
return grad, hess
Hat jemand eine Idee wie das in diesem Fall funktionieren könnte? (grad(margin) bekommt leider eine Fehlermeldung)
Re: Gradient einer Funktion berechnen
Verfasst: Dienstag 12. März 2019, 12:47
von ThomasL
Kannst du mir mal einen Link zu dem Kurs oder einem Jupyter Notebook geben,
ich bräuchte da etwas mehr Backgroundverständnis was du da machen willst.
Re: Gradient einer Funktion berechnen
Verfasst: Dienstag 12. März 2019, 15:52
von Lizzy
Ist es hier irgendwie mögliche eine Datei hochzuladen?
Re: Gradient einer Funktion berechnen
Verfasst: Dienstag 12. März 2019, 15:57
von ThomasL
Re: Gradient einer Funktion berechnen
Verfasst: Dienstag 12. März 2019, 16:11
von Lizzy
Re: Gradient einer Funktion berechnen
Verfasst: Dienstag 12. März 2019, 17:55
von ThomasL
Ok, wenn du mir jetzt noch die Datei V1_2_ML_Boosted.xlsx zur Verfügung stellen könntest.....
so ohne Daten ist es schwierig....

Re: Gradient einer Funktion berechnen
Verfasst: Dienstag 12. März 2019, 18:33
von Lizzy
Re: Gradient einer Funktion berechnen
Verfasst: Mittwoch 13. März 2019, 21:03
von ThomasL
Hallo Lizzy,
habe mir mal den Code angeschaut.
Du möchtest also eine custom loss function für LightGBM entwickeln,
so ähnlich wie hier:
https://towardsdatascience.com/custom-l ... 9c1b40466d
Was soll denn deine Funktion genau machen?
Ich werde da nicht so richtig schlau raus.
Hast du dafür eine Vorgabe / Funktionsbeschreibung?
Re: Gradient einer Funktion berechnen
Verfasst: Donnerstag 14. März 2019, 00:38
von Lizzy
Eine Vorgabe gibt es nicht, es ist nur eine Idee von mir: Die Loss Funktion soll nicht nur falsche Klassifizierungen berücksichtigen, sondern auch eine Nebenbedingung meines Modells beachten (bzw zumindest in einer Form bestrafen wenn sie nicht eingehalten wird):
https://wetransfer.com/downloads/70c0b2 ... 251/f78a4e
Die Nebenbedingung soll für alle items in den Testdaten einen bestimmten Wert haben, zB 0,9. Da ich keine Möglichkeit gefunden habe einen "overall constraint" in einer loss function zu implementieren (weil die dafür wohl auch nicht geeignet ist), war meine Idee die folgende: Ich berechne was jedes item im Schnitt zum constraint beitragen müsste, und berechne dann die Abweichung dazu. Somit bekomme ich einen Vektor der mir für jedes item sagt ob es "genug" beiträgt oder nicht. Ich dachte damit kann ich quasi "bestrafen" wenn ein item unter dem Schnitt liegt und das eben in der loss function berücksichtigen.
Re: Gradient einer Funktion berechnen
Verfasst: Montag 18. März 2019, 12:26
von Lizzy
@ThomasL: Hast Du eine Idee wie ich für diese Funktion die grad und hess berechnen kann?
Re: Gradient einer Funktion berechnen
Verfasst: Montag 18. März 2019, 14:00
von ThomasL
Hi Lizzy, leider habe ich noch nicht wieder die Zeit gehabt, mich mit deiner Loss-Funktion zu beschäftigen.
Was mir aufgefallen war, dass ich eine andere softmax() Funktion habe als du.
Code: Alles auswählen
# deine softmax function
def softmax(mat):
res = np.exp(mat)
res = np.multiply(res, 1/np.sum(res, axis=1, keepdims=True))
return res
# ich würde die so umsetzen
def softmax(x):
exps = np.exp(x)
return exps / np.sum(exps, axis=0)
Wenn mat eine Liste [0.2, 0.3, 0.03] ist, wirft deine einen AxisError
KA ob es was damit zu tun haben könnte
Re: Gradient einer Funktion berechnen
Verfasst: Montag 18. März 2019, 16:18
von Lizzy
Danke für den Tipp, ich bin mir nicht sicher ob es hilft da auf jeden Fall noch ein Fehler bei meinem "pen" array liegt....nur weiß ich nicht wo
