Optimiser un Gradient stochastic sur dataset UCI
modelisation statistique :
prediction :
There are two cultures in the use of statistical modeling to reach conclusions from data.
One assumes that the data are generated by a given stochastic data model. The other uses algorithmic models and treats the data mechanism as unknown.
The statistical community has been committed to the almost exclusive use of data models. This commitment has led to irrelevant theory, questionable conclusions, and has kept statisticians from working on a large range of interesting current problems.
Algorithmic modeling, both in theory and practice, has developed rapidly in fields outside statistics. It can be used both on large complex data sets and as a more accurate and informative alternative to data modeling on smaller data sets.
If our goal as a field is to use data to solve problems, then we need to move away from exclusive dependence on data models and adopt a more diverse set of tools
Dans le monde réel, les données sont souvent mal foutues.
mais aussi
Différences d'objectifs et de données disponibles
Régression
Classification binaire : 0/1, vrai faux, click pas click
Classification multiclasse : plusieurs classes
inventée au 1er siècle apres JC par les babyloniens.
x = 1precision = 0.001Tant que |x^2 - 2| > precision :
x = (x + 2/x)/2La suite est disponible en notebook jupyter: heron_sqrt_2.ipynb et sur Colab
En python, cela s'ecrit
x = 1
precision = 0.001
while (abs(x**2 - 2) > precision) :
x = (x + 2/x)/2
print(x)
Converge extremenent rapide !
L'erreur d'estimation |x^2 - 2| est la différence en valeur absolu entre la valeur candidate au carré et 2.
x = 1
error = 1
precision = 0.001
n_iter = 0
while error > precision:
# Update the estimation
x = (x + 2/x) / 2
# Update the error with the new value of x
n_iter += 1
print(f"Iteration {n_iter}: x = {x}")
error = abs(x**2 - 2)
print(f"Approximation of √2: {x}")
print(f"Final error: {error}")
print(f"Difference: {abs(x - 2**0.5)}")
print(f"Number of iterations: {n_iter}")
on peut modifier la vitesse de convergence avec un coefficient moderateur de la mise a jour
On peut réecrire x = (x + 2/x) / 2 => x = x + lambda * (2/x - x) avec lambda = 1/2 ou une autre valeur
lambda petit => convergence lente lambda grand => convergence rapide mais peut exploser
x = 1
error = 1
precision = 0.001
lambda_val = 0.1
n_iter = 0
while error > precision:
# Update the estimation
x = x + lambda_val * (2/x - x)
n_iter += 1
print(f"Iteration {n_iter}: x = {x}")
# Update the error with the new value of x
error = abs(x**2 - 2)
print(f"Approximation of √2: {x}")
print(f"Final error: {error}")
print(f"Difference: {abs(x - 2**0.5)}")
au lieu de minimiser l'erreur absolue, on peut minimiser l'erreur quadratique
error = (x^2 - 2)^2
x = 1
error = 1
precision = 0.001
lambda_val = 0.1
n_iter = 0
def cost_function(x):
# return abs(x**2 - 2)
return (x**2 -2)**2
while error > precision:
# Update the estimation
x = x + lambda_val * (2/x - x)
n_iter += 1
print(f"Iteration {n_iter}: x = {x}")
# Update the error with the new value of x
error = cost_function(x)
print(f"Approximation of √2: {x}")
print(f"Final error: {error}")
print(f"Difference: {abs(x - 2**0.5)}")
La convergence est plus rapide avec l'erreur quadratique que l'erreur absolue
Capte la tendance générale des observations.
dimension = 1: Predire une variable y à partir d'une variable x, trouver les coefficients a et b dans l'équation de la droite
y = a x + b.
dimension 2, x_1 et x_2 de y, le modèle correspond à l'équation du plan défini par
y = a x_1 + b x_2 + c
dimension N, et N variables {x_1, ..., x_N} => trouver les N coefficients c_1, ... c_N de l'équation:
y = c_1 x_1 +_ c_2 x_2 + ... + c_N x_N + c_{N+1}
le dataset advertising :
Pour aller plus loin sur la regression lineaire, voir le cours Entrenez une régression linéaire
Objectif : Trouver le minimum d'une fonction dérivable f(x) (la fonction de cout)
Principe : Itération selon la direction opposée au gradient
xn+1=xn−η∇f(xn)
où η est le taux d'apprentissage (learning rate) et ∇f(xn) le gradient, la derivée de la fonction f(x) (= le gradient)
Le gradient, c'est la pente de la fonction à un point donné.
Exemple : Minimiser f(x)=x2−4x+5
Dérivée : f′(x)=2x−4
Algorithme :
Résultat : f(2)=1 est le minimum global
voir le colab
voir slides gradient stochastique
aucun algorithme n’est universellement supérieur à un autre sur l’ensemble des problèmes possibles.
Il n’existe pas d’algorithme qui performe systématiquement mieux que tous les autres, quelle que soit la tâche ou la distribution des données. Toute méthode optimisée pour un type de problème (ex : classification d’images) peut être surpassée par une autre sur un problème différent (ex : prédiction de séries temporelles).
principe de choisir, à chaque itération, l’option qui semble la meilleure à court terme, sans revenir en arrière. Cette approche est simple, efficace pour certains problèmes, mais ne garantit pas toujours l’optimalité globale. Caractéristiques clés :
C’est souvent plus rapide et moins gourmand en ressources que des méthodes exhaustives (ex : recherche combinatoire). Idéal pour des problèmes où une solution "suffisamment bonne" suffit.
L’algorithme est sensible à l’ordre des données ou des décisions. Un mauvais choix précoce peut dégrader la performance finale.
41'37"
Notebook dispo sur