Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import matplotlib.pyplot as plt
- from sklearn.linear_model import LogisticRegression
- def generuj_zbior(n, seed, stromosc_krzywej, sukces_50_procent):
- gen_liczb = np.random.default_rng(seed)
- czas = gen_liczb.uniform(0,60,n)
- prawdopodobienstwo_sukcesu = 1/(1+np.exp(-stromosc_krzywej*(czas-sukces_50_procent)))
- wynik = gen_liczb.binomial(1, prawdopodobienstwo_sukcesu)
- return czas, wynik
- zbiory = [
- {"n":100 , "seed":1, "stromosc": 0.2, "sukces50":30, "etykieta":"Zbiór 1" },
- {"n":100 , "seed":1, "stromosc": 0.15, "sukces50":25, "etykieta":"Zbiór 2" },
- {"n":100 , "seed":1, "stromosc": 0.25, "sukces50":35, "etykieta":"Zbiór 3" },
- {"n":100 , "seed":1, "stromosc": 0.1, "sukces50":28, "etykieta":"Zbiór 4" }
- ]
- siatka = np.linspace(0,60,500).reshape(-1,1)
- fig, axs = plt.subplots(2,2, figsize=(12,10))
- axs = axs.ravel()
- for i, zbior in enumerate(zbiory):
- czas, wynik = generuj_zbior(zbior["n"], zbior["seed"], zbior["stromosc"], zbior["sukces50"])
- osX = czas.reshape(-1,1)
- model = LogisticRegression()
- model.fit(osX,wynik)
- predykacja = model.predict_proba(siatka)[:,1] * 100
- # dodanie do zbioru krzywych
- axs[i].scatter(czas[wynik==0], wynik[wynik==0]*100 , c="red", alpha=0.6, label = "Porażka")
- axs[i].scatter(czas[wynik==1], wynik[wynik==1]*100 , c="green", alpha=0.6, label = "Sukces")
- axs[i].plot(siatka, predykacja, "b-",linewidth = 2, label="Regresja logistyczna")
- axs[i].set_title(zbior["etykieta"])
- axs[i].set_xlabel("Czas trwania gry [min]")
- axs[i].set_ylabel("Prawdopodobieństwo sukcesu [%]")
- axs[i].grid(True, alpha= 0.3)
- axs[i].legend()
- plt.suptitle("Regresja logistyczna", fontsize=14)
- plt.tight_layout()
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment