diff --git a/fondamentaux/01-regression_lineaire.py b/fondamentaux/01-regression_lineaire.py new file mode 100644 index 0000000..a013965 --- /dev/null +++ b/fondamentaux/01-regression_lineaire.py @@ -0,0 +1,44 @@ +import numpy as np +import matplotlib.pyplot as plt + +############################################################################### +# 01-regression_lineaire.py +# @title: Apprentissage par régression linéaire +# @project: Mes scripts de ML +# @lang: fr +# @authors: Philippe Roy +# @copyright: Copyright (C) 2023 Philippe Roy +# @license: GNU GPL +############################################################################### + +### +# Commandes NumPy : +# - np.array : créer un tableau à partir d'une liste de listes +# - np.c_ : concatène les colonnes des tableaux +# - np.ones : créer un tableau de 1 +# - np.linalg.inv : inversion de matrice +# - .T : transposé de matrice +# - .dot : produit de matrice +### + +# Observations d'apprentisage +x = 2*np.random.rand(100, 1) # Liste des observations x1 +y = 4 + 3*x + np.random.rand(100, 1) # Liste des cibles y +X = np.c_[np.ones((100, 1)), x] # Matrice des observations, avec x0=1 + +# Phase d'apprentissage par régression linéaire avec l'équation normale +theta_best= np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y) + +# Nouvelles observations +x_new=np.array([[0], [2]]) +X_new = np.c_[np.ones((2, 1)), x_new] # Matrice des observations, avec x0=1 + +# Phase d'inférence +y_predict=X_new.dot(theta_best) + +# Plot +plt.plot(x, y, 'b.') +plt.plot(x_new, y_predict, 'r-') +plt.show() + + diff --git a/fondamentaux/02-descente_gradient.py b/fondamentaux/02-descente_gradient.py new file mode 100644 index 0000000..8f2f5e5 --- /dev/null +++ b/fondamentaux/02-descente_gradient.py @@ -0,0 +1,52 @@ +import numpy as np +import matplotlib.pyplot as plt + +############################################################################### +# 02-descente_gradient.py +# @title: Apprentissage par descente de gradient +# @project: Mes scripts de ML +# @lang: fr +# @authors: Philippe Roy +# @copyright: Copyright (C) 2023 Philippe Roy +# @license: GNU GPL +############################################################################### + +### +# Commandes NumPy : +# - np.array : créer un tableau à partir d'une liste de listes +# - np.c_ : concatène les colonnes des tableaux +# - np.ones : créer un tableau de 1 +# - np.linalg.inv : inversion de matrice +# - .T : transposé de matrice +# - .dot : produit de matrice +### + +# Observations d'apprentisage +m = 100 # Nombre d'observations +x = 2*np.random.rand(m, 1) # Liste des observations x1 +y = 4 + 3*x + np.random.rand(m, 1) # Liste des cibles y +X = np.c_[np.ones((m, 1)), x] # Matrice des observations, avec x0=1 +plt.plot(x, y, 'b.') + +# Nouvelles observations +x_new=np.array([[0], [2]]) +X_new = np.c_[np.ones((2, 1)), x_new] # Matrice des observations, avec x0=1 + +# Phase d'apprentissage par descente de gradient +eta = 0.001 # Taux d'appentissage (valeur par défaut : 0.1) +n = 10000 # Nombre d'itérations (valeur par défaut : 1000) +theta= np.random.randn(2,1) # Initialisation aléatoire + +for i in range(n): + + # Calcul du pas + gradients = 2/m * X.T.dot(X.dot(theta) - y) + theta = theta - eta * gradients + + # Prédiction du pas + y_predict=X_new.dot(theta) + plt.plot(x_new, y_predict, 'y-') + +# Phase d'inférence (dernier pas) +plt.plot(x_new, y_predict, 'r-') +plt.show() diff --git a/fondamentaux/03-descente_gradient_stochastique.py b/fondamentaux/03-descente_gradient_stochastique.py new file mode 100644 index 0000000..bccbf6c --- /dev/null +++ b/fondamentaux/03-descente_gradient_stochastique.py @@ -0,0 +1,52 @@ +import numpy as np +import matplotlib.pyplot as plt + +############################################################################### +# 03-descente_gradient_stochastique.py +# @title: Apprentissage par descente de gradient stochastique +# @project: Mes scripts de ML +# @lang: fr +# @authors: Philippe Roy +# @copyright: Copyright (C) 2023 Philippe Roy +# @license: GNU GPL +############################################################################### + +### +# Commandes NumPy : +# - np.array : créer un tableau à partir d'une liste de listes +# - np.c_ : concatène les colonnes des tableaux +# - np.ones : créer un tableau de 1 +# - np.linalg.inv : inversion de matrice +# - .T : transposé de matrice +# - .dot : produit de matrice +### + +# Observations d'apprentisage +m = 100 # Nombre d'observations +x = 2*np.random.rand(m, 1) # Liste des observations x1 +y = 4 + 3*x + np.random.rand(m, 1) # Liste des cibles y +X = np.c_[np.ones((m, 1)), x] # Matrice des observations, avec x0=1 +plt.plot(x, y, 'b.') + +# Nouvelles observations +x_new=np.array([[0], [2]]) +X_new = np.c_[np.ones((2, 1)), x_new] # Matrice des observations, avec x0=1 + +# Phase d'apprentissage par descente de gradient +eta = 0.001 # Taux d'appentissage +n = 10000 # Nombre d'itération +theta= np.random.randn(2,1) # Initialisation aléatoire + +for i in range(n): + + # Calcul du pas + gradients = 2/m * X.T.dot(X.dot(theta) - y) + theta = theta - eta * gradients + + # Prédiction du pas + y_predict=X_new.dot(theta) + plt.plot(x_new, y_predict, 'y-') + +# Phase d'inférence (dernier pas) +plt.plot(x_new, y_predict, 'r-') +plt.show()