path = window.location.pathname.replace(".html", ".qmd");
path_modified = (path.includes('en/content')) ? path.replace('en/content', 'content/en') : path
html`${printBadges({fpath: path_modified})}`
html`<div>${getConditionalHTML(path, true)}</div>`
function getConditionalHTML(path, print) {
if (print === false) return ``
if (isBetweenSeptAndDec()) {
return md`<i>La correction sera visible prochainement sur cette page. En attendant, la liste des corrections déjà acccessibles est [ici](/content/annexes/corrections.html)</i>`; // Return an empty string if not between the dates
else {
} return html`
<details>
<summary>
Pour ouvrir la version corrigée sous forme de <i>notebook</i>
</summary>
${printBadges({ fpath: path, correction: true })}
</details>
`;
} }
function renderCorrection({ fpath, correction }) {
if (correction) {
return html`${printBadges({ fpath: fpath, correction: true })}`;
else {
} return html`<i>La correction sera visible prochainement sur cette page.</i>`;
} }
Nous allons ici voir des méthodes générales permettant de s’assurer que le modèle de Machine Learning mobilisé est de qualité. Ce chapitre ne présente pas d’exercice ou de code, il est là pour présenter certains concepts que nous appliquerons dans les prochains chapitres.
1 Découper l’échantillon
Le chapitre précédent présentait le pipeline simple ci-dessous pour introduire à la notion d’entraînement d’un modèle :
Ce pipeline fait abstraction d’hypothèses exogènes à l’estimation mais qui sont à faire sur des paramètres car elles affectent la performance de la prédiction. Par exemple, de nombreux modèles proposent une pénalisation des modèles non parcimonieux pour éviter le sur-apprentissage. Le choix de la pénalisation idéale dépend de la structure des données et n’est jamais connue, ex-ante par le modélisateur. Faut-il pénaliser fortement ou non le modèle ? En l’absence d’argument théorique, on aura tendance à tester plusieurs paramètres de pénalisation et choisir celui qui permet la meilleure prédiction.
La notion de validation croisée permettra de généraliser cette approche. Ces paramètres qui affectent la prédiction seront pas la suite appelés des hyperparamètres. Comme nous allons le voir, nous allons aboutir à un raffinement de l’approche pour obtenir un pipeline ayant plutôt cet aspect :
2 Le problème du sur-apprentissage
Le but du Machine Learning est de calibrer l’algorithme sur des exemples connus (données labellisées) afin de généraliser à des exemples nouveaux (éventuellement non labellisés). On vise donc de bonnes qualités prédictives et non un ajustement parfait aux données historiques.
Il existe un arbitrage biais-variance dans la qualité d’estimation1. Soit \(h(X,\theta)\) un modèle statistique. On peut décomposer l’erreur d’estimation en deux parties :
\[ \mathbb{E}\bigg[(y - h(\theta,X))^2 \bigg] = \underbrace{ \bigg( y - \mathbb{E}(h_\theta(X)) \bigg)^2}_{\text{biais}^2} + \underbrace{\mathbb{V}\big(h(\theta,X)\big)}_{\text{variance}} \]
Il y a ainsi un compromis à faire entre biais et variance. Un modèle peu parcimonieux, c’est-à-dire proposant un grand nombre de paramètres, va, en général, avoir un faible biais mais une grande variance. En effet, le modèle va tendre à se souvenir d’une combinaison de paramètres à partir d’un grand nombre d’exemples sans être capable d’apprendre la règle qui permette de structurer les données.
Par exemple, la ligne verte ci-dessous est trop dépendante des données et risque de produire une erreur plus importante que la ligne noire (qui moyennise plus) sur de nouvelles données.
Pour renforcer la validité externe d’un modèle, il est ainsi commun, en Machine Learning :
- d’estimer un modèle sur un jeu de données (jeu d’apprentissage ou training set) mais d’évaluer la performance, et donc la pertinence du modèle, sur d’autres données, qui n’ont pas été mobilisées lors de la phase d’estimation (jeu de validation, de test ou testing set) ;
- d’avoir des mesures de performances qui pénalisent fortement les modèles peu parcimonieux (BIC) ou conduire une première phase de sélection de variable (par des méthodes de LASSO…)
Pour décomposer un modèle en jeu d’estimation et de test,
la meilleure méthode est d’utiliser les fonctionnalités de scikit
de la manière suivante :
from sklearn.model_selection import train_test_split
= train_test_split(x, y, test_size=0.2, random_state=0) xTrain, xTest, yTrain, yTest
La proportion d’observations dans le jeu de test est contrôlée par l’argument test_size
.
La proportion optimale n’existe pas.
La règle du pouce habituelle est d’assigner aléatoirement 20 % des observations
dans l’échantillon de test pour garder suffisamment d’observations
dans l’échantillon d’estimation.
Hint
Lorsqu’on travaille avec des séries temporelles, l’échantillonnage aléatoire des observations n’a pas vraiment de sens. Il vaut mieux tester la qualité de l’observation sur des périodes distinguées.
Note
Avec des données multi-niveaux,
comme c’est le cas de données géographiques ou de données individuelles avec des variables de classe,
il peut être intéressant d’utiliser un échantillonnage stratifié.
Cela permet de garder une proportion équivalente de chaque groupe dans les deux jeux de données de test ou d’apprentissage.
Ce type d’échantillonnage stratifié est également possible avec scikit
.
L’exercice sur les SVM illustre cette construction et la manière dont elle facilite l’évaluation de la qualité d’un modèle.
3 Validation croisée
Certains algorithmes font intervenir des hyperparamètres, c’est-à-dire des paramètres exogènes qui déterminent la prédiction mais ne sont pas estimés. La validation croisée est une méthode permettant de choisir la valeur du paramètre qui optimise la qualité de la prédiction en agrégeant des scores de performance sur des découpages différents de l’échantillon d’apprentissage.
La validation croisée permet d’évaluer les performances de modèles différents (SVM, random forest, etc.) ou, couplé à une stratégie de grid search, de trouver les valeurs des hyperparamètres qui aboutissent à la meilleure prédiction.
Note
L’étape de découpage de l’échantillon de validation croisée est à distinguer de l’étape split_sample_test
. A ce stade, on a déjà partitionné les données en échantillon d’apprentissage et test. C’est l’échantillon d’apprentissage qu’on découpe en sous-morceaux.
La méthode la plus commune est la validation croisée k-fold. On partitionne les données en \(K\) morceaux et on considère chaque pli, tour à tour, comme un échantillon de test en apprenant sur les \(K-1\) échantillons restants. Les \(K\) indicateurs ainsi calculés sur les \(K\) échantillons de test peuvent être moyennés et comparés pour plusieurs valeurs des hyperparamètres.
Il existe d’autres types de validation croisée, notamment la leave one out qui consiste à considérer une fois exactement chaque observation comme l’échantillon de test (une n-fold cross validation).
4 Mesurer la performance
Jusqu’à présent, nous avons passé sous silence la question du support de \(y\), c’est-à-dire de l’étendue des valeurs de notre variable d’intérêt. En pratique, la distribution des \(y\) va néanmoins déterminer deux questions cruciales : la méthode et l’indicateur de performance.
En apprentissage supervisé, on distingue en général les problèmes de:
- Classification : la variable \(y\) est discrète
- Régression : la variable \(y\) est continue
Les deux approches ne sont pas sans lien. On peut par exemple voir le modèle économétrique de choix d’offre de travail comme un problème de classification (participation ou non au marché du travail) ou de régression (régression sur un modèle à variable latente)
4.1 Classification
La plupart des critères de performance sont construits à partir de la matrice de confusion :
A partir des 4 coins de cette matrice, il existe plusieurs mesure de performance
Critère | Mesure | Calcul |
---|---|---|
Accuracy | Taux de classification correcte | Diagonale du tableau : \(\frac{TP+TN}{TP+FP+FN+FP}\) |
Precision | Taux de vrais positifs | Ligne des prédictions positives : \(\frac{TP}{TP+FP}\) |
Recall (rappel) | Capacité à identifier les labels positifs | Colonne des prédictions positives : \(\frac{TP}{TP+FN}\) |
F1 Score | Mesure synthétique (moyenne harmonique) de la précision et du rappel | \(2 \frac{precision \times recall}{precision + recall}\) |
En présence de classes désequilibrées, la F-mesure est plus pertinente pour évaluer les performances mais l’apprentissage restera mauvais si l’algorithme est sensible à ce problème. Notamment, si on désire avoir une performance équivalente sur les classes minoritaires, il faut généralement les sur-pondérer (ou faire un échantillonnage stratifié) lors de la constitution de l’échantillon d’observation.
Il est possible de construire des modèles à partir des probabilités prédites d’appartenir à la classe d’intérêt. Pour cela, on fixe un seuil \(c\) tel que
\[ \mathbb{P}(y_i=1|X_i) > c \Rightarrow \widehat{y}_i = 1 \]
Plus on augmente \(c\), plus on est sélectif sur le critère d’appartenance à la classe. La précision, i.e. le taux de vrais positifs parmi les prédictions positives, augmente. Mais on augmente le nombre de positifs manqués (autrement dit on diminue le rappel). Pour chaque valeur de \(c\) correspond une matrice de confusion et donc des mesures de performances. La courbe ROC est un outil classique pour représenter en un graphique l’ensemble de ces informations en faisant varier \(c\) de 0 à 1:
L’aire sous la courbe (AUC) permet d’évaluer quantitativement le meilleur modèle au sens de ce critère. L’AUC représente la probabilité que le modèle soit capable de distinguer entre la classe positive et négative.
4.2 Régression
En Machine Learning, les indicateurs de performance en régression sont les suivants :
Nom | Formule |
---|---|
Mean squared error | \(MSE = \mathbb{E}\left[(y - h_\theta(X))^2\right]\) |
Root Mean squared error | \(RMSE = \sqrt{\mathbb{E}\left[(y - h_\theta(X))^2\right]}\) |
Mean Absolute Error | \(MAE = \mathbb{E} \bigg[ \lvert y - h_\theta(X) \rvert \bigg]\) |
Mean Absolute Percentage Error | \(MAE = \mathbb{E}\left[ \left\lvert \frac{y - h_\theta(X)}{y} \right\rvert \right]\) |
L’économètre se focalise moins sur la qualité de la prédiction et utilisera d’autres critères pour évaluer la qualité d’un modèle (certains, comme le BIC, sont à regarder aussi dans une optique Machine Learning) : \(R^2\), \(BIC\), \(AIC\), log-likelihood, etc.
Informations additionnelles
environment files have been tested on.
Latest built version: 2024-10-12
Python version used:
'3.12.6 | packaged by conda-forge | (main, Sep 30 2024, 18:08:52) [GCC 13.3.0]'
Package | Version |
---|---|
affine | 2.4.0 |
aiobotocore | 2.15.1 |
aiohappyeyeballs | 2.4.3 |
aiohttp | 3.10.8 |
aioitertools | 0.12.0 |
aiosignal | 1.3.1 |
alembic | 1.13.3 |
altair | 5.4.1 |
aniso8601 | 9.0.1 |
annotated-types | 0.7.0 |
appdirs | 1.4.4 |
archspec | 0.2.3 |
asttokens | 2.4.1 |
attrs | 24.2.0 |
babel | 2.16.0 |
bcrypt | 4.2.0 |
beautifulsoup4 | 4.12.3 |
black | 24.8.0 |
blinker | 1.8.2 |
blis | 0.7.11 |
bokeh | 3.5.2 |
boltons | 24.0.0 |
boto3 | 1.35.23 |
botocore | 1.35.23 |
branca | 0.7.2 |
Brotli | 1.1.0 |
cachetools | 5.5.0 |
cartiflette | 0.0.2 |
Cartopy | 0.24.1 |
catalogue | 2.0.10 |
cattrs | 24.1.2 |
certifi | 2024.8.30 |
cffi | 1.17.1 |
charset-normalizer | 3.3.2 |
click | 8.1.7 |
click-plugins | 1.1.1 |
cligj | 0.7.2 |
cloudpathlib | 0.19.0 |
cloudpickle | 3.0.0 |
colorama | 0.4.6 |
comm | 0.2.2 |
commonmark | 0.9.1 |
conda | 24.9.1 |
conda-libmamba-solver | 24.7.0 |
conda-package-handling | 2.3.0 |
conda_package_streaming | 0.10.0 |
confection | 0.1.5 |
contextily | 1.6.2 |
contourpy | 1.3.0 |
cryptography | 43.0.1 |
cycler | 0.12.1 |
cymem | 2.0.8 |
cytoolz | 1.0.0 |
dask | 2024.9.1 |
dask-expr | 1.1.15 |
databricks-sdk | 0.33.0 |
debugpy | 1.8.6 |
decorator | 5.1.1 |
Deprecated | 1.2.14 |
diskcache | 5.6.3 |
distributed | 2024.9.1 |
distro | 1.9.0 |
docker | 7.1.0 |
duckdb | 0.10.1 |
en-core-web-sm | 3.7.1 |
entrypoints | 0.4 |
et-xmlfile | 1.1.0 |
exceptiongroup | 1.2.2 |
executing | 2.1.0 |
fastexcel | 0.11.6 |
fastjsonschema | 2.20.0 |
fiona | 1.10.1 |
Flask | 3.0.3 |
folium | 0.17.0 |
fontawesomefree | 6.6.0 |
fonttools | 4.54.1 |
frozendict | 2.4.4 |
frozenlist | 1.4.1 |
fsspec | 2023.12.2 |
gensim | 4.3.2 |
geographiclib | 2.0 |
geopandas | 1.0.1 |
geoplot | 0.5.1 |
geopy | 2.4.1 |
gitdb | 4.0.11 |
GitPython | 3.1.43 |
google-auth | 2.35.0 |
graphene | 3.3 |
graphql-core | 3.2.4 |
graphql-relay | 3.2.0 |
graphviz | 0.20.3 |
great-tables | 0.12.0 |
greenlet | 3.1.1 |
gunicorn | 22.0.0 |
h2 | 4.1.0 |
hpack | 4.0.0 |
htmltools | 0.5.3 |
hyperframe | 6.0.1 |
idna | 3.10 |
imageio | 2.35.1 |
importlib_metadata | 8.5.0 |
importlib_resources | 6.4.5 |
inflate64 | 1.0.0 |
ipykernel | 6.29.5 |
ipython | 8.28.0 |
itsdangerous | 2.2.0 |
jedi | 0.19.1 |
Jinja2 | 3.1.4 |
jmespath | 1.0.1 |
joblib | 1.4.2 |
jsonpatch | 1.33 |
jsonpointer | 3.0.0 |
jsonschema | 4.23.0 |
jsonschema-specifications | 2024.10.1 |
jupyter-cache | 1.0.0 |
jupyter_client | 8.6.3 |
jupyter_core | 5.7.2 |
kaleido | 0.2.1 |
kiwisolver | 1.4.7 |
langcodes | 3.4.1 |
language_data | 1.2.0 |
lazy_loader | 0.4 |
libmambapy | 1.5.9 |
locket | 1.0.0 |
lxml | 5.3.0 |
lz4 | 4.3.3 |
Mako | 1.3.5 |
mamba | 1.5.9 |
mapclassify | 2.8.1 |
marisa-trie | 1.2.1 |
Markdown | 3.6 |
markdown-it-py | 3.0.0 |
MarkupSafe | 2.1.5 |
matplotlib | 3.9.2 |
matplotlib-inline | 0.1.7 |
mdurl | 0.1.2 |
menuinst | 2.1.2 |
mercantile | 1.2.1 |
mizani | 0.11.4 |
mlflow | 2.16.2 |
mlflow-skinny | 2.16.2 |
msgpack | 1.1.0 |
multidict | 6.1.0 |
multivolumefile | 0.2.3 |
munkres | 1.1.4 |
murmurhash | 1.0.10 |
mypy-extensions | 1.0.0 |
narwhals | 1.9.3 |
nbclient | 0.10.0 |
nbformat | 5.10.4 |
nest_asyncio | 1.6.0 |
networkx | 3.3 |
nltk | 3.9.1 |
numpy | 1.26.4 |
opencv-python-headless | 4.10.0.84 |
openpyxl | 3.1.5 |
opentelemetry-api | 1.16.0 |
opentelemetry-sdk | 1.16.0 |
opentelemetry-semantic-conventions | 0.37b0 |
OWSLib | 0.28.1 |
packaging | 24.1 |
pandas | 2.2.3 |
paramiko | 3.5.0 |
parso | 0.8.4 |
partd | 1.4.2 |
pathspec | 0.12.1 |
patsy | 0.5.6 |
Pebble | 5.0.7 |
pexpect | 4.9.0 |
pickleshare | 0.7.5 |
pillow | 10.4.0 |
pip | 24.2 |
platformdirs | 4.3.6 |
plotly | 5.24.1 |
plotnine | 0.13.6 |
pluggy | 1.5.0 |
polars | 1.8.2 |
preshed | 3.0.9 |
prometheus_client | 0.21.0 |
prometheus_flask_exporter | 0.23.1 |
prompt_toolkit | 3.0.48 |
protobuf | 4.25.3 |
psutil | 6.0.0 |
ptyprocess | 0.7.0 |
pure_eval | 0.2.3 |
py7zr | 0.20.8 |
pyarrow | 17.0.0 |
pyarrow-hotfix | 0.6 |
pyasn1 | 0.6.1 |
pyasn1_modules | 0.4.1 |
pybcj | 1.0.2 |
pycosat | 0.6.6 |
pycparser | 2.22 |
pycryptodomex | 3.21.0 |
pydantic | 2.9.2 |
pydantic_core | 2.23.4 |
Pygments | 2.18.0 |
PyNaCl | 1.5.0 |
pynsee | 0.1.8 |
pyogrio | 0.10.0 |
pyOpenSSL | 24.2.1 |
pyparsing | 3.1.4 |
pyppmd | 1.1.0 |
pyproj | 3.7.0 |
pyshp | 2.3.1 |
PySocks | 1.7.1 |
python-dateutil | 2.9.0 |
python-dotenv | 1.0.1 |
python-magic | 0.4.27 |
pytz | 2024.1 |
pyu2f | 0.1.5 |
pywaffle | 1.1.1 |
PyYAML | 6.0.2 |
pyzmq | 26.2.0 |
pyzstd | 0.16.2 |
querystring_parser | 1.2.4 |
rasterio | 1.4.1 |
referencing | 0.35.1 |
regex | 2024.9.11 |
requests | 2.32.3 |
requests-cache | 1.2.1 |
retrying | 1.3.4 |
rich | 13.9.2 |
rpds-py | 0.20.0 |
rsa | 4.9 |
ruamel.yaml | 0.18.6 |
ruamel.yaml.clib | 0.2.8 |
s3fs | 2023.12.2 |
s3transfer | 0.10.2 |
scikit-image | 0.24.0 |
scikit-learn | 1.5.2 |
scipy | 1.13.0 |
seaborn | 0.13.2 |
setuptools | 74.1.2 |
shapely | 2.0.6 |
shellingham | 1.5.4 |
six | 1.16.0 |
smart-open | 7.0.5 |
smmap | 5.0.0 |
sortedcontainers | 2.4.0 |
soupsieve | 2.5 |
spacy | 3.7.5 |
spacy-legacy | 3.0.12 |
spacy-loggers | 1.0.5 |
SQLAlchemy | 2.0.35 |
sqlparse | 0.5.1 |
srsly | 2.4.8 |
stack-data | 0.6.2 |
statsmodels | 0.14.4 |
tabulate | 0.9.0 |
tblib | 3.0.0 |
tenacity | 9.0.0 |
texttable | 1.7.0 |
thinc | 8.2.5 |
threadpoolctl | 3.5.0 |
tifffile | 2024.9.20 |
toolz | 1.0.0 |
topojson | 1.9 |
tornado | 6.4.1 |
tqdm | 4.66.5 |
traitlets | 5.14.3 |
truststore | 0.9.2 |
typer | 0.12.5 |
typing_extensions | 4.12.2 |
tzdata | 2024.2 |
Unidecode | 1.3.8 |
url-normalize | 1.4.3 |
urllib3 | 1.26.20 |
wasabi | 1.1.3 |
wcwidth | 0.2.13 |
weasel | 0.4.1 |
webdriver-manager | 4.0.2 |
websocket-client | 1.8.0 |
Werkzeug | 3.0.4 |
wheel | 0.44.0 |
wordcloud | 1.9.3 |
wrapt | 1.16.0 |
xgboost | 2.1.1 |
xlrd | 2.0.1 |
xyzservices | 2024.9.0 |
yarl | 1.13.1 |
yellowbrick | 1.5 |
zict | 3.0.0 |
zipp | 3.20.2 |
zstandard | 0.23.0 |
View file history
SHA | Date | Author | Description |
---|---|---|---|
4f5d200 | 2024-08-12 15:17:51 | Lino Galiana | Retire les vieux scripts (#540) |
06d003a | 2024-04-23 10:09:22 | Lino Galiana | Continue la restructuration des sous-parties (#492) |
005d89b | 2023-12-20 17:23:04 | Lino Galiana | Finalise l’affichage des statistiques Git (#478) |
3fba612 | 2023-12-17 18:16:42 | Lino Galiana | Remove some badges from python (#476) |
1684220 | 2023-12-02 12:06:40 | Antoine Palazzolo | Première partie de relecture de fin du cours (#467) |
1f23de2 | 2023-12-01 17:25:36 | Lino Galiana | Stockage des images sur S3 (#466) |
a06a268 | 2023-11-23 18:23:28 | Antoine Palazzolo | 2ème relectures chapitres ML (#457) |
b68369d | 2023-11-18 18:21:13 | Lino Galiana | Reprise du chapitre sur la classification (#455) |
fd3c955 | 2023-11-18 14:22:38 | Lino Galiana | Formattage des chapitres scikit (#453) |
889a71b | 2023-11-10 11:40:51 | Antoine Palazzolo | Modification TP 3 (#443) |
a771183 | 2023-10-09 11:27:45 | Antoine Palazzolo | Relecture TD2 par Antoine (#418) |
9a4e226 | 2023-08-28 17:11:52 | Lino Galiana | Action to check URL still exist (#399) |
a8f90c2 | 2023-08-28 09:26:12 | Lino Galiana | Update featured paths (#396) |
3bdf3b0 | 2023-08-25 11:23:02 | Lino Galiana | Simplification de la structure 🤓 (#393) |
78ea2cb | 2023-07-20 20:27:31 | Lino Galiana | Change titles levels (#381) |
29ff3f5 | 2023-07-07 14:17:53 | linogaliana | description everywhere |
f21a24d | 2023-07-02 10:58:15 | Lino Galiana | Pipeline Quarto & Pages 🚀 (#365) |
f5f0f9c | 2022-11-02 19:19:07 | Lino Galiana | Relecture début partie modélisation KA (#318) |
f10815b | 2022-08-25 16:00:03 | Lino Galiana | Notebooks should now look more beautiful (#260) |
494a85a | 2022-08-05 14:49:56 | Lino Galiana | Images featured ✨ (#252) |
d201e3c | 2022-08-03 15:50:34 | Lino Galiana | Pimp la homepage ✨ (#249) |
6264438 | 2022-06-29 14:53:05 | Lino Galiana | Retire typo math (#243) |
12965ba | 2022-05-25 15:53:27 | Lino Galiana | :launch: Bascule vers quarto (#226) |
9c71d6e | 2022-03-08 10:34:26 | Lino Galiana | Plus d’éléments sur S3 (#218) |
c3bf4d4 | 2021-12-06 19:43:26 | Lino Galiana | Finalise debug partie ML (#190) |
fb14d40 | 2021-12-06 17:00:52 | Lino Galiana | Modifie l’import du script (#187) |
37ecfa3 | 2021-12-06 14:48:05 | Lino Galiana | Essaye nom différent (#186) |
2c8fd0d | 2021-12-06 13:06:36 | Lino Galiana | Problème d’exécution du script import data ML (#185) |
5d0a5e3 | 2021-12-04 07:41:43 | Lino Galiana | MAJ URL script recup data (#184) |
5c10490 | 2021-12-03 17:44:08 | Lino Galiana | Relec @antuki partie modelisation (#183) |
2a8809f | 2021-10-27 12:05:34 | Lino Galiana | Simplification des hooks pour gagner en flexibilité et clarté (#166) |
2e4d586 | 2021-09-02 12:03:39 | Lino Galiana | Simplify badges generation (#130) |
80877d2 | 2021-06-28 11:34:24 | Lino Galiana | Ajout d’un exercice de NLP à partir openfood database (#98) |
4cdb759 | 2021-05-12 10:37:23 | Lino Galiana | :sparkles: :star2: Nouveau thème hugo :snake: :fire: (#105) |
7f9f97b | 2021-04-30 21:44:04 | Lino Galiana | 🐳 + 🐍 New workflow (docker 🐳) and new dataset for modelization (2020 🇺🇸 elections) (#99) |
671f75a | 2020-10-21 15:15:24 | Lino Galiana | Introduction au Machine Learning (#72) |
Notes de bas de page
Cette formule permet de bien comprendre la théorie statistique asymptotique, notamment le théorème de Cramer-Rao. Dans la classe des estimateurs sans biais, c’est-à-dire dont le premier terme est nul, trouver l’estimateur à variance minimale revient à trouver l’estimateur qui minimise \(\mathbb{E}\bigg[(y - h_\theta(X))^2 \bigg]\). C’est la définition même de la régression, ce qui, quand on fait des hypothèses supplémentaires sur le modèle statistique, explique le théorème de Cramer-Rao.↩︎
Citation
BibTeX
@book{galiana2023,
author = {Galiana, Lino},
title = {Python pour la data science},
date = {2023},
url = {https://pythonds.linogaliana.fr/},
doi = {10.5281/zenodo.8229676},
langid = {fr}
}
Veuillez citer ce travail comme suit :
Galiana, Lino. 2023. Python pour la data science. https://doi.org/10.5281/zenodo.8229676.