Regresja logistyczna z wykorzystaniem biblioteki SKLEARN
Przykład 1:
Regresja logistyczna do predykcji udziału w ultramaratonie.
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.preprocessing import OrdinalEncoder #zamieniamy słowa 'no' i 'yes' na liczby 0 i 1
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
d={'miles_per_week':[37,39,46,51,88,17,18,20,21,22,23,24,25,27,28,29,30,31,32,33,34,38,40,56,72,67,90,92,62,77,88,99,66,18,46,99,75,84,12,65,45,38,73,46,95,48,32,65,15,48,65,45,51,25,35,53,64,48,9,77],
'completed_50m_ultra':['no','no','no','no','no','no','no','no','no','no','no','no','no','no','no','no','no','no','no','no','no','no','no','yes','yes','yes','yes','yes','yes','yes','yes','yes','yes','no','no','yes','yes','yes','no','yes','no','no','yes','no','yes','yes','no','no','no','yes','yes','yes','no','no','no','yes','yes','no','no','yes']}
df=pd.DataFrame(data=d)
print(df)
# zamieniamy słowa 'no' i 'yes' na liczby 0 i 1
finished_race=['no','yes']
enc=OrdinalEncoder(categories=[finished_race])
df['completed_50m_ultra']=enc.fit_transform(df[['completed_50m_ultra']])
print(df)
plt.scatter(df.miles_per_week, df.completed_50m_ultra)
plt.show()
# biblioteka seaborn - wykres słupkowy zliczający sukcesy i porażki maratonu
sns.countplot(x='completed_50m_ultra',data=df)
plt.title("ilość sukcesów i porażek")
plt.show()
X=df.iloc[:,0:1]
y=df.iloc[:, 1]
X_train,X_test,y_train,y_test=train_test_split(X,y,train_size=0.8,random_state=42)
print(X_train.shape)
print(X_test.shape)
model=LogisticRegression()
model.fit(X_train,y_train)
y_pred=model.predict(X_test)
print(model.score(X_test,y_test))
print(confusion_matrix(y_test, y_pred))
# macierz konfuzji (macierz pomyłek) -
# przewidzane pozytywne przewidziane negatywne
# Rzeczywiste pozytywne TP (True positive) FN (False negative)
# rzeczywiste negatywne FP (False positive) TN (True negative)
print(classification_report(y_test,y_pred)) # generujemy raport na temat jakości klasyfikacji
# precision - jaka część przewidzianych jako prawdziwe była faktycznie prawdziwa
# recall - jaka część prawdziwych została poprawnie zidentyfikowana
# analiza predykcji dla wybranej wartości
s=77 #podajemy wybraną przez nas wartość treningów tygodniowych
print('Wynik dla ',s,' wynosi ',model.predict([[s]]))
Wykres populacji danych.
Wykres kolumnowy sukcesów i porażek.
Przykład 2:
Regresja logistyczna do predykcji śmiertelności pasażerów tytanika.
from pydataset import data
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
titanic=data('titanic')
print(titanic.sample(5))
titanic=pd.get_dummies(titanic, drop_first=True)
print(titanic.sample(5))
X_train, X_test, y_train, y_test=train_test_split(titanic.drop('survived_yes',axis=1),titanic['survived_yes'])
LogReg=LogisticRegression(solver='lbfgs')
LogReg.fit(X_train, y_train)
print("Czy dziecko, płci żeńskiej w klasie 1 przeżyje? ",LogReg.predict(np.array([[0,0,1,1]]))[0]) # class 1 child girl survived?
print("Czy dorosły mężczyzna w klasie 3 przeżyje ?",LogReg.predict(np.array([[0,1,0,0]]))[0]) # class 3 adult male Survived?
# Analiza trafności modelu
print('Wynik poprawności przeiwdywania modelu ',LogReg.score(X_test,y_test))