07 Logistic Regression

Machine Learning
Antworten
tburkard
Beiträge: 1
Registriert: 19.04.2020 12:54

07 Logistic Regression

Beitrag von tburkard »

Guten Tag

Ein Kollege und ich sind beim Durcharbeiten des Jupyter Nootebooks auf ein paar Unklarheiten gestossen.

Zum einen, sieht der Plot der Decision Boundary falsch aus:
Decision_Boundary.png
Das Einzige was wir dazu ohne Lösungen selber schreiben mussten ist die sigmoid Funktion:

Code: Alles auswählen

def sigmoid(z):
    s = 1 / (1 + np.exp(-z));
    return s
Wir gehen aber nicht davon aus, dass wir hier etwas falsch gemacht haben?

Als Nächstes, mussten wir feststellen, dass unsere cost_function nicht korrekt ist:

Code: Alles auswählen

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-42-97fff0688de8> in <module>
      5 actual_cost = cost_function(y_assert, y_pred)
      6 
----> 7 np.testing.assert_almost_equal(actual_cost, expected_cost, decimal=3)

c:\program files (x86)\python38-32\lib\site-packages\numpy\testing\_private\utils.py in assert_almost_equal(actual, desired, decimal, err_msg, verbose)
    599         pass
    600     if abs(desired - actual) >= 1.5 * 10.0**(-decimal):
--> 601         raise AssertionError(_build_err_msg())
    602 
    603 

AssertionError: 
Arrays are not almost equal to 3 decimals
 ACTUAL: 0.7134887478392035
 DESIRED: 0.38654566350196135
Wir vermuten, dass dies mit dem oben beschriebenen Fehler zusammen hängt. Hier aber trotzdem mal noch unsere cost_function:

Code: Alles auswählen

def cost_function(y, y_pred):
    cost = -1/len(y) * np.sum(y*np.log(y_pred) + (1-y)*np.log(y_pred));
    return cost
Vielen Dank im Voraus für Ihren Support!

Beste Grüsse
Timon Burkard
Sie haben keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

mbravin
Beiträge: 1
Registriert: 31.12.2015 08:28

Re: 07 Logistic Regression

Beitrag von mbravin »

Guten Tag Herr Burkard

Das die Decision-Boundary zu Beginn so aussieht ist gewollt - denn wir müssen ja zuerst die Parameter mittels Gradient Descent bestimmen.
Sobald ihr Code von der Cost-Function korrekt ist und Sie den Gradient Descent Algorithmus ausführen können sieht die Decision Boundary schon einiges besser aus.

Bei Ihrem Code zur Cost-Function hat sich tatsächlich ein Fehler eingeschlichen.

Korrekt wäre folgender Code (wenn sie nochmals die Formel im Jupyter-Notebook anschauen sehen Sie den Fehler):

Code: Alles auswählen

def cost_function(y, y_pred):
    cost = -1/len(y) * np.sum(y*np.log(y_pred) + (1-y)*np.log(1 - y_pred));
    return cost
Ich hoffe Ihnen so weitergeholfen zu haben.

Freundliche Grüsse
Marc Bravin

Antworten