Implementacja regresji logistycznej
To ćwiczenie jest bardzo podobne do wcześniejszego, w którym implementowałeś regresję liniową „od zera" przy użyciu scipy.optimize.minimize. Tym razem zminimalizujesz stratę logistyczną i porównasz wyniki z klasą LogisticRegression z biblioteki scikit-learn (parametr C ustawiliśmy na dużą wartość, aby wyłączyć regularyzację – więcej na ten temat w rozdziale 3!).
Funkcja log_loss() z poprzedniego ćwiczenia jest już zdefiniowana w twoim środowisku, a zbiór danych scikit-learn dotyczący predykcji raka piersi (pierwsze 10 cech, po standaryzacji) jest wczytany do zmiennych X i y.
To ćwiczenie jest częścią kursu
Liniowe klasyfikatory w Pythonie
Instrukcje do ćwiczenia
- Przekaż liczbę przykładów treningowych do funkcji
range(). - Uzupełnij funkcję straty dla regresji logistycznej.
- Porównaj współczynniki z wynikami klasy
LogisticRegressionz biblioteki sklearn.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# The logistic loss, summed over training examples
def my_loss(w):
s = 0
for i in range(____):
raw_model_output = w@X[i]
s = s + ____(raw_model_output * y[i])
return s
# Returns the w that makes my_loss(w) smallest
w_fit = minimize(my_loss, X[0]).x
print(w_fit)
# Compare with scikit-learn's LogisticRegression
lr = LogisticRegression(fit_intercept=False, C=1000000).fit(X,y)
print(lr.coef_)