Machine_Learning_Training / cours-pdf.html
maalouf imad
V1
47f1575 verified
Raw
History Blame Contribute Delete
24.8 kB
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Cours de Machine Learning - ML Academy</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
<script>
window.MathJax = {
tex: { inlineMath: [['$', '$']], displayMath: [['$$', '$$']] },
options: { skipHtmlTags: ['script','noscript','style','textarea','pre'] }
};
</script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<style>
/* Reset */
* { box-sizing: border-box; margin: 0; padding: 0; }
body { margin: 0; padding: 0; font-family: 'Inter', -apple-system, sans-serif; }
/* Page setup */
@page {
size: A4;
margin: 2.5cm 2cm;
@bottom-center {
content: "Imad Maalouf — ML Academy";
font-size: 9pt;
color: #666;
}
@bottom-right {
content: counter(page);
font-size: 9pt;
color: #666;
}
}
@page :first {
margin: 0;
@bottom-center { content: none; }
@bottom-right { content: none; }
}
/* Cover page */
.cover {
width: 210mm;
height: 297mm;
margin: 0;
position: relative;
overflow: hidden;
page-break-after: always;
background: linear-gradient(135deg, #0f0f1a 0%, #1a1a2e 50%, #252542 100%);
}
.cover-decoration {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
overflow: hidden;
}
.cover-circle {
position: absolute;
border-radius: 50%;
opacity: 0.1;
}
.cover-circle-1 {
width: 400px;
height: 400px;
background: #6366f1;
top: -100px;
right: -100px;
}
.cover-circle-2 {
width: 300px;
height: 300px;
background: #06b6d4;
bottom: 10%;
left: -80px;
}
.cover-circle-3 {
width: 200px;
height: 200px;
background: #f59e0b;
top: 40%;
right: 15%;
}
.cover-content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
width: 80%;
z-index: 1;
}
.cover-badge {
display: inline-block;
padding: 8px 16px;
background: rgba(99, 102, 241, 0.2);
border: 1px solid rgba(99, 102, 241, 0.4);
border-radius: 20px;
font-family: 'JetBrains Mono', monospace;
font-size: 10pt;
color: #818cf8;
text-transform: uppercase;
letter-spacing: 2px;
margin-bottom: 30px;
}
.cover-title {
font-size: 36pt;
font-weight: 700;
color: #f8fafc;
margin-bottom: 15px;
line-height: 1.2;
}
.cover-subtitle {
font-size: 14pt;
color: #94a3b8;
margin-bottom: 60px;
}
.cover-author {
font-size: 12pt;
color: #818cf8;
margin-bottom: 10px;
}
.cover-info {
font-size: 10pt;
color: #64748b;
}
/* Content styles */
.content {
padding: 0;
}
h1 {
font-size: 20pt;
font-weight: 700;
color: #1a1a2e;
margin: 30pt 0 15pt 0;
padding-bottom: 8pt;
border-bottom: 2px solid #6366f1;
page-break-after: avoid;
}
h2 {
font-size: 14pt;
font-weight: 600;
color: #1a1a2e;
margin: 20pt 0 10pt 0;
page-break-after: avoid;
}
h3 {
font-size: 12pt;
font-weight: 600;
color: #333;
margin: 15pt 0 8pt 0;
page-break-after: avoid;
}
p {
font-size: 11pt;
line-height: 1.7;
color: #333;
margin-bottom: 10pt;
text-align: justify;
text-align-last: left;
}
strong {
font-weight: 600;
color: #1a1a2e;
}
em {
font-style: italic;
color: #444;
}
/* Info box */
.info-box {
background: #f8f9fa;
border-left: 4px solid #6366f1;
padding: 12pt 15pt;
margin: 15pt 0;
page-break-inside: avoid;
}
.info-box-title {
font-weight: 600;
color: #6366f1;
margin-bottom: 5pt;
font-size: 10pt;
}
.info-box p {
margin: 0;
font-size: 10pt;
}
/* Equation block */
.equation-block {
background: #f8f9fa;
border: 1px solid #e2e8f0;
border-left: 3px solid #6366f1;
border-radius: 4px;
padding: 15pt;
margin: 15pt 0;
text-align: center;
page-break-inside: avoid;
}
.equation-label {
display: block;
font-family: 'JetBrains Mono', monospace;
font-size: 8pt;
color: #64748b;
text-align: right;
margin-top: 8pt;
}
/* Cards grid */
.cards-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12pt;
margin: 15pt 0;
}
.card {
background: #f8f9fa;
border: 1px solid #e2e8f0;
border-radius: 6px;
padding: 12pt;
page-break-inside: avoid;
}
.card-icon {
width: 32px;
height: 32px;
background: linear-gradient(135deg, #6366f1, #06b6d4);
border-radius: 6px;
display: flex;
align-items: center;
justify-content: center;
font-size: 12pt;
font-weight: 700;
color: white;
margin-bottom: 8pt;
}
.card-title {
font-size: 10pt;
font-weight: 600;
color: #1a1a2e;
margin-bottom: 5pt;
}
.card-text {
font-size: 9pt;
color: #555;
line-height: 1.5;
}
/* Pipeline */
.pipeline {
display: flex;
gap: 8pt;
margin: 15pt 0;
padding: 12pt;
background: #f8f9fa;
border: 1px solid #e2e8f0;
border-radius: 6px;
}
.pipeline-step {
flex: 1;
text-align: center;
position: relative;
}
.pipeline-step:not(:last-child)::after {
content: '->';
position: absolute;
right: -10pt;
top: 50%;
transform: translateY(-50%);
color: #6366f1;
font-family: 'JetBrains Mono', monospace;
font-size: 10pt;
}
.pipeline-num {
width: 24pt;
height: 24pt;
background: linear-gradient(135deg, #6366f1, #06b6d4);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-family: 'JetBrains Mono', monospace;
font-size: 9pt;
font-weight: 700;
color: white;
margin: 0 auto 5pt;
}
.pipeline-label {
font-size: 8pt;
font-weight: 600;
color: #1a1a2e;
}
.pipeline-desc {
font-size: 7pt;
color: #64748b;
}
/* Comparison */
.comparison-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12pt;
margin: 15pt 0;
}
.comparison-box {
background: #f8f9fa;
border: 1px solid #e2e8f0;
border-radius: 6px;
padding: 12pt;
page-break-inside: avoid;
}
.comparison-box h4 {
font-size: 10pt;
font-weight: 600;
color: #1a1a2e;
margin-bottom: 8pt;
padding-bottom: 5pt;
border-bottom: 1px solid #e2e8f0;
}
.comparison-box ul {
list-style: none;
padding: 0;
margin: 0;
}
.comparison-box li {
padding: 3pt 0;
font-size: 9pt;
color: #444;
}
.comparison-box li::before {
content: '>';
color: #6366f1;
margin-right: 6pt;
font-family: 'JetBrains Mono', monospace;
}
/* Metric cards */
.metric-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 12pt;
margin: 15pt 0;
}
.metric-card {
background: #f8f9fa;
border: 1px solid #e2e8f0;
border-radius: 6px;
padding: 12pt;
text-align: center;
page-break-inside: avoid;
}
.metric-name {
font-family: 'JetBrains Mono', monospace;
font-size: 7pt;
color: #64748b;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 5pt;
}
.metric-formula {
font-family: 'JetBrains Mono', monospace;
font-size: 9pt;
color: #6366f1;
font-weight: 600;
margin-bottom: 3pt;
}
.metric-desc {
font-size: 7pt;
color: #64748b;
}
/* Table */
table {
width: 100%;
border-collapse: collapse;
margin: 15pt 0;
font-size: 9pt;
page-break-inside: avoid;
}
thead {
display: table-header-group;
}
th {
background: #f1f5f9;
color: #475569;
font-family: 'JetBrains Mono', monospace;
font-size: 8pt;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.5px;
padding: 8pt 10pt;
text-align: left;
border-top: 2px solid #333;
border-bottom: 1px solid #333;
}
td {
padding: 8pt 10pt;
border-bottom: 1px solid #e2e8f0;
color: #333;
}
tbody tr:last-child td {
border-bottom: 2px solid #333;
}
/* Page break utilities */
.page-break {
page-break-after: always;
}
/* Prevent overflow */
pre, table, figure, img, svg, blockquote {
max-width: 100%;
box-sizing: border-box;
}
a { word-break: break-all; }
/* Author footer on each page */
.author-footer {
margin-top: 30pt;
padding-top: 15pt;
border-top: 1px solid #e2e8f0;
text-align: center;
}
.author-name {
font-size: 10pt;
font-weight: 600;
color: #6366f1;
}
.author-contact {
font-size: 8pt;
color: #64748b;
margin-top: 3pt;
}
</style>
</head>
<body>
<!-- Cover Page -->
<div class="cover">
<div class="cover-decoration">
<div class="cover-circle cover-circle-1"></div>
<div class="cover-circle cover-circle-2"></div>
<div class="cover-circle cover-circle-3"></div>
</div>
<div class="cover-content">
<div class="cover-badge">Formation 2025/2026</div>
<h1 class="cover-title">Cours de<br>Machine Learning</h1>
<p class="cover-subtitle">De la theorie a la pratique — Algorithmes fondamentaux et techniques avancees</p>
<p class="cover-author">Formateur : Imad Maalouf</p>
<p class="cover-info">ML Academy — GE-MCI 4A</p>
</div>
</div>
<!-- Content -->
<div class="content">
<h1>1. Introduction au Machine Learning</h1>
<p>
Le <strong>Machine Learning (ML)</strong> est une branche de l'intelligence artificielle
qui permet aux machines d'apprendre a partir de donnees <em>sans etre explicitement programmees</em>
pour chaque tache. Au lieu de coder des regles a la main, on montre des exemples au modele
et il decouvre lui-meme les patterns.
</p>
<div class="info-box">
<div class="info-box-title">Idee fondamentale</div>
<p>
On cherche a approximer une fonction inconnue $f$ telle que $\hat{y} = f(x_1, x_2, \ldots, x_n)$.
Le modele ML apprend cette fonction a partir d'exemples $(x, y)$ connus.
</p>
</div>
<h2>1.1 Types d'apprentissage</h2>
<div class="cards-grid">
<div class="card">
<div class="card-icon">S</div>
<div class="card-title">Supervise</div>
<div class="card-text">Donnees labellisees $(x, y)$ : regression et classification.</div>
</div>
<div class="card">
<div class="card-icon">N</div>
<div class="card-title">Non supervise</div>
<div class="card-text">Pas de labels : clustering, reduction de dimension.</div>
</div>
<div class="card">
<div class="card-icon">R</div>
<div class="card-title">Par renforcement</div>
<div class="card-text">Agent apprend via actions-recompenses.</div>
</div>
</div>
<h2>1.2 Pipeline ML typique</h2>
<div class="pipeline">
<div class="pipeline-step">
<div class="pipeline-num">1</div>
<div class="pipeline-label">Donnees</div>
<div class="pipeline-desc">Collecte & nettoyage</div>
</div>
<div class="pipeline-step">
<div class="pipeline-num">2</div>
<div class="pipeline-label">Features</div>
<div class="pipeline-desc">Engineering</div>
</div>
<div class="pipeline-step">
<div class="pipeline-num">3</div>
<div class="pipeline-label">Split</div>
<div class="pipeline-desc">Train / Test</div>
</div>
<div class="pipeline-step">
<div class="pipeline-num">4</div>
<div class="pipeline-label">Modele</div>
<div class="pipeline-desc">Entrainement</div>
</div>
<div class="pipeline-step">
<div class="pipeline-num">5</div>
<div class="pipeline-label">Evaluation</div>
<div class="pipeline-desc">Metriques</div>
</div>
<div class="pipeline-step">
<div class="pipeline-num">6</div>
<div class="pipeline-label">Production</div>
<div class="pipeline-desc">Deploiement</div>
</div>
</div>
<div class="page-break"></div>
<h1>2. Regression Lineaire</h1>
<p>
La <strong>regression lineaire</strong> modelise la relation entre les features et la cible
par une fonction affine. C'est l'algorithme le plus simple mais souvent tres efficace
comme baseline.
</p>
<div class="equation-block">
$$\hat{y} = w_0 + w_1 x_1 + w_2 x_2 + \cdots + w_n x_n = \mathbf{w}^T \mathbf{x}$$
<span class="equation-label">Modele lineaire avec coefficients $\mathbf{w}$</span>
</div>
<p>
L'objectif est de minimiser l'erreur quadratique moyenne (MSE) :
</p>
<div class="equation-block">
$$\text{MSE} = \frac{1}{m} \sum_{i=1}^{m} (y_i - \hat{y}_i)^2$$
<span class="equation-label">Fonction de cout : moyenne des erreurs quadratiques</span>
</div>
<div class="info-box">
<div class="info-box-title">Solution analytique</div>
<p>
La regression lineaire admet une solution fermee :
$\mathbf{w}^* = (X^T X)^{-1} X^T Y$. Pas besoin d'iterations !
</p>
</div>
<h2>2.1 Avantages et limitations</h2>
<div class="comparison-grid">
<div class="comparison-box">
<h4>[+] Avantages</h4>
<ul>
<li>Tres rapide a entrainer</li>
<li>Interpretable (coefficients)</li>
<li>Pas d'hyperparametres</li>
<li>Excellent baseline</li>
</ul>
</div>
<div class="comparison-box">
<h4>[-] Limitations</h4>
<ul>
<li>Relation lineaire uniquement</li>
<li>Sensible aux outliers</li>
<li>Performance decroit en haute dimension</li>
</ul>
</div>
</div>
<div class="page-break"></div>
<h1>3. Regression Logistique</h1>
<p>
Malgre son nom, la <strong>regression logistique</strong> est un algorithme de <em>classification</em>.
Elle predit la probabilite d'appartenance a une classe en utilisant la fonction sigmoide.
</p>
<div class="equation-block">
$$P(y=1|\mathbf{x}) = \sigma(\mathbf{w}^T \mathbf{x}) = \frac{1}{1 + e^{-\mathbf{w}^T \mathbf{x}}}$$
<span class="equation-label">Fonction sigmoide pour la classification binaire</span>
</div>
<div class="info-box">
<div class="info-box-title">Cas d'usage : Dataset Titanic</div>
<p>
Predire la survie des passagers du Titanic a partir de leur age, sexe,
classe de billet, etc. Un classique du ML pour debuter !
</p>
</div>
<div class="page-break"></div>
<h1>4. Random Forest</h1>
<p>
<strong>Random Forest</strong> est un ensemble d'arbres de decision qui votent pour predire.
C'est l'un des algorithmes les plus populaires en ML applique : performant, robuste,
peu sensible au tuning.
</p>
<h2>4.1 Algorithme : Bagging + Random Splits</h2>
<div class="pipeline">
<div class="pipeline-step">
<div class="pipeline-num">1</div>
<div class="pipeline-label">Bootstrap</div>
<div class="pipeline-desc">Echantillons aleatoires</div>
</div>
<div class="pipeline-step">
<div class="pipeline-num">2</div>
<div class="pipeline-label">Splits</div>
<div class="pipeline-desc">Features aleatoires</div>
</div>
<div class="pipeline-step">
<div class="pipeline-num">3</div>
<div class="pipeline-label">Arbres</div>
<div class="pipeline-desc">N arbres independants</div>
</div>
<div class="pipeline-step">
<div class="pipeline-num">4</div>
<div class="pipeline-label">Vote</div>
<div class="pipeline-desc">Moyenne ou mode</div>
</div>
</div>
<h2>4.2 Hyperparametres cles</h2>
<div class="metric-row">
<div class="metric-card">
<div class="metric-name">n_estimators</div>
<div class="metric-formula">100 - 500</div>
<div class="metric-desc">Nombre d'arbres</div>
</div>
<div class="metric-card">
<div class="metric-name">max_depth</div>
<div class="metric-formula">10 - 30</div>
<div class="metric-desc">Profondeur max</div>
</div>
<div class="metric-card">
<div class="metric-name">min_samples_split</div>
<div class="metric-formula">2 - 10</div>
<div class="metric-desc">Min pour splitter</div>
</div>
</div>
<div class="info-box">
<div class="info-box-title">Feature Importance</div>
<p>
Random Forest fournit automatiquement l'importance de chaque feature,
ce qui aide a comprendre quelles variables influencent le plus les predictions.
</p>
</div>
<div class="page-break"></div>
<h1>5. Reseaux de Neurones</h1>
<p>
Les <strong>reseaux de neurones</strong> sont inspires du cerveau humain : des couches de neurones
interconnectes executent des transformations non-lineaires. Ils excellent pour les patterns complexes.
</p>
<h2>5.1 Fonctionnement : Forward + Backprop</h2>
<div class="cards-grid">
<div class="card">
<div class="card-icon">F</div>
<div class="card-title">Forward Pass</div>
<div class="card-text">Donnees traversent les couches : $\mathbf{h}_1 = \sigma(W_1 \mathbf{x} + b_1)$</div>
</div>
<div class="card">
<div class="card-icon">L</div>
<div class="card-title">Loss Computation</div>
<div class="card-text">Compare prediction vs realite : $L = \frac{1}{m} \sum (y - \hat{y})^2$</div>
</div>
<div class="card">
<div class="card-icon">B</div>
<div class="card-title">Backpropagation</div>
<div class="card-text">Calcule les gradients via la chaine de derivation</div>
</div>
</div>
<h2>5.2 Fonctions d'activation</h2>
<div class="metric-row">
<div class="metric-card">
<div class="metric-name">ReLU</div>
<div class="metric-formula">$f(x) = \max(0, x)$</div>
<div class="metric-desc">Couches cachees</div>
</div>
<div class="metric-card">
<div class="metric-name">Sigmoid</div>
<div class="metric-formula">$f(x) = \frac{1}{1 + e^{-x}}$</div>
<div class="metric-desc">Classification binaire</div>
</div>
<div class="metric-card">
<div class="metric-name">Softmax</div>
<div class="metric-formula">$f(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}$</div>
<div class="metric-desc">Classification multi-classe</div>
</div>
</div>
<div class="page-break"></div>
<h1>6. LSTM et Series Temporelles</h1>
<p>
<strong>LSTM (Long Short-Term Memory)</strong> est un type de reseau neuronal pour series temporelles.
Il peut "retenir" l'information sur de longues periodes — crucial pour les predictions temporelles.
</p>
<div class="info-box">
<div class="info-box-title">Probleme des RNN vanilla</div>
<p>
Les gradients disparaissent (vanishing) ou explosent (exploding) sur de longues sequences.
Le LSTM resout ce probleme avec son <strong>cell state</strong>.
</p>
</div>
<h2>6.1 Les trois portes du LSTM</h2>
<div class="metric-row">
<div class="metric-card">
<div class="metric-name">Forget Gate</div>
<div class="metric-formula">$f_t = \sigma(W_f [h_{t-1}, x_t] + b_f)$</div>
<div class="metric-desc">Quoi oublier ?</div>
</div>
<div class="metric-card">
<div class="metric-name">Input Gate</div>
<div class="metric-formula">$i_t = \sigma(W_i [h_{t-1}, x_t] + b_i)$</div>
<div class="metric-desc">Quoi ajouter ?</div>
</div>
<div class="metric-card">
<div class="metric-name">Output Gate</div>
<div class="metric-formula">$o_t = \sigma(W_o [h_{t-1}, x_t] + b_o)$</div>
<div class="metric-desc">Quoi exposer ?</div>
</div>
</div>
<div class="info-box">
<div class="info-box-title">Cas d'usage</div>
<p>
Prediction de prix boursiers, meteo, consommation energetique,
traitement du langage naturel (NLP)...
</p>
</div>
<div class="page-break"></div>
<h1>7. Metriques de Performance</h1>
<p>
Evaluer correctement un modele est crucial. Les bonnes metriques dependent du type de probleme
(regression vs classification) et des objectifs metier.
</p>
<h2>7.1 Regression</h2>
<div class="metric-row">
<div class="metric-card">
<div class="metric-name">MAE</div>
<div class="metric-formula">$\frac{1}{n}\sum|y_i - \hat{y}_i|$</div>
<div class="metric-desc">Robuste aux outliers</div>
</div>
<div class="metric-card">
<div class="metric-name">RMSE</div>
<div class="metric-formula">$\sqrt{\frac{1}{n}\sum(y_i - \hat{y}_i)^2}$</div>
<div class="metric-desc">Penalise les grandes erreurs</div>
</div>
<div class="metric-card">
<div class="metric-name">R2</div>
<div class="metric-formula">$1 - \frac{SS_{res}}{SS_{tot}}$</div>
<div class="metric-desc">% variance expliquee</div>
</div>
</div>
<h2>7.2 Classification</h2>
<table>
<thead>
<tr>
<th>Metrique</th>
<th>Formule</th>
<th>Usage</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Accuracy</strong></td>
<td>$(TP + TN) / Total$</td>
<td>Classes equilibrees</td>
</tr>
<tr>
<td><strong>Precision</strong></td>
<td>$TP / (TP + FP)$</td>
<td>Minimiser faux positifs</td>
</tr>
<tr>
<td><strong>Recall</strong></td>
<td>$TP / (TP + FN)$</td>
<td>Minimiser faux negatifs</td>
</tr>
<tr>
<td><strong>F1-Score</strong></td>
<td>$2 \cdot \frac{P \cdot R}{P + R}$</td>
<td>Classes desequilibrees</td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<h1>8. Optimisation et Regularisation</h1>
<p>
Pour eviter le <strong>surapprentissage (overfitting)</strong> et ameliorer la generalisation,
plusieurs techniques existent.
</p>
<div class="cards-grid">
<div class="card">
<div class="card-icon">D</div>
<div class="card-title">Dropout</div>
<div class="card-text">Desactive aleatoirement des neurones pendant l'entrainement.</div>
</div>
<div class="card">
<div class="card-icon">E</div>
<div class="card-title">Early Stopping</div>
<div class="card-text">Arrete l'entrainement quand la validation stagne.</div>
</div>
<div class="card">
<div class="card-icon">L</div>
<div class="card-title">L2 Regularization</div>
<div class="card-text">Penalise les grands poids : $L_{total} = L_{data} + \lambda \sum w^2$</div>
</div>
</div>
<div class="info-box">
<div class="info-box-title">Regle d'or</div>
<p>
Toujours comparer les metriques sur <strong>train</strong> ET <strong>test</strong>.
Un grand ecart = overfitting. Objectif : R2 train ≈ R2 test.
</p>
</div>
<div class="author-footer">
<div class="author-name">Imad Maalouf</div>
<div class="author-contact">
imadmaalouf02@gmail.com | github.com/imadmaalouf02 | huggingface.co/spaces/MAALOOUF/ML_Training
</div>
</div>
</div>
</body>
</html>