mirror of
https://forge.apps.education.fr/phroy/mes-scripts-de-ml.git
synced 2024-01-27 11:30:36 +01:00
Fondamentaux : régression logistique
This commit is contained in:
parent
b296152628
commit
9fe561e5e3
@ -87,7 +87,7 @@ y_predict_skl=model_skl.predict(x1_new) # Prédiction
|
||||
# Résultats
|
||||
###############################################################################
|
||||
|
||||
# Plot
|
||||
# Plot des données
|
||||
donnees_ax.set_title("Données")
|
||||
donnees_ax.plot(x1_new, y_predict, 'r-', label="Prédictions")
|
||||
donnees_ax.plot(x1_new, y_predict_skl, 'y-', label="Prédictions - Scikit-Learn")
|
||||
|
91
fondamentaux/06-regression_logistique.py
Normal file
91
fondamentaux/06-regression_logistique.py
Normal file
@ -0,0 +1,91 @@
|
||||
import time
|
||||
import numpy as np
|
||||
import sklearn
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
###############################################################################
|
||||
# 06-regression_logistique.py
|
||||
# @title: Apprentissage par régression logistique
|
||||
# @project: Mes scripts de ML
|
||||
# @lang: fr
|
||||
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
||||
# @copyright: Copyright (C) 2023 Philippe Roy
|
||||
# @license: GNU GPL
|
||||
###############################################################################
|
||||
|
||||
###
|
||||
# Commandes NumPy :
|
||||
# - np.array : créer un tableau à partir d'une liste de listes
|
||||
# - np.linspace : créer un tableau 1D de la valeur de début à la valeur de fin avec n valeurs
|
||||
# - .reshape : reformater la tableau avec le nombre de lignes et le nombre de colonnes
|
||||
###
|
||||
|
||||
###
|
||||
# Commandes Scikit-Learn :
|
||||
# - sklearn.linear_model.LogisticRegression : créer un modèle de régression logistique (méthode des moindres carrés)
|
||||
# - .fit : entrainement du modèle
|
||||
# - .predict : prédiction du modèle
|
||||
###
|
||||
|
||||
###############################################################################
|
||||
# Initialisation
|
||||
###############################################################################
|
||||
|
||||
# Init du temps
|
||||
t_debut = time.time()
|
||||
|
||||
# Init des plots
|
||||
fig = plt.figure(figsize=(15, 5))
|
||||
fig.suptitle("Régression logistique")
|
||||
donnees_ax = fig.add_subplot(111) # Observations : x1 et cibles : y
|
||||
# donnees_ax = fig.add_subplot(141) # Observations : x1 et cibles : y
|
||||
# model_ax = fig.add_subplot(142) # Modèle : theta0, theta1
|
||||
# couts_ax = fig.add_subplot(143) # Coûts : RMSE, MSE, ...
|
||||
# app_ax = fig.add_subplot(144) # Taux d'apprentissage : eta
|
||||
|
||||
###############################################################################
|
||||
# Observations
|
||||
###############################################################################
|
||||
|
||||
# Observations d'apprentisage
|
||||
iris = sklearn.datasets.load_iris() # Jeu de données Iris
|
||||
x1 = iris['data'][:, 3].reshape(-1, 1) # Largeur de pétale, reshape : -1 -> nb de ligne automatique
|
||||
y = (iris["target"] == 2).astype(np.int32) # Si Iris virginica -> 1 sinon -> 0
|
||||
donnees_ax.plot(x1[y==0], y[y==0], "bs", label="Observations - Iris non-virginica")
|
||||
donnees_ax.plot(x1[y==1], y[y==1], "g^" , label="Observations - Iris virginica")
|
||||
|
||||
# Nouvelles observations
|
||||
x1_new=np.linspace(0, 3, 1000).reshape(-1, 1) # reshape : -1 -> nb de ligne automatique
|
||||
|
||||
###############################################################################
|
||||
# Phase d'apprentissage
|
||||
###############################################################################
|
||||
|
||||
model = sklearn.linear_model.LogisticRegression() # Modèle régression logistique
|
||||
model.fit(x1, y) # Entrainement
|
||||
|
||||
###############################################################################
|
||||
# Phase d'inférence
|
||||
###############################################################################
|
||||
|
||||
y_predict=model.predict(x1_new) # Prédiction
|
||||
y_proba = model.predict_proba(x1_new) # Probabilité
|
||||
frontiere_decision = x1_new[y_proba[:, 1] >= 0.5][0][0]
|
||||
|
||||
###############################################################################
|
||||
# Résultats
|
||||
###############################################################################
|
||||
|
||||
# Plot des données
|
||||
donnees_ax.set_title("Frontière de décision")
|
||||
# donnees_ax.plot(x1_new, y_predict, 'r-', label="Prédictions")
|
||||
donnees_ax.plot(x1_new, y_proba[:,1], 'b:', label="Probabilité - Scikit-Learn")
|
||||
donnees_ax.plot(x1_new, y_predict, 'y-', label="Prédictions - Scikit-Learn")
|
||||
donnees_ax.set_xlabel(r'$x_1$'+" - Largeur de pétale")
|
||||
donnees_ax.set_ylabel(r'$y$'+" - Probabilité d'être Iris virginica")
|
||||
donnees_ax.legend()
|
||||
plt.show()
|
||||
|
||||
# Performances
|
||||
print ("Frontière de décision : "+str(round(frontiere_decision, 6)))
|
||||
print ("Temps : "+str(time.time()-t_debut))
|
@ -20,5 +20,10 @@
|
||||
|
||||
![capture d'écran](img/05-regression_polynomiale.png)
|
||||
|
||||
### Classificateur par régression logistique
|
||||
|
||||
![capture d'écran](img/06-regression_logistique.png)
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
fondamentaux/img/06-regression_logistique.png
Normal file
BIN
fondamentaux/img/06-regression_logistique.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 391 KiB |
Loading…
Reference in New Issue
Block a user