# Cour 8 -- Introduction a l'Intelligence Artificielle et à la Theorie des Jeux ###### tags `cour` `M1 S1` `IA` [Somaire](/8Sa-Z4QBS1ep0xPwtzigJA)\ [Precedent](/SsELiBJQSIuFPBUHO90pYw) > [time= 13 novembre 2020] [TOC] ## Classification supervisé $$ \left. \begin{array}{l} &D = D_1 \times D_2 \times \cdots D_n\\ &\varphi = \{1, \cdots, c\} \end{array} \right \}=\text{fixé} $$ - Loi de Probabilité P sur D fixée (inconnue). - on dispose d'un éxhantillon S.\ un ensemble de m exemples $(\vec{x}, c(\vec{x})), \vec{x} \in D$ Livrés aléatoirement selon P(., .) défini par $P(\vec{x}), y) = P(\vec{x}) . P(y | \vec{x})$ On cherche à inférer une fonction de classemnt qui minimise l'erreur. ### Erreur apparente $E_{app}(C) = \frac{err}{|S|}$ avec err égal au nombre d'exemple de S mal classée par C. ($|s|$ = cardinal de s) Attention:\ On veut aussi avoid des fonctions qui ont un bon pouvoir prédictif. $$ \lim\limits_{|s| \to \infty}{}E_{app}(C) = E(C) $$ ### Classificateur naïf de Bayes $$ \DeclareMathOperator*{\argmax}{arg\,max} $$ $$ C_{Bayes}(d) = \argmax_{k \in \{1 \cdots c\}} P(k | \vec{d}) = \argmax_{k \in \{1 \cdots c\}} P(\vec{d} | k) . P(k) $$ $$ D = D_1 \times D_2 \times \cdots D_n\\ \vec{d} = (d_1, \cdots, d_n)\\ C_{Bayes}(d) = \argmax_{k \in \{1 \cdots c\}} P(\vec{d} | k) . P(k) $$ $P(\vec{d} | k)$ : estrimation en utilisant S ? $\widehat{P}(k)=$ la proportion des éléments de k dans S $\frac{\text{nombre des élément de k dans s}}{|s|}$ Hypothèse de simplificatrice:\ On suppose que les attributs sont indépendants: $$ P(d_1 \cdots d_n | k) = \prod_{i=1}^{n} P(d_i | k) $$ $\widehat{P}(d_i|k)=$ la proportion d'éléments de la classe k qui ont $d_i$ comme descriptions $$ C_{NaifBayes}(\vec{d}) = \argmax_{k} \prod_{i=1}^{n} \widehat{P}(d_i | k) \widehat{P}(k) $$ ### Estimation de l'erreur réelle - ensemble de test On va donc répartir les exemple tirés aléatoirement dans 2 ensemble S et T - S: échantillons d'apprentissage - T: ens de test $$ \widehat{E}(C) = \frac{\text{nombre d'éléments de T mal classés}}{|T|} $$ ### Rééchantillonage Validation croisée: Soit $k$ un param\ Partistionner S aléatoirement en k sous ens. $S_1 \cdots S_k$\ pour i = 1 à k\ - Apprendre sur l'échantillons $S \backslash S_i$ pour générer $C_i$ - Calculer $\widehat{e_{i}}$ erreur apparrente de $c_i$ sur $S_i$ $$ \widehat{E}(C) = \frac{\sum_{i=1}^{k} \widehat{e_i}}{|T|} $$ ### Bootstrap: ![](https://i.imgur.com/hDTd9mll.png) ## Arbre de décision Le principe est d'utiliser un test sur notre population $\Pi$![](https://i.imgur.com/HXVyMXXl.png) On ajoute un critere pour avoir les feuilles qui peut etre: - avoir tous l'ensemble avec la classe C - avoir quasiment tout le monde dans la classe C Cela va donc dépendre de notre échantillon. Rappelle erreur apparente:\ erreur faite sur l'échantillon meme ### Exemple personne malade Les critère: - température <37.5 - gorge irritée ```graphviz Digraph g { n0 [label="T<37.5"] n01 [label="gorge irritée"] n02 [label="malade", color="orange"] n11 [label="bien portant", color="orange"] n12 [label="malade", color="orange"] n0 -> n01 [label="oui"] n0 -> n02 [label="non"] n01 -> n12 [label="oui"] n01 -> n11 [label="non"] } ``` :::success Arbre de décision: - noueud: position\ Soit $\alpha$ l'arité maximal des noeuds qui est ele nombre de successeurs a chaque noeud - position: mot de $\{1 \cdots \alpha\}^*$\ $\epsilon$: position de la racine ::: ![](https://i.imgur.com/xTFpkHxl.png) Pour $p \in \{1 \cdots \alpha\}^*$ une position dans l'arbre: - $N(p)$ = le cardinal de l'esemble des exemples associé à p - $N(k | p)$ = le cardinal de l'ensemble des exemple associés à p qui sont de classe k. (pour $k \in \{1 \cdots \alpha\}^*$) - $P(k|p) = \frac{N(k | p)}{N(p)}$: la propostion des éléments de la classe k à la position p $$ \begin{array}{|c|c|} \hline client & M & A & R & E & I \\ &\text{(montant complexe)} & \text{(age)} & \text{(résidence)} & \text{(education)} & \text{Classe (internet)}\\ \hline 1 & moyen & moyen & village & oui & oui \\ \hline 2 & élevé & moyen & bourg & non & non \\ \hline 3 & faible & agé & bourg & non & non \\ \hline 4 & faible & moyen & bourg & oui & oui \\ \hline 5 & moyen & jeune & ville & oui & oui \\ \hline 6 & élevé & agé & ville & oui & non \\ \hline 7 & moyen & agé & ville & oui & non \\ \hline 8 & faible & moyen & village & non & non \\ \hline \end{array} $$ On a: $3I$ et $5\overline{I}$ ```graphviz Digraph M { M [label="M (3, 5)"] f [label="(1, 2)"] m [label="(2, 1)"] e [label="(0, 2)"] M -> f [label="f"] M -> m [label="m"] M -> e [label="e"] } ``` ```graphviz Digraph A { A [label="A (3, 5)"] j [label="(1, 0)"] m [label="(2, 2)"] a [label="(0, 3)"] A -> j [label="j"] A -> m [label="m"] A -> a [label="a"] } ``` ```graphviz Digraph R { R [label="R (3, 5)"] village [label="(1, 1)"] bourg [label="(1, 2)"] ville [label="(1, 2)"] R -> village [label="village"] R -> bourg [label="bourg"] R -> ville [label="ville"] } ``` ```graphviz Digraph E { E [label="A (3, 5)"] o [label="(3, 2)"] n [label="(0, 3)"] E -> o [label="o"] E -> n [label="n"] } ``` ### mesuré le degré de mélange? Comment mesurer le degré de mélange entre les classes dans un ensemble d'éxemple ? La fonction qui prend: - soit min quand pas de mélange. - soit max quand plus de mélange #### Entropie Pour une position dans l'arbre $(\{1 \cdots \alpha\}^*)$ :::success $$ Entropie(p) = - \sum_{k = 1}^{c} P(k | p) \times \log(P(k | p)) $$ ::: #### Gini :::success $$ \begin{align} Gini(p) &= 1 - \sum_{k = 1}^{c} P(k | p) ^2\\ &= 2 \sum_{k<k'} P(k | p) \times P(k' | p) \end{align} $$ ::: Exemple: Cas ou on prend 2 classes\ Soit x = la proportion d'éléments de classe 1 à p. $$ E(p) = - x \log(x) - (1 - x) \log(1 - x) $$ Donc: - min: 0, 1 -> 0 - max: 1/2 -> 1 $$ Gini(p) = 2 x (1 - x) $$ Pareil: - min: 0, 1 -> 0 - max: 1/2 -> 1 --- Sur notre exemple: Pour le test E: $$ Ent(\epsilon) = - \frac{3}{8} \times \log(\frac{3}{8}) - \frac{5}{8} \times \log(\frac{5}{8}) \simeq 0.954\\ Ent(1) = - \frac{3}{5} \times \log(\frac{3}{5}) - \frac{2}{5} \times \log(\frac{0}{5}) \simeq 0.97\\ Ent(2) = - \frac{0}{3} \times \log(\frac{0}{3}) - \frac{3}{3} \times \log(\frac{3}{3}) = 0 $$ $$ Gini(\epsilon) = 2 \times \frac{3}{8} \times \frac{5}{8} \simeq 0.469\\ Gini(1) = 2 \times \frac{3}{5} \times \frac{3}{5} \simeq 0.48\\ Gini(2) = 2 \times \frac{0}{3} \times \frac{3}{3} = 0 $$ ### Gain Pour un test t, pour une position p. $$ Gain(p, t) = f(p) - \sum_{j=1}^{\alpha} P_j \times f(p_j) $$ - f peut etre: - entropie - ginie - $P_j$ = la proportion des éléments de S à la position p qui se retrouvent à la postion pj après le test t ![](https://i.imgur.com/JICMpYP.png) Choix du test à la position, c'est donc maximiser choisir t pour lequel Gain(p, t) est maximal. $$ \begin{align} G(\epsilon, M) &= E(\epsilon) - \left( \frac{3}{8} Ent(1) + \frac{3}{8} Ent(2) + \frac{2}{8} Ent(2) \right)\\ &= Ent(\epsilon) - 0.62\\ G(\epsilon, A) &= Ent(\epsilon) - 0.5\\ G(\epsilon, R) &= Ent(\epsilon) - 0.87\\ G(\epsilon, E) &= Ent(\epsilon) - 0.607\\ \end{align} $$ 1. A 2. E 3. M 4. R On applique donc un algorithme récursif ### Algorithme d'apprentissage générique ```python= # attention ici on a du tres gros pseudo code def decision_tree(lang): """ entré: language de description, échantillon S """ # initialisation à l'arbre vide # la eacine est le noeud courant t = Tree() while(true): # décidé si le noeud est terminal if terminal(lang): t = lang.classe() # affecté une classe break; else: # selectioné un test et crée les sous arbre # créer les sous arbres t = test_and_create_sub_tree() # passer au noeud suivant t.next() return t ``` ### Arbre parfait Erreur apparentte faible Un arbre est parfait si:\ il ne se trompe pas sur les exmples de l'échantillon d'apprentissage. On peut avoir de l'overfeating (erreur réel > erreur apparente) ### Elagage On peut décider de faire un élaguage pour baiser l'erreur réel. Il faut donc mesurée le gain en s'arrétant a l'endroit de l'élaguage On va donc construire l'arbre puis essayer l'allégé, avec l'erreur réel. On a donc 2 phase: - phase d'expansion (construit l'arbre) - phase d'élaguage (minimiser l'erreur réelle) Exemple d'algo: CART - phase d'expansion - décider si un noeud est terminal: \ $N(p) \leq Borne_1 \lor Gini(p) \leq Borne_2$ - affecter la classe: \ classe majoritaire - choix du test: \ Gain max avec gini - phase d'élaguage:\ On construit une séquence d'arb re ![](https://i.imgur.com/xetWiVc.png) $t_i \rightarrow t_{i+1}$\ p une position dans $t_i$ ![](https://i.imgur.com/RsMMln9m.png) $$ g(p) = \frac{\Delta_{app}(p)}{|u_p| - 1}\\ \text{avec } \Delta_{app}(p) = \frac{MC(p) - MC(up)}{N(p)} \\ $$ avec: - $MC(p)=$ le nombre d'éléments de $s$ mal classés à $p$ lorsqu'on élague $t_i$ à la position $p$ - $MC(up)=$ le nobre d'éléments de $s$ associés à $p$ qui sont mal classés par $up$ on calcule l'erreur apparante sur un ensemble de test T.\ Estimation de l'erreur réel Puis on prentd le $t_i$ qui minimise l'erreur