Introduction

L’idée de ce projet serait de s’interésser aux méthodes de classifications et de regressions utilisées en machine learning. Le machine learning est basé sur deux étapes fondamentales. La premiére appelée Apprentissage, consiste , à partir d’un sous échantillon, à faire apprendre la machine. La deuxiéme étape consiste à prendre une deuxiéme partie de la population sur laquelle des prédictions sont faits afin de tester la performance de la machine ().
Nous parlerons de Classifications lorsque les données à prédire représentent une catégorie ou un groupe supposé connu.

Et nous parlerons de Régression lorsque l’on doit prédire une valeur. Dans ces deux cas nous parlerons de Machine Learning Supervisé. Le cas du Non Supervisé devient utile lorsqu’il sagit de détecter une anomalie ou que les catégories, groupes dans la population ne sont pas supposés connus.
Nous intéresserons dans ce projet qu’au cas Supervisé.

Pour cela nous disposons d’une Base de donnée sur les types Couvertures forestières dans le référentiel d’apprentissage automatique de l’université du colorado, qui est extrait des données forestières de quatre zones sauvages de la forêt nationale de Roosevelt dans le nord du Colorado. Le type de couverture forestier réel pour une observation donnée a été déterminé à partir des données du Système d’information sur les ressources (RIS) du Service des forêts des États-Unis (USFS) L’information sur les données forestaires est un outil d’aide à la décision pour les gestionnnaires des stratégies en matiére de gestion de l’écosystème. Cependant, les gestionnaires généralement n’ont pas ce type de données qui sont en dehors de leur immédiate juridiction. Une méthode d’obtention de ce genre d’information se fait le biai d’utilisation de modèles prédictifs. Ces modéles prédictifs sont basées sur d’une part, l’apprentissage sur données déja existant et afin de pouvoir classer les données futur sur les Forêts. Deux types modéles prédictives sont utilisés. Le premier est le modéle des réseaux de neurones artificiel (Neural networks), qui à l’origine est inspirée du fonctionnement des neurones biologiques, et qui par la suite s’est rapproché des méthodes statistiques . Les réseaux de neurones artificiels ont besoin de cas réels servant d’exemples pour leur apprentissage (on appelle cela la base d’apprentissage). Ces cas doivent être d’autant plus nombreux que le problème est complexe, et ou que sa topologie est peu structurée. Le deuxieme type de modéle (), sont les plus communs, même si elles ne sont pas tout le temps forcément les mieux adaptées aux phénoménes étudiés.
Nous verrons dans un premier temp le principe de certains de ces modéles et des applications de ces derniers.

• Tableau de description

Nom Mesure Description
Elevation métre Elevation en métre
Aspect azimut Aspect en azimuth
Slope degré Slope in degrees
HDTH métre Distance Horizontale au point d’eau plus proche
VDTH métre Distance Verticale au point d’eau plus proche
HDTR métre Distance Horizontale par rapport à la route
Hillshade_9am de 0 à 255 Indice d’ombre portée à 9h, soltice d’été
Hillshade_Noon de 0 à 255 Indice d’ombre portée à 12h, soltice d’été
Hillshade_3pm de 0 à 255 Indice d’ombre portée à 15h, soltice d’été
HDTFP métre Distance Horizontale au point de feux plus proche
Wilderness 4 type Type de zone Sauvage
Soil_type 40 type Type de sol
Cover 7 type Type de forêt

KNN

La méthode des K plus proches voisins

L’algorithme KNN figure parmi les plus simples algorithmes d’apprentissage artificiel. Dans un contexte de classification d’une nouvelle observation \(X\), l’idée fondatrice simple est de faire voter les plus proches voisins de cette observation. La classe de \(x\) est déterminée en fonction de la classe majoritaire parmi les \(k\) plus proches voisins de l’observation \(x\). La méthode KNN est donc une méthode à base de voisinage, non-paramétrique. Ceci signifiant que l’algorithme permet de faire une classification sans faire d’hypothèse sur la fonction: \[Y=f(X_1+X_2,.....,X_p)\] Elle relie la variable dépendante aux variables indépendantes.

est une méthode non paramétrique où une nouvelle observation est classée dans la classe d’appartenance de l’observation de l’échantillon d’apprentissage qui lui est la plus proche, au regard des covariances utilisées. La détermination de leur similarité est basée sur des mesures de distance.

Soit \(L\) l’ensemble de données à disposition ou échantillon d’apprentissage : \[L=\{(Y_i,X_i),i=1,....,n\}\]

La détermination du plus proche voisin est basée sur une fonction distance arbitraire ( \(d(x,y)\)) . La distance euclidienne ou dis-similarité entre deux individus caractérisés par \(p\) covariances est définie par:\[d(X,Y)=d((X_1,X_2,X_3....,X_p),(Y_1,Y_2,Y_3,....Y_p)) \]\ \[=\sqrt[]{(X_1-Y_1)^2+(X_2-Y_2)^2+.....(X_p-Y_p)^2}\]\ \[=\sqrt[]{\sum_{i=1}^n(X_i-Y_i)^2}=||X-Y||_2\]

Bien sûr, nous pouvons également utiliser sa mesure de distance. Par exemple, Manhattan distance, défini comme: \[d(X,Y)=|X_1-Y_1|+|X_2-Y_2|+|X_3+Y_3|+....+|X_n-Y_n|\] \[=\sum_{i=1}^n|X_i-Y_i|=||X-Y||_1\] Aussi la distance de Minkowski (distance de Minkowski), définie comme:\[d(X,Y)=\sqrt[p]{(|X_1-Y_1|)^p+(|X_2-Y_2|)^p+....+(|X_n-Y_n|)^p}\] \[=\sqrt[p]{\sum_{i=1}^n(|X_i-Y_i|)^p}\] La méthode des \(k\) plus proches voisins. La plus proche observation n’est plus la seule observation utilisée pour la classification. Nous utilisons désormais les k plus proches observations. Ainsi la décision est en faveur de la classe majoritairement représentée par les \(k\) voisins. Soit \(kr\) le nombre d’observations issues du groupe des plus proches voisins appartenant à la classe \(r\):

\[\sum_{r=1}^cK_r=K\]

Dans l’exemple suivant, on a 3 classes et le but est de trouver la valeur de la classe de l’exemple inconnu x On prend la distance Euclidienne et k=5 voisins Des 5 plus proches voisins, 4 appartiennent à w1 et 1 appartient à w3, donc x est affecté à w1, la classe majoritaire

                              IMAGE(7)

Quelques règles sur le choix de k : Le paramètre k doit être déterminé par l’utilisateur : k appartient à N. En classification binaire, il est utile de choisir k impair pour éviter les votes égalitaires. Le meilleur choix de k dépend du jeu de donnée.En général, les grandes valeurs de k réduisent l’effet du bruit sur la classification et donc le risque de sur-apprentissage, mais rendent les frontières entre classes moins distinctes. Il convient donc de faire un choix de compromis entre la variabilité associée à une faible valeur de k contre un ‘oversmoothing’ ou sur-lissage (i.e gommage des détails) pour une forte valeur de k. Un bon k peut être sélectionné par diverses techniques heuristiques, par exemple, de validation-croisée. Nous choisirons la valeur de k qui minime l’erreur de classification.

Une grande base d’apprentissage permet une plus grande valeur de k

Nécessaire pour des petites bases d’apprentissage

Algorithme KNN Principe de réalisation de l’arbre KD

Au lieu d’essayer de classer les échantillons de test dès le départ, l’algorithme KD-tree commence par modéliser l’ensemble d’apprentissage: le modèle établi est un arbre KD et le modèle est construit pour prédire l’ensemble de test. Le soi-disant arbre KD est un arbre de dimensions caractéristiques K, notant que K a ici une signification différente de K dans KNN. K dans KNN représente la catégorie de sortie de caractéristique et K dans l’arbre KD représente la dimensionnalité des caractéristiques de l’échantillon.

Si nous avons 6 échantillons 2D, {(2,3), (5,4), (9,6), (4,7), (8,1), (7,2)}, alors l’arbre kd Comme suit

                              IMAGE 8
                           

Lorsque nous générons l’arbre KD, nous pouvons prédire la cible de l’échantillon dans l’ensemble de test. Pour un point cible, nous trouvons d’abord le point contenant le point cible dans l’arbre KD. En prenant le point cible comme centre et la distance entre le point cible et l’instance d’échantillon en tant que rayon, une hyper-sphère est obtenue et le point voisin le plus proche doit être à l’intérieur de l’hyper-sphère. Le partitionnement de l’arbre KD peut réduire considérablement la recherche des plus proches voisins invalides, de nombreux points d’échantillonnage étant donné que les super-rectangles et les super-sphères ne se croisent pas, n’ont pas besoin de calculer la distance. De grandes économies en temps de calcul.

                            IMAGE 9
  
  

Naive Bayes

Introduction à la notion

Le classificateur naïf bayésien est l’une des méthodes les plus simples en apprentissage supervisé basée sur le théorème de Bayes.

Il est peu utilisé par les praticiens du data mining (c’est-à-dire l’exploration de données qui consiste à trouver des anomalies, des modèles et des corrélations au sein de grands ensembles de données afin de prédire les résultats.) au détriment des méthodes traditionnelles que sont les arbres de décision ou les régressions logistiques.

Historiquement, la classification naïve bayésienne fut utilisée pour la classification de documents et l’élaboration de filtres Anti-spam. Aujourd’hui, c’est un algorithme renommé dont les applications peuvent être rencontrées dans de nombreux domaines. Parmi ces atouts les plus significatifs, on citera son apprentissage rapide qui ne nécessite pas un gros volume de données et son extrême rapidité d’exécution comparé à d’autres méthodes plus complexes. Finalement, malgré la forte hypothèse simplificatrice d’indépendance des variables , la classification naïve bayésienne obtient des résultats remarquables dans de nombreuses applications de la vie courante ce qui en fait un algorithme de choix parmi les outils du machine learning.

A la base de la classification naïve bayésienne se trouve le théorème de Bayes avec l’hypothèse simplificatrice, dite naïve, d’indépendance entre toutes les paires de variables.

Un avantage de cette méthode est la simplicité de programmation, la facilité d’estimation des paramètres et sa rapidité (même sur de très grandes bases de données). Malgré ses avantages, son peu d’utilisation en pratique vient en partie du fait que ne disposant pas d’un modèle explicite simple (l’explication de probabilité conditionnelle à priori), l’intérêt pratique d’une telle technique et remise en question. C’est pourquoi nous allons également nous intéresser plus tard, aux limites du modèle.

Énoncé du théorème de Bayes : Le théorème de bayes est une conséquence immédiate des probabilités conditionnelles et des probabilités totales.

La probabilité conditionnelle est la probabilité d’un événement sachant qu’un autre événement a eu lieu.

Tout d’abord, on se donne un espace de probabilité \((\Omega,\tau,\mathcal{P})\) .

Soient A et B deux événements, l’événement B étant de probabilité non nulle. La probabilité de l’événement A sachant que l’événement B est réalisé est notée \(\mathbb{P}(A|B)\). Elle est donnée par la formule suivante :\[\mathbb{P}(A|B)=\frac{\mathbb{P}(A\cap B)}{\mathbb{P}(B)}\]

On en déduit que: \[\mathbb{P}(A\cap B)=\mathbb{P}(B)*\mathbb{P}(A|B)\]

La probabilité dite " totale" d’un événement B se calcul de la manière suivante: \[\mathbb{P}(B)=\sum_{i=1}^n\mathbb{P}(B\cap A_i)\] \[=\sum_{i=1}^n\mathbb{P}(B|A_i)*P(A_i)\]

Préparation au théorème de Bayes :

En intervertissant l’événement et la condition on obtient la formule suivante : \[\mathbb{P}(A|B)=\frac{\mathbb{P} (A \cap B)}{\mathbb{P}(B)}\] \[=\frac{\mathbb{P}(A|B)*\mathbb{P}(A)}{\mathbb{P}(B)}\]

Voici la formule de Bayes : 

Considérons une partition (\(A_{1}, ....., A_{n}\)) , de l’ensemble des événements de E. Alors: \[\mathbb{P}(A_n|B)=\frac{\mathbb{P}(A_n)*\mathbb{P}(B|A_n)}{\mathbb{P}(B)}\] La démonstration a été faite au préalable sous “Probabilités totales” et “ Préparation au théorème de Bayes ”.

L’apport d’une nouvelle information permet de corriger les probabilités à priori :

Les nombres suivants sont appelés “Probabilité à priori de \(A_{k}\)” : \[\mathbb{P}(A_1),\mathbb{P}(A_2),.....,\mathbb{P}(A_n)\]

Les nombres suivants, appelés “ fonction de vraisemblance de \(A_{k}\) ” expriment des apports d’ informations: \[\mathbb{P}(B|A_1),\mathbb{P}(B|A_2),.....,\mathbb{P}(B|A_n)\]

Les nombres suivants, appelés “Probabilité à posteriori de \(A_{k}\)”, expriment comment les probabilités à priori doivent être adaptées à la sous-population B : \[\mathbb{P}(A_1|B),\mathbb{P}(A_2|B),.....,\mathbb{P}(A_n|B)\]

Probabilités des causes :

Si les \(A_{1}, A_{2},...,A_{n}\) expriment les causes possibles de B , on peut maintenant établir la cause la plus probable (éventuellement les causes les plus probables) \(A_{k}\) : c ’est celle où \(\mathbb{P}(A_k|B)\) diffère le plus de \(\mathbb{P}(A_k)\), ce qui indique que les événements \(A_{k}\) et B ne sont pas indépendants.

Soit le système complet \(A_{i}\) étant considéré comme les ‘causes’.

On sait maintenant qu’un événement \(B\), de probabilité non nulle, s’est produit dont on connaît les probabilités conditionnelles suivant le système \(A_{i}\), on cherche inversement à connaître pour chaque ‘cause’ la probabilité qu’elle soit à l’origine de l’événement.

En somme il faut reconstituer \(\mathbb{P}(A_i|B)\) en fonction des \(\mathbb{A_i|B}\) . Le théorème de Bayes est souvent appelé “théorème de probabilité des causes”. Il s’énonce ainsi par la formule suivante :

\[\mathbb{P}(A_i|B)=\frac{\sum_{i=1}^n\mathbb{P}(B|A_i)*\mathbb{P}(A_i)}{\mathbb{P}(B)}\]

Explication de la méthode :

Cette méthode est un algorithme d’apprentissage supervisé qui permet de classifier un ensemble d’observations selon des règles déterminées par l’algorithme lui-même. Cet outil de classification doit dans un premier temps être entraîné sur un jeu de données d’apprentissage qui montre la classe attendue en fonction des entrées. Pendant la phase d’apprentissage, l’algorithme élabore ses règles de classification sur ce jeu de donnée, pour les appliquer dans un second temps à la classification d’un jeu de données de prédiction. Le classificateur bayésien naïf implique que les classes du jeu de données d’apprentissage soit connu et fournit, d’où le caractère supervisé de l’outil.

Limite du modèle :

Le terme naïf désigne ici le fait que les descripteurs sont conditionnellement indépendants. Ce qui en pratique n’est presque jamais vrai. C’est une hypothèse forte et qui est violée dans la majorité des cas réels. Contre intuitivement, malgré la violation de la contrainte d’indépendance des variables, Naïve Bayes donne de bons résultats de classification.

En résumé :

Pour mettre en place un classifieur naïf de Bayes :

\(\bullet\) On détermine un ensemble d’apprentissage

\(\bullet\) On détermine des probabilités à priori de chaque classe (par exemple en observant les effectifs)

\(\bullet\) On applique la règle de Bayes :

\[\mathbb{P}(Y=c|X=x)=\frac{\mathbb{P}(X=x|Y=c)\mathbb{P}(Y=c)}{\mathbb{P}(X=x)}\] pour obtenir la probabilité à posteriori des classes au point \(x\).

\(\bullet\) On choisit la classe la plus probable.

Dans la formule de Bayes : \(\mathbb{P}(Y=c)\): La probabilité à priori

\(\mathbb{P}(X=x|Y=c)\) : La probabilité conditionnelle d’appartenance à la classe \(c\), qui peut être interprété comme la vraisemblance de cette classe.

La prédiction de la classification naïve bayésienne peut aboutir à un cas d’égalité où plusieurs classes obtiennent une même probabilité \(\mathbb{P}(Y)\). Deux approches sont proposées pour gérer ces cas :

\(\bullet\) Choix aléatoire : choisi une classe de manière aléatoire dans l’ensemble des classes présentant la même probabilité \(\mathbb{P}(Y)\).

\(\bullet\) Plus petit indice : choisi la première classe rencontrée dans l’ensemble des classes présentant la même probabilité \(\mathbb{P}(Y)\) .

Le lissage de Laplace permet d’éviter d’obtenir des probabilités nulles ou égales à un (Le lissage peut aussi être vu comme une façon d’éviter le surentraînement d’un modèle sur un corpus, et de doter du modèle d’une plus grande capacité de généralisation).

Les distributions de probabilité utilisées sont indiquées.

Les variables qualitatives sont supposées suivre une distribution empirique.

La nature de la distribution a priori des classes (uniforme, non uniforme) est aussi rapportée.

Modéle Logistique

La méthode de régression logistique est un des 4 principaux modèles du machine learning.

Régression logistique dichotomique simple et multiple

La régression logistique est typiquement utiliser avec des variables à expliquer binaires. Les variables à expliquer sont les X du modèle soient, les paramètres. Une telle situation se présente fréquemment dans le domaine des sciences humaines ou en médecine, par exemple si on souhaite expliquer la variable «être au chômage» «oui/non», «être malade» «oui/non»

En effet cette technique de modélisation vise à prédire et formaliser les valeurs des variables \(X\) (caractéristiques) en une variable réponse Y, binaire. Il existe aussi la régression logistique multinomiale que nous traiterons dans la seconde partie. Les variables \(X\) sont binaires ou continues et qualitatives ou quantitatives. À la différences d’une régression linéaire, la réponse n’est pas continue mais bien binaire (exemples : oui/non, malade/non malade). En conservant certaines hypothèses du modèle de régression linéaire, on maintient quand même l’idée d’une relation linéaire entre la réponse et les prédicateurs. On cherche à expliquer la venue d’un événement en fonction des des caractéristiques définissant le modèle (les \(X\)).

Document 1: Comparaison avec la régression linéaire.

Soit le modéle
\[Y_i=\beta_0 + X_i\beta,i=1,....,n\]

où la régression linéaire ne marche pas on utilise une régression logistique simple, c’est à dire au lieu du Y, on définit la fonction logit sur l’intervalle [0, 1] et à valeurs entre \([-\infty;+\infty]\): par la relation :

\[logit( \mathbb{P}(Y=1))=\frac{log(\mathbb{P}(Y=1))}{1-\mathbb{P}(Y=1)}\]

avec Y la variable explicative et \(\mathbb{P}(Y=1)\) signifiant le \(Y=1\) de notre variable binaire. (Exemple : soit Y le risque de suicide dans une prison avec 1= haut risque de suicide, 0= faible risque de suicide, on a \(log(\mathbb{P}\)(Y=haut risque)
\((1-\mathbb{P}\)(haut risque)) et X, la seule variable explicative étant des abus durant l’enfance. Il reste à expliquer le coefficient b. En effet, exp(b)=n avec n fois plus de risque de se suicider en prison si il y a eu abus durant l’enfance, c’est ce qu’on appelle le odd ratio.) Pour la suite nous introduirons pi=P(Y=1) 1 étant la sortie choisi.

Ainsi, la régression logistique multiple par du même principes mais avec plusieurs variables explicatives. Autrement dit, plusieurs paramètres indépendants sont entrés dans le modele et la méthode sur logiciel est la même.

Il faut aussi savoir que pour la régression logistique il est nécessaire d’avoir un grand nombre d’observations qui est la principale condition de validité du modele. Il existe des variable qui peuvent avoir en sorties plus de 2 réponse, en effet si on introduit une variable qui caractérise la profession d’une personne selon plusieurs domaines/classe il faut prendre en compte le nombre d’individu et le nombre de sorti possible à cette meme variable concernant les variables qualitativement modéliser par des chiffre (1 si chef d’entreprise 0 sinon, 1 si ouvrier 0 sinon etc). Il est simple de calculer le nombre d’observation. Soit o le nombre d’observation. Alors o= (somme des variable) x nombre d’événements sachant que le nombre d’événements doit être compris entre 5 et 10 en moyenne. Si il n’y a pas assez d’observation la régression sera faussée.

Les paramètres :

  • L’estimation des paramètres du modèle de régression logistique se fait par la méthode du maximum de vraisemblance.
  • On maximise la vraisemblance par rapport aux paramètres \[\beta_0,\beta_1,...,\beta_p\] au moyen d’un algorithme numérique (par exemple la méthode du gradient).
  • Dans certains cas, l’algorithme ne peut proposer une estimation stable des paramètres. En pratique, il faut s’assurer que la procédure numérique a convergé vers des valeurs stables des paramètres.

Régression Logistique Polytomique

En ce qui concerne la régression logistique polytomique (non binaire, sortie autre que seulement «0/1»,»oui/non»,»malade/non malade»..). La variable à expliquer reste Y et les variables explicatives les \(X\).

Méthode de régularisation

Il existe, entre autres, 2 méthodes de régularisation qui permettent de faire des restrictions au modèle. C’est ce qu’on appelle des régressions logistiques pénalisées ou conditionnelles. Cette pénalisation, permettant d’éliminer de façon automatique les variables considérées non pertinentes, est particulièrement adaptée aux problèmes où le nombre de variables explicatives est élevé ou en cas de colinéarité. En effet un modele de régression logistique classique aurait pu suffire à éliminer toute confusion seulement si il est correct. Néanmoins, dans certaines situations, le poids des facteurs de confusion est tellement important, qu’un simple ajustement ne suffit pas pour garantir une interprétation simple des résultats .

LASSO qui est un acronyme pour «Least Absolute Shrinkage and Selection Operator». Introduisons la fonction de log-vraisemblance conditionnelle, évaluée en beta (la vraie valeur des coefficients). Soit:

\[D = \{(x_{ik},y_{ik}); i=1,...,M+1;k=1,...,K\} \]
\[l(\beta,D)=\sum_{k=1}^K[X_{1k}\beta-log{\sum_{l=1}^{M+1} X_{lk}\beta}]\]

Le LASSO appliqué à la régression logistique conditionnelle consiste à maximiser la fonction (5) pénalisée par la norme \(L^1\) du vecteur de coefficients inconnus :

\[ \widehat{\beta_D}^L (\lambda)= argmax_\beta ( (l_1(\beta, D) - \lambda_1 || \beta||_1 ) = argmaxl_{1}\]

\(\lambda\) est un paramètre de régularisation, \(||\beta||_1=|\beta|\) est la norme \(L^1\) des coefficients et \(l_1(\beta, D)\) indique la log–vraisemblance conditionnelle pénalisée par la norme \(L^1\) des coefficients et évaluée en \(\beta\) et en \(D\). La méthode de Ridge, elle, ne subit pas la même pénalité, en effet l’estimateur est induit par la norme L2 comme la formule de l’estimateur :

\[ \widehat{\beta_D^L} (\lambda)= argmax_\beta (l_{1,2}(\beta, D) - \lambda_1 || \beta||_1 - \lambda_2 || \beta||_2 ) \]

\(l_{1,2}(\beta, D)\) indique la log–vraisemblance conditionnelle pénalisée par les normes \(L^1\) et \(L^2\) des coefficients, et \(\lambda_1\) et \(\lambda_2\) sont des paramètres de régularisation. L’obtention de ce dernier estimateur demande néanmoins un nombre de calculs plus important. En effet, l’optimisation du paramètre \(\lambda_1\) par validation croisée, oblige à fixer le paramètre \(\lambda_2\) sur une grille de valeurs et vice-versa.

Pour résumer, l’avantage avec la méthode RIDGE est qu’elle associe des variables fortement corrélées pour les renforcer mutuellement. En revanche toutes les variables se retrouvent dans le résultat final et on ne peut pas définir la plus significative. Inversement, la méthode du LASSO choisi arbitrairement une des variables corrélées et met les autres à 0.

Evaluation des régles de décisions

Cross Validation

Qu’est ce que la validation croisée ?

la validation croisée (cross validation en anglais) est très populaire pour estimer la performance d’une méthode basé sur un échantillonnage: 2 échantillon : celui d’apprentissage et celui de test. Il en existe en faite plusieurs méthodes:

1ere méthode : sur un modèle à n échantillon on prendra plus ou moins les 2/3 pour ce qu’on appelle l’échantillon d’apprentissage et le reste pour l’échantillon de test. On estime le terme d‘erreur sur le modele bâtit sur l’échantillon d’apprentissage et on confirme avec l’échantillon de test.

2eme methode : on divise l’échantillon \(n\) fois, puis on sélectionne un des \(n\) échantillons comme ensemble de validation et les \((n-1)\) autres échantillons comme l’ensemble d’apprentissage. On calcule comme dans la première méthode l’erreur. Puis on répète l’opération en sélectionnant un autre échantillon de validation parmi les \((n-1)\) échantillons qui n’ont pas encore été utilisé pour la validation du modèle. On répète l’operation \(k\) fois pour qu’en fin de compte chaque sous-échantillon ait été utilisé exactement une fois comme ensemble de validation. La moyenne des \(k\) erreurs moyenne est enfin calculée pour estimer l’erreur de prédiction. L’erreur ainsi mesurée est non biaisée. Lorsque la base initiale de petite taille, cette démarche n’est plus adaptée, en effet pour faire des sous échantillons qui mèneront a un modele pertinent il faut une taille d’événements conséquente.

ROC

Pour finir nous allons nous intéresser à la courbe ROC (Receiving Operator Characteristic) qui est communément utilisée pour mesurer la performance d’un classifieur. Pour parler de la courbe ROC nous allons introduire les terme spécificité et sensibilité. On définit la sensibilité par la proportion de vrais positifs parmi les expériences et la spécificité par proportion de vrais négatifs parmi les expériences. La courbe ROC est la proportion de vrais positifs en fonction de la proportion de faux positifs. La courbe ROC correspond à la représentation graphique du couple (1 – spécificité ; sensibilité) pour les différentes valeurs seuil. Son allure est en soit en escalier soit en droites par morceaux et est croissante entre le point (0,0) et le point (1, 1) et en principe au-dessus de la diagonale. Lorsqu’un modele fournit des résultats de type continu, il faut déterminer le meilleur seuil entre les valeurs «anormales» et les valeurs normales: en effet, il faut déterminer un seuil S au delà duquel on est déclaré positif.

On a :

*\(\alpha\) = risque de première espèce taux de faux positifs

*\(\beta\) = risque de deuxième espèce taux de faux négatifs

*Sensibilité \(1- \beta\)= pourcentage de vrais positifs= puissance du test

  • Spécificité = \(1- \alpha\) = pourcentage de vrais négatifs

On définit à présent l’AUC comme l’air sous la courbe ROC (Area Under Curve) et donne un indicateur de la qualité de la prédiction, plus l’AUC est grand, meilleur est le test. Comment estimer l’AUC ? D’abord mesurer la surface puis estimer \(\mathbb{P}(X1>X2)\) avec \(X1\),\(X2\) 2 observations. On considère habituellement que le modèle est bon dès lors que la valeur de l’AUC est supérieure à 0.7. Un modèle bien discriminant doit avoir une AUC entre 0.87 et 0.9. Un modèle ayant une AUC supérieure à 0.9 est excellent.

On pourra citer un exemple dans la medecine. Savoir si une personne est malade ou non. Entre 2 personnes, une saine et l’autre malade, si l’AUC = 1 de notre courbe ROC alors on notre modele permettra de dire dans \(100\%\) des cas laquelle est malade et laquelle est saine. \

Application

L’objectif des méthodes de classifications de faire des regroupements en classes homogènes d’un ensemble d’individus. Dans nous allons presenter les modéles de classifications afin comparer leurs performances sur cette base de données. Nous considérerons la variable Cover comme variables à expliquer et les autres variables quantitives comme variables explicatives des modéles. Les méthodes utilisées ici, sont utilisées en Analyse factorielle Discriminante AFD. Nous procéderons à un apprentissage sur 11340 individus contre 569671 en test. Nous faisons cela car on sait que les responsables charger de l’écosystéme n’avait que 11340 information au début.

KNN

la premiére méthode utilisée est le KNN () avec K pour le nombre de voisin à considérer en faisant la classification cela a d’ailleurs son importance car cela permettra , quand k est un peu grand à voter pour celui qui à la distance la plus fréquentes. Mais cela ne veut pas non plus dire que plus k est grand plus c’est mieux, car k tres grand se représente comme une droite sur le plan, ce qui risque d’augmenter le bruit (erreur). En effet on comprend bien que les modéles ne sont pas forcément linéaires. Cependant il n’y pas de choix universels pour le choix du k, cela dependra de l’impact du bruit, de la complexité du phénoménes que l’on veut faire apprendre à la machine. Certains suggérons la racine carré de la taille d’observations destination à l’apprentissage, et d’autre suggerons à tester de maniere itératives plusieurs k est regarde celui qui a la plus grande de performances prediction. d’ailleurs on comprend dés lors que cette méthode malgrés elle a ses limites. On est dans une dimension n (dependant des variables), on compare les distances Euclidiennes. Quand on a des variables qualitatives il faudra cependant penser à les coder en valeurs discréte. Souvent il est aussi nécessaire de normalisé certaines variable de maniére à se ramener sur un intervalle 0 1. Le but étant de faire en sorte que chaques élément contribue dans la même dimension.

Nous avons les performances ci-dessous:

Tableau des performance

K Perfomances
k=1 62.04 %
k=2 58.048 %
k=7 55.409 %
k=15 55.412 %

 
Nous comprenons que l’on plus intérêt à garder k petit.

Méthode Naive de Bayes

Cette méthode de prediction est base sur de la statistique inférencielles de la probabilité conditionnelle des événements combinés. soit deux évenement \(A\) et \(B\).

\[\mathbb{P}(A|B)=\frac{A \cap B }{B}\]
Elle part de l’hypothése de l’indépendance entre les variables. Ce qui facilite le probléme car si on considére un troisiéme événemment \(C\) l’algorithme considéra l’égalité suivante.

\[\mathbb{P}(A \cap B \cap C)=\mathbb{P}(A \cap B)* \mathbb{P}(B \cap C)\]

D’ailleurs l’idée du “Naive” par de cette hypothése. On pourrait se demander ce qui se passerait si un instersection d’événements n’a jamais été constaté ? Dans ce cas la toute l’expression devient nul, Ce qui risque d’être problématique. Mais grâce à la correction de Laplace le probléme est réglé. En effet il sagit de rajouter une petite probabilité sur chacune des probabilités d’intersections. De cette maniére à ce que l’événement jamais observé à un mininum de probabilité de se produire.

Nous avons les performances suivantes on peut noter que la correction de Laplace n’a pas d’influence ici.

Naive Bayes Perfomances
Modéle 1, laplace=0 46.88145 %
Modéle 1, laplace=1 46.88145 %
Modéle 1, laplace=2 46.88145 %
Modéle 1, laplace=20 46.88145 %

Logistic Multinomial

Cette fait partie des méthodes paramétrique, et est une généralization du modéle de régression logistic simple, en prenant le caractére polythomique de la variable à explique de class K. soit \(x\) les paramétres d’un individu.

\[\mathbb{P}(K=k|X=x)=\frac{e^{\beta_{0k}+\beta^n_{k}x }}{\sum^K_{l=1}e^{\beta_{0l}+\beta^n_lx} }\] Nous avons décidé d’intégrer les régularisations suivantes afin d’éviter la possible variance trop fort variances des estimateurs du fait du risque de correlation des estimateurs: 

Lasso regression penalise les coefficients des variables significatives.

Ridge regression qui penalise l’absolue magnitude des coefficients

\(\Rightarrow\) les deux sont utilisées pour adjuster les coefficients de la regression.

Nous avons en paralléle la méthode du Cross-validation, basée sur du bootstrapping afin de controler la fiabilité du modèle.

Nous obtenons le tableau de performance suivant :

Nous avons la performance maximale à 64% , avec le paramétre du lasso à 0.1 et celui du Ridge à environ 0.00041. Mais en faisant le test, nous nous rendons compte que le modéle peut être amélioré car nous sommes à 52%. Toutefois nous pouvons souligner que le principal probléme du modéle c’est les Vrais Positives.

Random Forest

Parmi les méthodes utilisées nous ferons une application du Random Forest.

Nous obtenons le tableau de performance suivant :

Nous avons la performance maximale à 83%. Mais en faisant le test, nous nous rendons compte que ce modéle peut aussi être amélioré car nous sommes à 68%. Toutefois nous pouvons souligner le même probléme sur modéle, sa prediction sur les Vrais Positives.

Conclusion

Pour Conclure, Parmi les méthodes de classifications les plus communs proposées, le le Random Forest est le mieux adapté. Cependant d’autres méthodes de classifications basées les arbres de décisions et ou encore l’algorithme de classifications par réseau de neurones pourraient montrer de meilleurs performances que ce dernier. 

Annexe

Code R

library(ggplot2)
library(magrittr)
library(rmarkdown)
library(dplyr)
library(tidyr)
library(RColorBrewer)
library(reshape2)
library(ggthemes)
library(MASS)
library(viridis)
library(GSIF)
library(ggtern)
library(geomnet)
library(ggmap)
library(ggfortify)
library(vars)
library(maps)
library(rgdal)
library(animation)
library(FactoMineR)
library(factoextra)
library(class)
library(naivebayes)
library(glmnet)
library(caret)
library(caTools)
library(MLmetrics)
library(stringr)
library(readr)

# Partie 1
covtype <- read.csv2("~/Downloads/covtype.data",
                     col.names =paste0("X","1":"55") ,sep=",")
covtype=tbl_df(covtype)
View(covtype)

any(is.na(covtype))
covtype1=cbind(covtype[,1:10],covtype[,55])

covtype2=covtype[,11:14]
covtype3=covtype[,15:54]
names(covtype1)=c("Elevation","Aspect","Slope","HDTH","VDTH","HDTR",
                 "Hillshade_9am","Hillshade_non","Hillshade_3pm","HDTFP","Cover")


covtype1$Cover=as.character(covtype1$Cover)

# Nettoyage 
covtype1= covtype1 %>% mutate(X=1:length(covtype1$Cover))
head(covtype1)
covtype1$Cover=covtype1$Cover %>%
              str_replace(pattern="1",replacement="Spruce_Fir") %>%
               str_replace("2","Lodgepole_Pine") %>%
                str_replace("3","Ponderosa_Pin")%>%
                 str_replace("4","Cottonwood_Willow") %>%
                  str_replace("5","Aspen") %>%
                   str_replace("6","Douglas_fir") %>%
                   str_replace("7","Krummholz") 
  
covtype1$Cover=as.factor(covtype1$Cover)

summary(covtype1)


head(covtype2)
names(covtype2)=paste0("Wilderness","1":"4")
covtype2= covtype2 %>% mutate(X=1:length(covtype1$Cover))
 
covtype2= covtype2 %>%
            gather(key=Wilderness,value=result,-X) %>%
             group_by(X) %>%
              filter(result==1)%>%
               ungroup()%>%
                arrange(X)
 
  covtype2$Wilderness= covtype2$Wilderness %>%
                        str_replace(pattern="Wilderness1",replacement="Rawah") %>%
                         str_replace("Wilderness2","Neota") %>%
                          str_replace("Wilderness3","Comanche") %>%
                           str_replace("Wilderness4","Cache_la_poudre")

covtype2$Wilderness=as.factor(covtype2$Wilderness)



names(covtype3)=paste0("X","1":"40")
covtype3= covtype3 %>% mutate(X=1:length(covtype1$Cover))
covtype3= covtype3 %>%
           group_by(X) %>%
            gather(key=Soil_type,value=result,-X) %>% 
             filter(result==1)%>%
              ungroup()%>%
               arrange(X)


covtype3$Soil_type=as.factor(covtype3$Soil_type)     


Covtype= covtype1 %>%
           left_join(covtype2,by="X") %>%
            subset(select=-result)%>%
             left_join(covtype3,by="X") %>%
              subset(select=-c(result,X))


#Normalisation des variables quantitatives

typeof(Covtype$Elevation)
normalysed=function(x){
  return((x-min(x))/(max(x)-min(x)))
}
 Covtype_norm= Covtype %>%
              subset(select=-c(Cover,Wilderness,Soil_type))%>%
               lapply(normalysed)%>%
                as.data.frame()%>%
                 mutate(Cover=Covtype$Cover,
                  Wilderness=Covtype$Wilderness,
                   Soil_type=Covtype$Soil_type)
# KNN
head(Covtype_norm)
Covtype_norm_quant=Covtype_norm %>%
                    subset(select=-c(Wilderness,Soil_type)) %>%
                     mutate(X=1:length(covtype1$Cover)) %>%
                      mutate(type=ifelse(X<=11340,"train","test")) %>%
                       subset(select=-X)

train_cov=Covtype_norm_quant %>%
            filter(type=="train")%>%
             subset(select=-type)

Cover_type=train_cov$Cover


test_cov= Covtype_norm_quant %>%
            filter(type=="test") %>%
              subset(select=-type)
Cover_type_actual=test_cov$Cover

# pour égale à 1 par defaut              
 k_1_pred=knn(train = train_cov[-11],test=test_cov[-11],cl=Cover_type)
k_7_pred=knn(train=train_cov[-11],test=test_cov[-11],cl=Cover_type,k=7)
k_15_pred=knn(train=train_cov[-11],test=test_cov[-11],cl=Cover_type,k=7)

Performance k=1 
perf_k1=mean(Cover_type_actual==k_1_pred)
perf_k1

 perfomance k=7 
perf_k7=mean(Cover_type_actual==k_7_pred)
perf_k7
 Performance k=15
 perf_k15=mean(Cover_type_actual==k_15_pred)
 perf_k15
 
 
 # Naive Bayes

cov_bayes1=naive_bayes(Cover~.,data=train_cov)
cov_bayes2=naive_bayes(Cover~.,data=train_cov, laplace = 1)
cov_bayes3=naive_bayes(Cover~.,data=train_cov, laplace = 2)
cov_bayes4=naive_bayes(Cover~.,data=train_cov, laplace = 20)

cov_pred_bayes1 =predict(cov_bayes,test_cov[-11])
cov_pred_bayes2 =predict(cov_bayes2,test_cov[-11])
cov_pred_bayes3 =predict(cov_bayes3,test_cov[-11])
cov_pred_bayes4 =predict(cov_bayes4,test_cov[-11])

print(cov_bayes)
Bayes=mean(cov_pred_bayes==Cover_type_actual)
Bayes_l1=mean(cov_pred_bayes2==Cover_type_actual)
Bayes_l2=mean(cov_pred_bayes3==Cover_type_actual)
Bayes_l3=mean(cov_pred_bayes4==Cover_type_actual)
Bayes
Bayes_l1
Bayes_l2
Bayes_l3

 # Modéle Logistic
 myControl1 <- trainControl(
          method = "cv",  #Cross validation
            number =10, #Coupure 10
             summaryFunction = multiClassSummary, #Logistic multinomial
               classProbs = T, # IMPORTANT!
                 verboseIter = TRUE
                     )
model_log <- train(Cover~.,data=train_cov,
  method = "glmnet",
  trControl =myControl1
)
 
 head(model_log[["results"]][,1:8])
p_Y_log=predict(model_log,test_cov[-13],type="raw")
perf_log1=confusionMatrix(p_Y_log,test_cov$Cover)
perf_log1

 #Random Forest
model_forest <- train(Cover~.,
    tuneLength = 3, #le nombre de variable à choisir aléatoirement
            #cela donne des predictions plus precise mais prend plus de temp
      data = train_cov, method ="ranger", #Ranger alternatif plus rapide pour RD
       trControl = trainControl(method = "cv", number = 5, #Cross-Valid avec 5 coupure
                           verboseIter = TRUE)
)
plot(model_forest)

p_forest=predict(model_forest,test_cov[-13],type="raw")
confusionMatrix(p_forest,test_cov$Cover)

Bibliographie

\(\bullet\) http://www.aliquote.org/cours/2012_biomed/06-logistic.pdf

\(\bullet\) https://www.math.univ-toulouse.fr/~besse/Wikistat/pdf/st-m-app-rlogit.pdf

\(\bullet\) https://eric.univ-lyon2.fr/~ricco/cours/cours_regression_logistique.html

\(\bullet\) https://eric.univ-lyon2.fr/~ricco/cours/slides/roc_curve.pdf

\(\bullet\) https://docs.microsoft.com/fr-fr/sql/analysis-services/data-mining/cross-validation-analysis-services-data-mining

\(\bullet\) http://larmarange.github.io/analyse-R/regression-logistique.html

\(\bullet\) http://www.math.univ-angers.fr/~labatte/enseignement%20UFR/master%20MIM/classificationsupervisee.pdf

\(\bullet\) https://eric.univ-lyon2.fr/~ricco/tanagra/fichiers/fr_Tanagra_Naive_Bayes_Classifier_Explained.pdf

\(\bullet\) https://www.xlstat.com/fr/solutions/fonctionnalites/classifieur-bayesien-naif

\(\bullet\) http://rformining.blogspot.fr/2013/08/classifieur-naif-bayesien_5.html

\(\bullet\) https://www.deleze.name/marcel/culture/probabilites/bayes/bayes.pdf

\(\bullet\) http://mrmint.fr/naive-bayes-classifier

\(\bullet\) https://saravananthirumuruganathan.wordpress.com/2010/05/17/a-detailed-introduction-to-k-nearest-neighbor-knn-algorithm/

\(\bullet\) http://exorciste2.free.fr/Amine/nouveau%20dossier/MOAB/coursDM_KNN.pdf

\(\bullet\) https://wizardforcel.gitbooks.io/dm-algo-top10/content/knn.html

\(\bullet\) https://hal.inria.fr/inria-00494814/document

\(\bullet\) http://blog.csdn.net/sanqima/article/details/51276640

\(\bullet\) http://shujuren.org/article/168.html