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 linéaire et descente de gradient
This commit is contained in:
parent
df49e2a2c6
commit
82c244c029
44
fondamentaux/01-regression_lineaire.py
Normal file
44
fondamentaux/01-regression_lineaire.py
Normal file
@ -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 <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.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()
|
||||
|
||||
|
52
fondamentaux/02-descente_gradient.py
Normal file
52
fondamentaux/02-descente_gradient.py
Normal file
@ -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 <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.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()
|
52
fondamentaux/03-descente_gradient_stochastique.py
Normal file
52
fondamentaux/03-descente_gradient_stochastique.py
Normal file
@ -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 <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.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()
|
Loading…
Reference in New Issue
Block a user