This commit is contained in:
Marc Beninca 2020-10-30 10:28:17 +01:00
parent 761d26d48b
commit 160e486e88
250 changed files with 5 additions and 12 deletions

3
cnam/probatoire/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
/*.pdf
/*.pdf.asc
/*.pdf.vrf

81
cnam/probatoire/build.py Executable file
View file

@ -0,0 +1,81 @@
#! /usr/bin/python3 -B
import os
import shutil
import subprocess
import sys
DOCUMENTS = [
# ('document', 'mémoire'),
# ('présentation', 'présentation'),
]
TMP = 'tmp'
def run(command):
subprocess.call(command)
def errun(command):
return subprocess.check_output(
command, stderr=subprocess.STDOUT)
def build(sign):
for en, fr in DOCUMENTS:
command = ['xelatex', '-output-directory', TMP, en]
run(command)
run(['makeglossaries', '-d', TMP, en])
run(['biber',
'--input-directory', TMP,
'--output-directory', TMP,
en,
])
run(command)
run(command)
pdf = f'{fr}.pdf'
os.rename(os.path.join(TMP, f'{en}.pdf'),
os.path.join(TMP, pdf))
if not sign:
os.rename(os.path.join(TMP, pdf), pdf)
else:
run(['gpg',
'--armor',
'--detach-sign',
os.path.join(TMP, pdf),
])
signature = f'{pdf}.asc'
for f in [pdf, signature]:
os.rename(os.path.join(TMP, f), f)
lines = errun(['gpg',
'--verify', signature, pdf,
]).decode('u8').splitlines()
id = lines[2].index('"')
lines = [
lines[0],
lines[1],
lines[2][:id] + lines[4][id:]
.replace('@', ' @ ')
.replace('.', ' ⋅ ')
] + lines[5:]
buffer = os.linesep.join(lines).encode('u8')
with open(f'{pdf}.vrf', 'bw') as f:
f.write(buffer)
def clean():
shutil.rmtree(TMP, ignore_errors=True)
def main():
file = os.path.realpath(__file__)
directory = os.path.dirname(file)
os.chdir(directory)
clean()
os.makedirs(TMP)
build(len(sys.argv) == 1)
clean()
if __name__ == '__main__':
main()

View file

@ -0,0 +1,139 @@
@book{homl-large-scale,
author = "Aurélien Géron",
title = "Hands-on Machine Learning",
edition = "2nd",
year = "2019",
publisher = "O'Reilly",
pages = "154",
}
@book{homl-hard-few,
author = "Aurélien Géron",
title = "Hands-on Machine Learning",
edition = "2nd",
year = "2019",
publisher = "O'Reilly",
pages = "155",
}
@book{homl-nonlinear-linear,
author = "Aurélien Géron",
title = "Hands-on Machine Learning",
edition = "2nd",
year = "2019",
publisher = "O'Reilly",
pages = "157",
}
@book{homl-feat-poly,
author = "Aurélien Géron",
title = "Hands-on Machine Learning",
edition = "2nd",
year = "2019",
publisher = "O'Reilly",
pages = "158",
}
@book{homl-poly,
author = "Aurélien Géron",
title = "Hands-on Machine Learning",
edition = "2nd",
year = "2019",
publisher = "O'Reilly",
pages = "159",
}
@book{homl-feat-simi,
author = "Aurélien Géron",
title = "Hands-on Machine Learning",
edition = "2nd",
year = "2019",
publisher = "O'Reilly",
pages = "160",
}
@book{homl-rbf,
author = "Aurélien Géron",
title = "Hands-on Machine Learning",
edition = "2nd",
year = "2019",
publisher = "O'Reilly",
pages = "161",
}
@book{homl-linear,
author = "Aurélien Géron",
title = "Hands-on Machine Learning",
edition = "2nd",
year = "2019",
publisher = "O'Reilly",
pages = "163",
}
@book{homl-nonlinear,
author = "Aurélien Géron",
title = "Hands-on Machine Learning",
edition = "2nd",
year = "2019",
publisher = "O'Reilly",
pages = "164",
}
@article{scaling,
author = "Minaxi Arora and Lekha Bhambhu",
title = "Role of Scaling in Data Classification Using SVM",
year = "2014",
journal = "IJARCSSE",
volume = "4",
issue = "10",
pages = "271-273",
}
@book{multi-class,
author = "Paresh Deka",
title = "A primer on machine learning applications in civil engineering",
year = "2020",
publisher = "CRC Press",
pages = "86-89",
}
@book{mri,
author = "Anand Kulkarni and Suresh Satapathy",
title = "Optimization in Machine Learning and Applications",
year = "2020",
publisher = "Springer",
pages = "51-68",
}
@book{optimization,
author = "Anand Kulkarni and Suresh Satapathy",
title = "Optimization in Machine Learning and Applications",
year = "2020",
publisher = "Springer",
pages = "54",
}
@phdthesis{large-scale,
author = "Antoine Bordes",
title = "New Algorithms for Large-Scale SVM",
year = "2010",
school = "Université Paris VI",
}
@misc{ex-linear,
author = "Abhishek Ghose",
title = "Learning SVMs From Examples",
year = "2017",
url = "https://www.kdnuggets.com/2017/08/support-vector-machines-learning-svms-examples.html",
}
@misc{ex-nonlinear,
author = "Abhishek Ghose",
title = "Learning SVMs From Examples",
year = "2017",
url = "https://www.kdnuggets.com/2017/08/support-vector-machines-learning-svms-examples.html/2",
}
@misc{lib-svm,
author = "Chih-Chung Chang and Chih-Jen Lin",
title = "LIBSVM",
year = "2019",
url = "https://www.csie.ntu.edu.tw/~cjlin/libsvm",
}
@misc{lib-svm-light,
author = "Thorsten Joachims",
title = "SVMlight",
year = "2008",
url = "http://www.cs.cornell.edu/people/tj/svm_light",
}

View file

@ -0,0 +1,85 @@
\documentclass[12pt]{extarticle}
\newcommand{\import}[1]{\input{document/#1}}
% imports ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\import{packages}
%–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\hypersetup{colorlinks,
citecolor=blue,
filecolor=blue,
linkcolor=blue,
urlcolor=blue,
}
\setcounter{secnumdepth}{3}
\setmainfont{DejaVu Sans}
\setmonofont{DejaVu Sans Mono}
\setlength{\parindent}{0em}
\setlength{\parskip}{1em}
% commands –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\renewcommand{\baselinestretch}{1.1}
%⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
\newcommand{\cnam}{\begin{center}
\includegraphics[height=6em]{../cnam.png}\end{center}}
%⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
\newcommand{\fig}[4]{\begin{figure}[H]\begin{center}
\includegraphics[height=#3]{images/#4.png}
\label{#1}\caption{#2}\end{center}\end{figure}}
%⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
\newcommand{\bifig}[5]{\begin{figure}[H]\begin{center}
\includegraphics[height=#3]{images/#4.png}
\includegraphics[height=#3]{images/#5.png}
\label{#1}\caption{#2}\end{center}\end{figure}}
%⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
\newcommand{\hr}{\rule{\textwidth}{1pt}}
\newcommand{\hrq}{\rule{.25\textwidth}{1pt}}
% definitions ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\def\fulltitle{\begin{center}\textbf{%
SVM\\
Machine à Vecteurs de Support
}\end{center}}
%⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
\def\goal{%
Mémoire probatoire présenté en vue d’obtenir\\
UE « Information et communication pour ingénieur »\\
Spécialité :\\
Informatique, Réseaux, Systèmes et Multimédia
}
% environments –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\newenvironment{enum}{\begin{enumerate}
\setlength{\itemsep}{0.2em}
\setlength{\parsep}{0em}
\setlength{\parskip}{0em}
}{\end{enumerate}}
%⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
\newenvironment{itmz}{\begin{itemize}
\setlength{\itemsep}{0.2em}
\setlength{\parsep}{0em}
\setlength{\parskip}{0em}
}{\end{itemize}}
% processing –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\makeglossaries
\bibliography{document}
% begin ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\begin{document}
%⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
\import{front}
\import{glossaries}
\import{toc}
%–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\import{introduction}
\import{principles}
\import{example}
\import{critics}
\import{conclusion}
%–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\printbibliography[heading=bibintoc,title=Références]
\pagebreak
\renewcommand{\listfigurename}{Figures}
\listoffigures
\pagebreak
% appendicies ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\appendix
%⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
%–––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\import{back}
% document –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
\end{document}

View file

@ -0,0 +1,44 @@
\phantomsection
\addcontentsline{toc}{section}{Résumé}
\cnam
\begin{large}\fulltitle\end{large}
\textbf{\goal}
\textbf{Bordeaux, 2020}
\hr
\textbf{RÉSUMÉ}
La croissance constante du \gls{bd} nécessite de nouvelles méthodes d’analyse.\\
Le \gls{ml} propose une famille de méthodologies, parmi laquelle\\
les \gls{svm} permettent à la fois régression et classification de ces données.
La polyvalence et la flexibilité des \gls{svm} les ont donc rendus incontournables.\\
D’autant que de nombreux langages et librairies permettent de les utiliser.\\
Au fil du temps, ces outils ont toujours été améliorés, et continuent de l’être…
\textbf{Mots clés : svm, noyau, linéaire, régression,\\
classification, apprentissage, machine, données.}
\hr
\textbf{SUMMARY}
The constant growth of big data requires new methods of analysis.\\
\Gls{ml} provides a whole family of dedicated methodologies,\\
including \gls{svm} that allow both regression and classification of \glspl{ds}.
The flexibility and versatility of \gls{svm} therefore made them indispensable.\\
Especially since now many languages and libraries enable their usage.\\
Over time, these tools have always been and continue to be improved…
\textbf{Key words: svm, kernel, linear, regression,\\
classification, machine, learning, datasets.}
\thispagestyle{empty}
\pagebreak

View file

@ -0,0 +1,18 @@
\section{Conclusion}
Les \gls{svm} sont incontournables dans le domaine du \gls{ml},
tant par leur polyvalence que leur flexibilité.
Le nombre de pré-traitements, techniques, algorithmes et méthodes
mathématiques impliqués en font un outil redoutablement efficace
pour la régression et la classification de données.
De très nombreux langages de programmation permettent aujourd’hui de
s’interfacer avec des librairies implémentant déjà nombre de ces concepts
(par exemple libSVM \cite{lib-svm} ou encore SVM-Light \cite{lib-svm-light}).
Même si certains éléments clés comme le \gls{kt} et les \glspl{kf}
sont bien ancrés, ce domaine est toujours un champ de recherche en
constante activité. Au fil du temps, de nouvelles techniques et optimisations
ont vu le jour, et d’autres viendront encore en bousculer les modèles…
\pagebreak

View file

@ -0,0 +1,132 @@
\section{Critiques}
\subsection{Avantages}
\begin{itmz}
\item{le modèle \gls{svm} est considéré comme plutôt stable, car\\
de petits changements dans les données impactent peu les \glspl{hpp}}
\end{itmz}\begin{itmz}
\item{ce même modèle peut être utilisé à la fois pour\\
résoudre des problèmes de régression et de classification}
\end{itmz}\begin{itmz}
\item{est souvent une meilleure alternative aux réseaux de neurones,\\
surtout dans le cas de \glspl{ds} de taille réduite}
\end{itmz}\begin{itmz}
\item{très précis avec une marge de séparation nette}
\end{itmz}\begin{itmz}
\item{peut capturer des relations complexes dans des \glspl{ds},\\
même sans connaissance préalable de ces dernières}
\end{itmz}\begin{itmz}
\item{fonctionne avec un grand nombres d’espaces dimensionnels}
\end{itmz}\begin{itmz}
\item{reste pertinent même avec plus de dimensions que d’éléments}
\end{itmz}\begin{itmz}
\item{capacité de régularisation pour rester générique,\\
afin d’éviter les risques de surentraînement}
\end{itmz}\begin{itmz}
\item{économise la mémoire nécessaire aux fonctions de décision,\\
en ne leur faisant traiter que des \glspl{sv}}
\end{itmz}\begin{itmz}
\item{permet de gérer efficacement des séparations non linéaires,\\
par l’intermédiaire de différentes \glspl{kf}}
\end{itmz}\begin{itmz}
\item{de nombreuses \glspl{kf} existent pour les fonctions de décision}
\end{itmz}\begin{itmz}
\item{il est possible de combiner plusieurs \glspl{kf},\\
pour pouvoir travailler avec des \glspl{hpp} plus complexes}
\end{itmz}\begin{itmz}
\item{pendant longtemps considéré inadapté aux très grands \glspl{ds},\\
de nouveaux algorithmes ont été mis à contribution depuis \cite{large-scale}}
\end{itmz}
\subsection{Inconvénients}
\begin{itmz}
\item{le choix d’une \gls{kf} appropriée n’est pas évident,\\
et peut facilement mener à un trop grand nombre de \glspl{sv}}
\end{itmz}\begin{itmz}
\item{la mémoire nécessaire augmente avec le nombre de \glspl{sv},\\
car ces derniers doivent y être intégralement stockés}
\end{itmz}\begin{itmz}
\item{difficile d’identifier les bonnes valeurs de paramètres,\\
sans passer par des techniques comme \gls{gs}}
\end{itmz}\begin{itmz}
\item{le temps d’entraînement augmente avec le nombre d’éléments}
\end{itmz}\begin{itmz}
\item{les calculs de probabilité de justesse sont très coûteux,\\
nécessitant une validation croisée en plusieurs étapes}
\end{itmz}\begin{itmz}
\item{les modèles sont difficilement interprétables par des humains,\\
contrairement par exemple aux arbres de décisions}
\end{itmz}\begin{itmz}
\item{effet boîte noire en cas de compréhension insuffisante\\
des différents outils mathématiques sous-jacents}
\end{itmz}
\subsection{Limitations}
\begin{itmz}
\item{fonctionne mal quand des classes se recouvrent, car\\
plusieurs paramètres varient, contrairement à d’autres méthodes}
\end{itmz}\begin{itmz}
\item{une normalisation préalable des données est nécessaire,\\
pour que les fonctions objectifs soient plus pertinentes}
\end{itmz}\begin{itmz}
\item{les problèmes multi-classes sont encore\\
un champ de recherche à part entière}
\end{itmz}
\pagebreak

View file

@ -0,0 +1,62 @@
\section{Exemples}
Les 2 cas suivants,
linéaire \cite{ex-linear} et non linéaire \cite{ex-nonlinear},
illustrent bien le propos.
\subsection{Linéaire}
Une classification est voulue pour pouvoir déterminer si un étudiant
sera bon ou non en \gls{ml}, à partir des 2 notes qu’il a obtenu
aux examens de Mathématiques et de Statistiques.
\fig{}{\Gls{ds} très bien distribué}
{16em}{ex-linear-plot}
Avec un tel \gls{ds}, l’identification des \glspl{sv} est aisée,
et une marge la plus large possible est facilement applicable.
\fig{}{Séparation à Vaste Marge très nette}
{16em}{ex-linear-svm}
\pagebreak
\fig{}{Anomalies dans le \gls{ds}, violations de marge}
{16em}{ex-linear-out}
Pour un \gls{ds} avec aberrations, faire varier une marge souple permet
de trouver un compromis entre généralisation et spécialisation.
\fig{}{Différentes séparations à marge souple, variation de C}
{32em}{ex-linear-soft}
\pagebreak
\subsection{Non linéaire}
\fig{}{\Gls{ds} inséparable de façon linéaire}
{16em}{ex-nonlinear-plot}
Création d’un nouvel espace dimensionnel avec des transformations
non linéaires des variables d’origine.
{\large
$X_{1}=x_{1}^{2}$ ; $X_{2}=x_{2}^{2}$ ; $X_{3}=\sqrt{2} × x_{1} × x_{2}$
}
Ce nouvel espace permet de trouver une marge et un \gls{hpp} séparateur.
\fig{}{\Gls{hpp} séparateur linéaire dans le nouvel espace dimensionnel}
{24em}{ex-nonlinear-linear}
\pagebreak
\fig{}{Projection de la marge de séparation dans l’espace d’origine}
{24em}{ex-nonlinear-sv}
Le retour à l’espace de départ permet ainsi marge et séparation non linéaires.
\fig{}{Fonction de décision finale non linéaire dans l’espace d’origine}
{24em}{ex-nonlinear-svm}
\pagebreak

View file

@ -0,0 +1,47 @@
\begin{titlepage}
\cnam
\begin{center}
{\bfseries
\begin{large}
{\LARGE C}ONSERVATOIRE {\LARGE N}ATIONAL DES {\LARGE A}RTS ET {\LARGE M}ÉTIERS
CENTRE RÉGIONAL ASSOCIÉ DE NOUVELLE-AQUITAINE
\hrq
\goal
\vfill
par
\vfill
Marc BENINCA
\hrq
\begin{Large}\fulltitle\end{Large}
Soutenu le 16 Septembre 2020
\hrq
JURY
\end{large}
\vspace{1em}
\begin{small}
{\renewcommand{\arraystretch}{1.5} \begin{tabular}[t]{rllll}
PRÉSIDENT : & Civilité & Prénom & NOM & \textit{\renewcommand{\arraystretch}{1} \begin{tabular}[t]{@{}l@{}}Fonction\\Organisme\end{tabular}} \\
MEMBRES : & Civilité & Prénom & NOM & \textit{\renewcommand{\arraystretch}{1} \begin{tabular}[t]{@{}l@{}}Fonction\\Organisme\end{tabular}} \\
& Civilité & Prénom & NOM & \textit{\renewcommand{\arraystretch}{1} \begin{tabular}[t]{@{}l@{}}Fonction\\Organisme\end{tabular}}
\end{tabular}}
\end{small}
}
\end{center}
\end{titlepage}

View file

@ -0,0 +1,70 @@
\printglossary[title=Abréviations,type=\acronymtype]
\newacronym{anova}{ANOVA}{ANalysis Of VAriance}
\newacronym{hbos}{HBOS}{Histogram Based Outlier Score}
\newacronym{irm}{IRM}{Imagerie par Résonnance Magnétique}
\newacronym{nn}{NN}{Nearest Neighbors}
\newacronym{rbf}{RBF}{Radial Basis Function}
\newacronym{sgbd}{SGBD}{Systèmes de Gestion de Bases de Données}
\newacronym{si}{SI}{Systèmes d’Information}
\newacronym{svc}{SVC}{Support Vector Classification}
\newacronym{svm}{SVM}{Support Vector Machine}
\newacronym{svr}{SVR}{Support Vector Regression}
\newacronym{tic}{TIC}{Technologies d’Information et de Communication}
\pagebreak
\printglossary[title=Glossaire]
\newglossaryentry{bd}{
name={big data},
description={données massives}
}
\newglossaryentry{clustering}{
name={clustering},
description={regroupement d’éléments en sous-ensembles caractéristiques}
}
\newglossaryentry{ds}{
name={dataset},
plural={datasets},
description={ensemble de données}
}
\newglossaryentry{gs}{
name={grid search},
description={algorithme d’affinage d’hyperparamètres par grille de valeurs}
}
\newglossaryentry{kf}{
name={fonction noyau},
plural={fonctions noyau},
description={transformation non linéaire permettant une séparation linéaire}
}
\newglossaryentry{hpp}{
name={hyperplan},
plural={hyperplans},
description={sous-espace en n−1 dimesions d’un espace en n dimensions}
}
\newglossaryentry{kt}{
name={kernel trick},
description={astuce du noyau pour éviter des calculs plus complexes}
}
\newglossaryentry{ml}{
name={machine learning},
description={apprentissage machine automatique}
}
\newglossaryentry{sgn}{
name={stéganographie},
description={dissimulation d’informations dans un plus grand ensemble}
}
\newglossaryentry{sigmoid}{
name={sigmoïde},
description={courbe à double asymptôte 0 et 1, centrée sur 1÷2}
}
\newglossaryentry{sv}{
name={support vector},
plural={support vectors},
description={sous-ensemble de données d’entraînement}
}
\pagebreak
%\printglossaries

View file

@ -0,0 +1,88 @@
\section{Introduction}
Les \gls{tic} ont fait émerger des \gls{si} de grande envergure, qui génèrent
continuellement une quantité globale toujours plus importante de données,
communément appelée \gls{bd}.
Les volumes démesurés de données manipulés par ces \gls{si} sont clairement
incompatibles avec les principes classiques des \gls{sgbd}.
De nouvelles méthodologies ont donc dû être créées afin de pouvoir
analyser puis exploiter ces \gls{bd}.
\subsection{Machine learning}
Le \gls{ml} regroupe les différentes nouvelles approches méthodologiques
permettant de faire ressortir une compréhension des \gls{bd}, en extraire
des \glspl{ds} exploitables puis, à partir de cet apprentissage,
être en mesure de comprendre de nouvelles données.
Les 2 défis à relever pour être pertinents dans cette démarche :
\begin{itmz}
\item{ne pas surentraîner (spécialiser) l’apprentisseur automatique,\\
pour conserver une capacité de généralisation}
\item{pour chaque type de problèmes à résoudre,\\
choisir les algorithmes les plus pertinents}
\end{itmz}
\subsection{Méthodes}
\subsubsection{Méthodes non supervisées}
Ces premières méthodes permettent de travailler avec un ensemble d’éléments
ne disposant pas d’étiquetage préalable, elles mettent ainsi en place
des mécanismes permettant de faire du \gls{clustering} de ces éléments.
Exemples d’algorithmes :
\begin{itmz}
\item{k-means (moyennes)}
\item{réduction de dimensionnalité}
\item{réseaux de neurones}
\item{analyse des composants principaux ou indépendants}
\item{modèles de distribution}
\item{classification hiérarchique}
\item{\gls{clustering} par décalage moyen}
\item{Apriori}
\end{itmz}
\subsubsection{Méthodes semi-supervisées}
Ces méthodes autorisent l’utilisation d’un ensemble d’éléments hétérogène,
certains ayant déjà été étiquetés au préalable, alors que d’autres non.
Un mélange de différentes techniques s’avère donc nécessaire.
Exemples d’algorithmes :
\begin{itmz}
\item{\gls{hbos}}
\item{forêts isolées}
\item{autoencodeurs}
\end{itmz}
\subsubsection{Méthodes supervisées}
Ces méthodes utilisent 2 sous-ensembles d’éléments intégralement étiquetés,
ayant une valeur de sortie pour plusieurs valeurs de variables en entrée.
Les données d’apprentissage permettent un entraînement préalable du modèle.
Les données de test permettent ensuite d’en évaluer la pertinence.
Le modèle permet enfin, à partir de nouvelles valeurs en entrée,
de fournir des valeurs de sortie prédictives de 2 types :
\begin{itmz}
\item{régression → la valeur est un nombre}
\item{classification → la valeur est une catégorie, parmi un ensemble défini}
\end{itmz}
Exemples d’algorithmes :
\begin{itmz}
\item{régression linéaire, logistique ou vectorielle}
\item{arbre de régression ou classification}
\item{k-\gls{nn} (plus proches voisins)}
\item{classificateur Naïve Bayes}
\item{réseaux de neurones}
\item{\gls{svm}}
\end{itmz}
Ce sont ces \gls{svm} qui feront l’objet d’étude du présent document.
En seront passés en revue les différents principes techniques sous-jacents,
deux exemples d’application, ainsi que des critiques sur ce type d’algorithmes.
\pagebreak

View file

@ -0,0 +1,17 @@
\usepackage{extsizes}
\usepackage{float}
\usepackage{fontspec}
\usepackage[a4paper,portrait,
bmargin=20mm,lmargin=20mm,rmargin=20mm,tmargin=20mm]{geometry}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{csquotes}
\usepackage{polyglossia}
\setmainlanguage{french}
\usepackage[acronym,toc]{glossaries}
\usepackage{tocloft}
\usepackage[backend=biber,sorting=anyt]{biblatex}
\usepackage{tocbibind}

View file

@ -0,0 +1,266 @@
\section{Principes}
L’approche \gls{svm} est un ensemble de méthodes supervisées utilisant :
\begin{enum}
\item{un \gls{ds} d’apprentissage pour entraîner l’algorithme,\\
et qui fait donc office de superviseur}
\item{un \gls{ds} de test pour vérifier sa pertinence}
\end{enum}
Cette approche se révèle appropriée dans de nombreux cas d’utilisation :
\begin{itmz}
\item{filtrage d’email, courriel légitime ou pourriel (phishing, spam)}
\item{classification d’images, quel que soit le \gls{si}}
\item{détection de \gls{sgn} dans des fichiers multimédias}
\item{quantification de granularité dans des textures}
\item{reconnaissance de caractères et d’écriture dans des images}
\item{classification d’expressions faciales dans des images}
\item{reconnaissance vocale dans des échantillons sonores}
\item{classification et prédiction de structure de protéines}
\item{établissement de diagnostics médicaux}
\item{classification de documents texte en différentes catégories}
\end{itmz}
En fonction du type de problèmes, deux types de résolution :
\begin{itmz}
\item{\textbf{régression} (\gls{svr}) → nombre}
\item{\textbf{classification} (\gls{svc}) → catégorie}
\end{itmz}
En fonction des \glspl{ds}, deux types d’approche mathématique :
\begin{itmz}
\item{\textbf{linéaire} : la plus simple}
\item{\textbf{non linéaire} : faisant appel à des \glspl{kf}}
\end{itmz}
Quatre paramètres permettent d’affiner le modèle :
\begin{itmz}
\item{\textbf{noyau} : linéaire, \gls{rbf}, polynomial, \gls{sigmoid}, etc.}
\item{\textbf{degré} : aide à trouver un \gls{hpp} séparateur en contexte polynomial,
faisant rapidement augmenter le temps nécessaire à l’entraînement}
\item{\textbf{γ} : pour les \glspl{hpp} non linéaires}
\item{\textbf{C} : pénalité augmentant la distance des données prises en compte, au\\
risque d’engendrer un surentraînement pour une valeur trop importante}
\end{itmz}
\pagebreak
\subsection{Régression}
Un hyperparamètre \textbf{ε} permet de fait varier l’épaisseur de la marge,
pour y inclure le plus de données possible.
Les éléments exclus sont identifiés en rose.
\subsubsection{Régression linéaire}
Régression la plus simple : une approximation affine est suffisante.
\bifig{}{Régression linéaire, variation d’ε \cite{homl-linear}}
{15em}{regression_linear_left}{regression_linear_right}
\subsubsection{Régression non linéaire}
Régression nécessitant l’utilisation d’une fonction noyau.\\
Une plus grande valeur de C intègre des données plus éloignées.
\bifig{}{Régression polynomiale de degré 2, variation de C \cite{homl-nonlinear}}
{15em}{regression_nonlinear_left}{regression_nonlinear_right}
\pagebreak
\subsection{Classification}
Il s’agit du type de résolution le plus fréquemment utilisé.
\subsubsection{Classification linéaire}
Cette section se penche sur la classification de 2 espèces d’iris,
en fonction des longueurs et largeurs de leurs pétales.
\textbf{Séparation à Vaste Marge}
La figure de gauche montre que dans l’absolu, un grand nombre de droites
peut séparer correctement les 2 ensembles à classifier.
La figure de droite montre cependant qu’en utilisant les éléments
les plus proches, appelés dans ce cas \glspl{sv}, il est alors possible
de définir une marge de séparation la plus large qui soit, afin de
déterminer la droite médiane de séparation la plus efficace.
\bifig{}{Séparation à Vaste Marge \cite{homl-large-scale}}
{9em}{margin_large_left}{margin_large_right}
Un changement d’échelle préalable aide à la séparation des données,
et peut mener à une meilleure efficacité du modèle pour la classification.
\cite{scaling}
La figure de droite montre l’inclusion d’un \gls{sv} supplémentaire.
\bifig{}{Changements d’échelles des dimensions \cite{homl-large-scale}}
{10em}{margin_scale_left}{margin_scale_right}
\pagebreak
\textbf{Séparation à marge souple}
L’approche de vaste marge peut être perturbée par 2 problématiques distinctes.
La figure de droite montre par exemple des \glspl{sv} tellement proches,
que la pertinence du modèle s’en trouve forcément impactée, réduisant
ainsi la fiabilité de la séparation.
La figure de gauche montre quant à elle une anomalie (outlier),
rendant de fait toute séparation linéaire impossible.
\bifig{}{Sensibilité de vaste marge aux anomalies \cite{homl-hard-few}}
{9.5em}{margin_hard_left}{margin_hard_right}
Il faut donc utiliser un modèle plus flexible pour pouvoir éviter
ce type de problèmes. Le but étant de trouver le meilleur compromis
entre avoir la marge la plus large, et y retrouver le moins possible
d’éléments intrus, appelés violations de marge.
Il est ainsi possible d’utiliser l’hyperparamètre \textbf{C} pour faire
varier la distance de prise en compte des éléments proches de la marge.
Plus la valeur de \textbf{C} augmente, plus le nombre de violations de
marge diminiue, mais plus le modèle se spécialise.
Une attention particulière doit donc être portée à la réduction de marge,
sans quoi le modèle perdrait en capacité de généralisation
et donc en précision.
\bifig{}{Plus ou moins de violations de marge, variation de C \cite{homl-hard-few}}
{9.5em}{margin_few_left}{margin_few_right}
\pagebreak
\subsubsection{Classification non linéaire}
Toutes les données ne sont pas forcément séparables de façon linéaire.
Pour y adapter un modèle, il est donc nécessaire de passer par la création
de nouvelles variables résultant de la transformation des données de départ.
Sur la ligne de la figure de gauche, des éléments verts sont entourés d’éléments bleus, inséparables linéairement tels quels.
La figure de droite introduit alors une variable $X_{2}$, élévation
au carré de la variable d’origine $X_{1}$, permettant ainsi
une séparation linéaire des données.
\bifig{}{Séparation linéaire par ajout de variable \cite{homl-nonlinear-linear}}
{14.5em}{nonlinear_linear_left}{nonlinear_linear_right}
L’ajout de variables polynomiales autorise donc des séparations sous
forme de courbes, et non plus seulement de droites.
La figure suivante montre un exemple de séparation curviligne régulière,
correspondant à la répartition des 2 catégories présentes.
\fig{}{Classification utilisant des variables polynomiales \cite{homl-feat-poly}}
{14em}{features_polynomial}
\pagebreak
\textbf{Noyau polynomial}
Combiner des polynomes de degrés faibles est simple, pratique et
relativement rapide à calculer.
Mais plus les \glspl{ds} seront complexes, plus il faudra composer avec
des polynomes de plus haut degré, générant un grand nombre de variables,
et rendant ainsi le modèle trop lent.
Un outil mathématique appelé \gls{kt} permet de contourner ce problème.
Se basant sur le théorème de Mercer, il permet de remplacer dans un espace
de grande dimension, un produit scalaire par une \gls{kf} facile à calculer.
Ce \gls{kt} simplifie donc les calculs ultérieurs d’affinage.
La technique \gls{gs}, limitant les hyperparamètres à des sous-ensembles
de valeurs prédéfinies respectant un certain pas, permet ensuite un bon
compromis de temps de calcul pour trouver les valeurs de réglages
les plus appropriées.
\bifig{}{\Gls{kf} polynomiale \cite{homl-poly}}
{14em}{kernel_polynomial_left}{kernel_polynomial_right}
\textbf{Similarité}
Une autre façon de gérer des données non linéairement séparables
est d’utiliser une fonction de similarité, comme la \gls{rbf} gaussienne.
Le principe est de transformer les éléments en fonction de leur similitude
avec des points de repères déterminés dans l’ensemble d’origine.
Utiliser chacun des éléments comme points de repère augmente la probabilité
de séparabilité linéaire, mais également le nombre de variables et donc
le temps de calcul.
La figure de gauche montre les 2 points de repère choisis en rouge,
ainsi que leur courbe gaussienne associée.
La figure de droite montre tous les points transformés avec la \gls{rbf}
gaussienne, devenant également linéairement séparables.
\bifig{}{Variables de similarité utilisant la \gls{rbf} gaussienne \cite{homl-feat-simi}}
{14em}{features_similar_left}{features_similar_right}
\textbf{Noyau gaussien \gls{rbf}}
Le \gls{kt} marche également dans un tel contexte de similarité.
Faire varier \textbf{C} (colonnes) change la distance de prise en compte.\\
Faire varier \textbf{γ} (rangées) modifie l’épaisseur de la « cloche » gaussienne.
\bifig{}{\Gls{kf} gaussienne (\gls{rbf}) \cite{homl-rbf}}
{26em}{kernel_rbf_left}{kernel_rbf_right}
\pagebreak
\textbf{Autres noyaux}
En complément aux plus courants vus précédemment, un certain nombre
d’autres noyaux existe :
\begin{itmz}
\item{\gls{rbf} de Laplace}
\item{tangente hyperbolique}
\item{\gls{sigmoid}}
\item{fonction de Bessel de première espèce}
\item{\gls{rbf} \gls{anova}}
\item{sillon linéaire à 1 dimension}
\item{chaîne (utilisé pour les documents texte ou séquences d’ADN)}
\end{itmz}
\textbf{Autres outils}
Des algorithmes récents se sont montrés plus efficaces avec de grands \glspl{ds} :
\begin{itmz}
\item{descente par sous-gradient, avec des techniques de décomposition}
\item{descente par coordonnée, en effectuant des minimisations itératives}
\end{itmz}
\subsubsection{Classification multi-classes}
Quand au moins 3 catégories sont à classifier,
et donc pour étendre les modèles à plus de 2 catégories,
deux approches sont intéressantes \cite{multi-class} :
\begin{itmz}
\item{\gls{svm} à arbre de décision}
\item{\gls{svm} par paires}
\end{itmz}
\subsubsection{Optimisation}
Normaliser les données avant de les classifier peut donner de bien meilleurs
résultats en fonction du type de problèmes considéré.
Dans le cadre de la proposition d’un nouvel algorithme pour classifier des
tumeurs cérébrales à partir d’\gls{irm} \cite{mri}, sont recensées
(entre 1990 et 2018) de nombreuses combinaisons de pré-traitements
et de classifications. \cite{optimization}
Parmi ces traitements : filtre gaussien, réduction de bruit,
suppression d’artefacts, égalisation d’histogramme, filtre médian.
\pagebreak

View file

@ -0,0 +1,15 @@
\cnam
\begin{large}\fulltitle\end{large}
\renewcommand{\contentsname}{Plan}
\cftsetindents{section}{1em}{1.5em}
\cftsetindents{subsection}{2.5em}{2.5em}
\cftsetindents{subsubsection}{5em}{3.25em}
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
%\renewcommand{\cftsubsecleader}{\hfill}
\tableofcontents
\pagebreak

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 428 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 830 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 659 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Some files were not shown because too many files have changed in this diff Show more