\section{Inférence dans les modèles \\ à variables latentes}
Avant d'expliquer l'inférence pour les différents modèles décrits en section \ref{sec:Generatif-motivations}, nous donnons une présentation formelle de la notion de modèle probabiliste graphique, afin d'unir dans un même formalisme la description de plusieurs de ces modèles et algorithmes d'inférence associés.
\subsection{Modèles probabilistes graphiques}
\label{subsec:graphes}
Il existe essentiellement deux classes de \index{modèle!graphique}\index{modèle!probabiliste graphique}modèles probabilistes graphiques : non orientés et orientés sans circuit (\textit{Directed Acyclic Graphs ou \index{DAG}DAG}). % \cite{lauritzen:1996, donnet:2012, pearl:1995}. 
Les deux visent à représenter des relations d'indépendance conditionnelle satisfaites par une loi $P$ entre les composantes d'un vecteur aléatoire $\MVAR~=~(\VAR_1,\ldots, \VAR_{\DMVAR})$. Soient $A, B$ et $C$ trois ensembles deux à deux disjoints inclus dans $\set{1,\ldots,\DMVAR}$ : on note $\MVAR_A=(\VAR_a)_{a \in A}$ et $\RMVAR_A = (x_a)_{a \in A}$ si $\RMVAR$ est une valeur possible de $\MVAR$. On note $\condindep{\MVAR_A}{\MVAR_B}{\MVAR_C}$ si et seulement si $\MVAR_A$ et $\MVAR_B$ sont conditionnellement indépendants sachant $\MVAR_C$, c'est-à-dire :
\[
\forall (\RMVAR_A,\RMVAR_B,\RMVAR_C), \:
		p(\RMVAR_C) > 0 \Rightarrow p(\RMVAR_A, \RMVAR_B| \RMVAR_C) = 
		p(\RMVAR_A| \RMVAR_C)p(\RMVAR_B| \RMVAR_C)
\]
Soit $\Graphe = (\Sommets,\Arcs)$ un graphe non orienté dont l'ensemble des sommets $\Sommets$ est 
$\set{\VAR_i}_{1 \leq i \leq \DMVAR}$.  
 % De manière équivalente,
% on peut considérer le graphe $(\MVAR,\ME)$, c'est pourquoi nous
% identifierons parfois sommets du graphe et variables aléatoires. 
Étant donnés trois ensembles $A, B$ et $C$ deux à deux disjoints inclus dans $\Sommets$ : on dit que $C$ sépare $A$ de $B$ si et seulement si, pour tout sommet dans $A$, tout sommet dans $B$ et toute chaîne (chemin non orienté) entre ces deux sommets, la chaîne passe par un sommet de $C$ (voir figure~\ref{fig:Generatif:graphe-no}).
On dit que $\Graphe$ est un graphe d'indépendance conditionnelle pour $P$ si et seulement si $\condindep{\MVAR_A}{\MVAR_B}{\MVAR_C}$ est équivalent à la séparation de $A$ et $B$ par $C$ dans $\Graphe$.

\begin{figure}[h!]
	\centering
	\includegraphics[width=6cm]{./Figs/chapter-Generatif/markov_undirected.pdf}
	\caption[Un graphe d'indépendance conditionnelle non orienté]{Un graphe d'indépendance conditionnelle non orienté. $C$ sépare $A$~et~$B$ (donc $\condindep{\VAR_1, \VAR_2}{\VAR_5,\VAR_6}{\VAR_3}$) tandis que $C'$ ne les sépare pas. }
	\label{fig:Generatif:graphe-no}
\end{figure}

Les graphes d'indépendance conditionnelle non orientés sont plutôt utilisés pour modéliser des relations symétriques d'interaction entre variables aléatoires, comme des corrélations, et des dépendances circulaires entre quatre variables ou plus (par exemple $\VAR_1$ à $\VAR_4$ figure \ref{fig:Generatif:graphe-no}).

Utiliser les DAG\index{directed acyclic graphs|see{DAG}}, graphes orientés \< acycliques \> (en fait, sans circuit), conduit à une représentation de l'indépendance conditionnelle un peu différente. Dans ce cas, l'ensemble $\Arcs$ des arcs est une partie de $\Sommets \times \Sommets$ qui exclut les arcs en boucle du type $(s,s), s \in \Sommets$. La notion de séparation dans les graphes orientés fait appel à celle de \index{graphe moral}\textit{graphe moral} $(\Sommets,\Arcs^M)$ de $(\Sommets,\Arcs)$, o\`u $\Arcs^M$ est obtenu à partir de $\Arcs$ en ajoutant une arête (non orientée) entre toutes les paires de parents non adjacents de tout sommet, puis en supprimant l'orientation de tous les autres arcs de $\Arcs$. Pour décider si $C$~sépare $A$ de $B$ (donc si $\condindep{\MVAR_A}{\MVAR_B}{\MVAR_C}$), on construit le graphe ancestral de $E=A \cup B \cup C$, c'est-à-dire celui de tous les sommets $s \in \Sommets$ tels qu'il existe un chemin (orienté) de $s$ vers un sommet $v \in E$. On construit alors le graphe moral (non orienté) du graphe ancestral de $E$ et on vérifie si $C$~y sépare $A$ de $B$, au sens des graphes non orientés (voir figure \ref{fig:Generatif:graphe-o}).
\begin{figure}[h!]
	\centering
	\includegraphics[width=.89\textwidth]{./Figs/chapter-Generatif/dag_condind.pdf}
		\caption[Un DAG d'indépendance conditionnelle orienté acyclique.]{Un DAG d'indépendance conditionnelle (à gauche), avec graphe ancestral (au milieu) et graphe ancestral moral (à droite).
		 Dans le graphe ancestral/moral de $A \cup B \cup C'$, les sommets, arcs et arêtes en grisé disparaissent. $C'$ sépare alors $A$ et $B$ (donc $\condindep{\VAR_2}{\VAR_7}{\VAR_5}$). Dans le graphe ancestral/moral de $A \cup B \cup C$, il existe une chaîne $(\VAR_7,\VAR_2)$ ne passant pas par $C$ ($C$ ne sépare pas $A$ et $B$).}
	\label{fig:Generatif:graphe-o}
\end{figure}

La propriété de séparation dans les DAG implique que, conditionnellement à ses parents, une variable aléatoire est indépendante de toutes les autres variables sauf ses descendantes.

À tout DAG, on peut associer une propriété de factorisation :
\begin{equation}
p(\RMVAR) = \prod_{s \in \Sommets} p(x_s|\RMVAR_{\spa(s)}) \label{eq:Generatif:fact}
\end{equation}
en notant $ p(x_s|\RMVAR_{\spa(s)})= p(x_s)$ si $\pa(s)=\emptyset$, telle que si $p$ vérifie \eqref{eq:Generatif:fact} alors $\Graphe$ est un DAG d'indépendance conditionnelle pour $p$.

Les DAG d'indépendance conditionnelle sont utilisés de manière privilégiée pour modéliser des relations asymétriques d'interaction ou d'influence entre variables aléatoires, voire potentiellement des relations causales. On peut représenter ainsi des hiérarchies entre variables aléatoires, comme la notion de succession, utile pour les séries chronologiques. Contrairement aux modèles orientés, on peut représenter la dépendance marginale entre variables conditionnellement dépendantes.

\subsection{Mélanges}
\label{subsec:Generatif-melanges}
Comme mentionné dans l'introduction de ce chapitre, les \index{mélange de lois}mélanges de lois indépendants sont souvent utilisés pour modéliser une hétérogénéité des données et pour réaliser du {\textit{clustering}}. On observe les réalisations de $n$ variables aléatoires $\VAR_1,\ldots, \VAR_n$ indépendantes, tout en associant à chacune d'entre elles une variable aléatoire latente $\VARC_i$ catégorielle à valeur dans $\set{1,\ldots,\NVARC}$, $\NVARC$ étant le nombre de {\textit{clusters}} à former. Les couples $((\VAR_i,\VARC_i))_{i=1,\ldots,n}$ sont supposés mutuellement indépendants et sachant $\VARC_i~=~k$, $\VAR_i$ suit une loi $p_k$ appelée \index{loi!d'émission}loi d'émission, que l'on supposera ici appartenir à une famille paramétrique $\set{p_{\param}}_{\param \in \esparam}$, de sorte que $p(\RVAR_i|\VARC_i=k) = p_{\param_k}(\RVAR_i)$ (on dit que la valeur $\RVAR_i$ est émise dans l'état~$k$). Les paramètres du modèle sont alors $\lambda = (\param_1, \ldots, \param_\NVARC)$.
Dans une approche bayésienne, la loi a~priori de $\VARC_i$ peut être également choisie dans une famille paramétrique 
(loi de Dirichlet par exemple), ou être supposée uniforme sur $\set{1,\ldots,\NVARC}$~--~qui est l'approche suivie ci-après.
On munit également $\lambda$ d'une loi, avec l'hypothèse d'indépendance a~priori $p(\param_1, \ldots, \param_\NVARC)=\prod_{k=1}^\NVARC p(\param_k)$. L'analyse statistique est basée sur le calcul de $p(\RVARC_1,\ldots,\RVARC_n,\param_1, \ldots, \param_\NVARC|x_1,\ldots,x_n)$.
Étant donné que, même en choisissant une famille de lois conjuguées pour les $\param_i$, cette quantité n'a pas d'expression explicite, on fait appel à un échantillonneur de Gibbs (voir paragraphe~\ref{subsubsec:MCMC}). 
% Les développements algorithmiques ci-dessous sont inspirés de \cite{diebolt:1994}.

% \AFAIRE{On peut changer la notation $m \leq M$ en $e \leq E$ (et dans les CMC aussi) pour être homogène avec l'ACP.} \\

Notons $\ts{X}{1}{n}=(\VAR_1,\ldots,\VAR_n)$ (resp. $\MVARC=\ts{\VARC}{1}{n})$ la séquence des observations (resp. des {\textit{clusters}} associés). L'échantillonneur de Gibbs vise à approcher la loi $p(\ts{\VARC}{1}{n}, \lambda|\ts{x}{1}{n})$ par des tirages qui suivent cette loi quand leur nombre tend vers l'infini. Il s'appuie sur le fait que les lois $p(\ts{\VARC}{1}{n} | \lambda, \ts{x}{1}{n})$ et $p(\lambda|\ts{\VARC}{1}{n}, \ts{x}{1}{n})$ ont une expression explicite. Il part d'une valeur initiale~$\lambda_1$ des paramètres, puis est basé sur l'itération suivante à chaque étape $m \leq M$. À l'itération $m$, on note $\lambda_m$ les paramètres simulés, $\lambda_{m,-k}~=~(\param_{1,m},\ldots,\param_{k-1,m},\param_{k+1,m-1},\ldots,\param_{\NVARC,m-1})$ avec des notations analogues $\VARC_{i,m}$, $\MVARC_m$ et $\MVARC_{m,-i}$ pour les {\textit{clusters}} simulés.
\begin{enumerate}
	\item Simuler $p(\ts{\VARC}{1}{n} | \lambda_m, \ts{x}{1}{n})$ ainsi : pour $i=1,\ldots,n$ \\
	simuler $\VARC_{i,m} \sim p(\VARC_i|\RMVARC_{m,-i},\lambda_m, \ts{x}{1}{n})$
	\item Simuler $p(\lambda |\MVARC_m , \ts{x}{1}{n})$ ainsi : pour $k=1,\ldots,\NVARC$\\
	simuler $\param_{k,m+1} \sim p(\param_k|\MVARC_m, \lambda_{m+1,-k}, \ts{x}{1}{n})$.
\end{enumerate}
L'étape 1 est basée sur le calcul suivant : 
\begin{align}
p(\RVARC_i|\RMVARC_{-i},\lambda, \ts{x}{1}{n}) & = \frac{p(\RVARC_i,\RVARC_{-i},\lambda, \ts{x}{1}{n})}{p(\RVARC_{-i},\lambda, \ts{x}{1}{n})}
= \frac{p(\ts{x}{1}{n}|\RVARC_i,\RVARC_{-i},\lambda)p(\RVARC_i,\RVARC_{-i}|\lambda)p(\lambda)}{p(\RVAR_i, x_{-i}|\RVARC_{-i},\lambda)p(\RVARC_{-i}|\lambda)p(\lambda)} \nonumber \\
& = \frac{p(\RVAR_i|\RVARC_i,\lambda)p(x_{-i}|\RVARC_i,\lambda)p(\RVARC_i|\lambda)}{p(\RVAR_i|\lambda)} 
= \frac{p_{\param_{\RVARC_i}}(\RVAR_i)}{\sum\limits_{k=1}^\NVARC p_{\param_{k}}(\RVAR_i)} = p(\RVARC_i|\RVAR_i,\lambda)
\label{eq:Generatif:melanges_z_post}
\end{align}
Du fait que les $\VARC_i$ sont indépendants sachant $\lambda_m$ et $\ts{x}{1}{n}$, il est possible de les simuler en parallèle.

L'étape 2 est basée sur le calcul suivant. Tout d'abord, en notant $\MI_k~=~\set{i~\in~\set{1,\ldots,n} | \RVARC_i=k}$ pour $1 \leq k \leq \NVARC$, on a :
\begin{align*}
	& p(\ts{x}{1}{n}|\ts{\RVARC}{1}{n}, \lambda) = \prod_{k=1}^{\NVARC} \prod_{i \in \MI_k} p(\RVAR_i|\RVARC_i=k, \lambda) 
	= \prod_{k=1}^{\NVARC} \prod_{i \in \MI_k} p_{\param_k}(\RVAR_i)
\end{align*}
Donc :
\begin{align}
	 & p(\param_k|, \ts{\RVARC}{1}{n} \lambda_{-k}, \ts{x}{1}{n}) 
	 = \frac{p(\param_k, \lambda_{-k}, \ts{\RVARC}{1}{n}, \ts{x}{1}{n})}{p(\lambda_{-k}, \ts{\RVARC}{1}{n}, \ts{x}{1}{n})} \nonumber \\
	 & = \frac{p(\ts{x}{1}{n} | \lambda, \ts{\RVARC}{1}{n})p(\ts{\RVARC}{1}{n}|\lambda)p(\param_k)p(\lambda_{-k})}{p(\ts{x}{1}{n} | \lambda_{-k}, \ts{\RVARC}{1}{n})p(\ts{\RVARC}{1}{n}|\lambda)p(\lambda_{-k})}
	 = \frac{\left[\prod_{j=1}^{\NVARC} \prod_{i \in \MI_j} p_{\param_j}(\RVAR_i)\right]p(\param_k)}{\left[\prod_{j\neq k}^{\NVARC} \prod_{i \in \MI_j} p_{\param_j}(\RVAR_i)\right]}  \nonumber \\
	 & = p(\param_k|(\RVARC_i,\RVAR_i)_{i \in \MI_k}) \propto p(\param_k) \prod_{i \in \MI_j} p_{\param_k}(\RVAR_i)
	 \label{eq:Generatif:melanges_theta_post}
\end{align}
Ces étapes correspondent à l'exercice 7.9.
On remarque que, pour simuler suivant la loi $p(\param_k|, \ts{\RVARC}{1}{n} \lambda_{-k}, \ts{x}{1}{n})$ à l'étape~2, il suffit de savoir simuler la loi a posteriori dans le cas d'un échantillon \index{i.i.d.}i.i.d., ici l'échantillon des $\RVAR_i$ tels que $\RVARC_i=k$. Cette étape est directe quand on a choisi une famille de lois conjuguées pour la loi a~priori $p(\param_k)$.

%% Ce passage n'est pas spécifique aux mélanges et pourrait être remonté dans le plan
Les valeurs simulées $(\MVARC_m,\lambda_m)_{m \geq 0}$ forment une chaîne de Markov dont la loi converge vers la loi stationnaire $p(\MVARC,\lambda |\ts{x}{1}{n})$. Étant donné que la loi des premières centaines de valeurs simulées peut être éloignée de la loi stationnaire, on les ignore en général. Les valeurs conservées permettent de tracer des histogrammes approchant la densité a posteriori des paramètres ($\param_k$~ici), ou d'estimer toute quantité requise pour l'inférence (espérance a posteriori $E[\param_k | \ts{x}{1}{n}]$ approchée par ${\dps{\frac{1}{M}\sum\limits_{m=1}^M \param_{k,m}}}$ par exemple). Cette inférence est relative à la marginale $p(\lambda |\ts{x}{1}{n})$ mais on peut approcher l'autre marginale $p(\MVARC |\ts{x}{1}{n})$ en calculant les fréquences ${\dps{\frac{1}{M}\sum\limits_{m=1}^M \II_{\set{\VARC_{i,m}=k}}}}$ (approximation de $p(\VARC_i=k|\RVAR_i)$, probabilité a posteriori que $\RVAR_i$ soit dans le {\textit{cluster}} $k$) et ${\dps{\frac{1}{MN}\sum\limits_{m=1}^M \sum\limits_{i=1}^n \II_{\set{\VARC_{i,m}=k}}}}$ (approximation de la proportion globale d'individus dans le {\textit{cluster}} $k$). Une alternative est de réaliser l'estimation ponctuelle de $\lambda$ (comme la moyenne empirique des valeurs simulées, leur mode, etc.) et d'utiliser l'équation \eqref{eq:Generatif:melanges_z_post} pour calculer la probabilité pour chaque observation d'être dans chacun des {\textit{clusters}}. On peut alors déterminer, pour chaque observation, son {\textit{cluster}} le plus probable pour parachever le {\textit{clustering}}.

Dans le cas des modèles de mélanges, une difficulté survient du fait que le modèle n'est identifiable qu'à une permutation près des valeurs de $\VARC_i$ (étiquettes des {\textit{clusters}}) et donc des indices des paramètres. Autrement dit, si on remplace dans toutes les équations ${\param}_1$ par $\param_2$, ${\param}_2$ par $\param_1$, $\VARC_i~=~1$ par $\VARC_i~=~2$ et $\VARC_i~=~2$ par $\VARC_i~=~1$, on n'a fondamentalement rien changé au modèle. Ceci se traduit par la possibilité que les étiquettes des $\VARC_i$ soient permutées en cours d'échantillonnage de Gibbs et que, dans les moyennes empiriques ci-après, on somme des quantités qui aient des interprétations différentes. Pour éviter ce problème, on peut ré-étiqueter les  $\VARC_i$ et $\param_k$ à la fin de l'algorithme, par exemple en ordonnant les paramètres dans l'ordre lexicographique (si $\param_k \in \RR$ on décide par exemple que $\param_1$ est le plus petit des $\param_k$).

En pratique, le nombre de {\textit{clusters}} $\NVARC$ existant dans les données est rarement connu à l'avance et il faut le déterminer. De nombreuses approches existent. Des études comparatives ont mis en évidence le bon comportement du critère \index{BIC}BIC (\textit{Bayesian Information Criterion}) pour les mélanges gaussiens. BIC est défini par :
\[
{\mbox{BIC}}(\NVARC) = 2 \max_{\lambda_\NVARC} \ln(p(\ts{x}{1}{n}|\NVARC,\lambda_\NVARC)) - d_\NVARC \ln(n)
\]
où $\lambda_\NVARC$ désigne le paramètre d'un modèle à $\NVARC$ {\textit{clusters}} et $p(\ts{x}{1}{n}|\NVARC,\lambda_\NVARC)$ la vraisemblance de $\lambda_\NVARC$. On choisit la valeur de $\NVARC$ qui maximise BIC$(\NVARC)$.
% \cite{steele:2010}

% \AFAIRE{maximum de vraisemblance en lien avec BIC, ou référence ?}
