Classifiers de Réseau Bayésien

8.1 Introduction

Considérons U = {x1, . . . , xn}, n ≥ 1 comme un ensemble de variables.  Un réseau Bayésien B sur un ensemble de variables U est une structure de réseau BS, ce qui correspond à un graphique acyclique dirigé (DAG) sur U et un ensemble de tableaux de probabilities BP= {p(u|pa(u))|u ∈ U} quand pa(U) est l’ensemble des parents de u dans BS. Un réseau Bayésien représente une probabilité de distributions P(U)= Qu∈U p(u|pa(u)).

Ci-dessous, une représentation de réseau Bayésien pour les variables dans l’ensemble de données iris. Notez que les liens entre les classes de nœuds, les longueurs de petals (petallength) et largeurs de petals (petalwidth ne forment pas un cycle dirigé, donc le graphe est un DAG propre.

Cette image ne montre que la structure du réseau de Bayes, mais pour chacun des nœuds, une distribution de probabilité du nœud donné, ses parents sont spécifiés également. Par exemple, dans le réseau Bayes ci-dessous, il y a une distribution conditionnelle pour les longueurs de petals correspondants à la valeur des classes. Puisqu’une classe n’a pas de parents, il y a une distribution exhaustive pour sepalwidth.

 

Hypothèses de base

 

La tâche de classification consiste à classifier une variable y=x0 appelée variable de classe étant donné un ensemble de variables x=x1 … xn, appelé variables d’attribut. Un classifier h: x → y est une fonction qui cartographie un cas de x à une valeur de y.

Le classifier est appris à partir d’un ensemble de données D c’est-à-dire des échantillons de (x, y). La tâche d’apprentissage consiste à trouver un réseau Bayésien approprié pour un ensemble de données D sur U. Tous les algorithms de réseau de Bayes implémentés dans Weka reposent sur les suppositions suivantes concernant les ensembles de données :

  • Toutes les variables sont des variables discrètes limitées. Si vous avez un ensemble de données avec des variables continues, vous pouvez utiliser le filter suivant pour les discrétiser : weka.filters.unsupervised.attribut.Discretize

Aucun des cas n’a de valeurs manquantes. S’il existe des valeurs manquantes dans l’ensemble de données, les valeurs sont remplies en utilisant le filter suivant : weka.filtres.unsupervised.attribut.ReplaceMissingValues

La première étape effectuée par buildClassieifer est de vérifier si les ensembles de données répondent à ces hypothèses. Si tel n’est pas le cas, l’ensemble de données est filter automatiquement est un message d’alerte est écrit au STDERR.1Inference algorithm.

Pour utiliser un réseau Bayésien en tant que Classifier, on calcule simplement argmaxyP(y|x) en utilisant la distribution P(U) représenté dans le réseau Bayésien. Maintenant, notez que P(y|x) = P(U)/P(x) ∝ P(U) = Y u∈U p(u|pa(u)) (8.1). Et puisque toutes les variables dans x sont connues, aucune déduction compliquée n’est nécessaire, il suffit de calculer (8.1) pour toutes les valeurs e classes.

 

Apprendre les algorithmes

 

La nature double d’un réseau Bayésien permet d’apprendre un réseau Bayésien en un processus de deux étapes consistant en une division naturelle : d’abord apprendre la structure du réseau, puis apprendre les tables de probabilité. Il y a plusieurs approches de l’apprentissage de la structure et dans Weka, la distinction est faite entre les zones suivantes :

1 S’il y a des valeurs manquantes dans les données test, mais pas dans les données de training, les valeurs sont remplies dans les données test par un filtre ReplaceMissingValues fondé sur les données de training.

  • Local score metrics : Apprendre une structure de réseau BS peut être considéré comme un problème d’optimisation là où l’évaluation de la qualité de la structure d’un réseau à partir de données de training Q(BS|D) nécessite d’être maximisée. L’évaluation de la qualité peut se fonder sur une approche Bayésienne, une description de longueur minimum, des informations et d’autres critères. Ces measures ont la propriété pratique de permettre au score du réseau entier d’être compose comme étant la somme (ou le produit) des scores des nœuds individuels. Ceci permet un scoring local et par des méthodes de recherches locales.
  • Conditional independence tests : ces méthodes découlent principalement d’un objectif, à savoir découvrir la structure causale. L’hypothèse est qu’il existe un réseau représentant exactement les indépendances dans la distribution qui ont généré les données. Puis, elle vérifie si une independence (conditionnelle) peut être identifiée dans les données entre deux variables, et qu’il n’y a pas de flèche entre ces deux variables. Une fois que les emplacements des liens (edges) sont identifies, la direction des liens est assignée à chacun de manière à ce que les dépendances entre les données soient correctement présentées.
  • Global score metrics : Une manière naturelle de mesurer comment un réseau Bayésien marche sur un ensemble de données précis est de prédire sa performance future en estimant les fonctionnalités attendues, comme par exemple la finesse d’une classification. La validation croisée fournit une méthode d’évaluation pour faciliter cette opération en divisant les données de manière répétée dans les ensembles de training et de validation. Une structure de réseau Bayésien peut être évalué en estimant les paramètres à partir de l’ensemble de training et la performance du réseau Bayésien qui en résulte et qui a été détermine à partir de l’ensemble de validation. La performance moyenne du réseau Bayésien sur les ensembles de validation fournit un outil de mesure de la qualité du réseau.

La validation croisée diffère des mesures de scoring local dans le fait que la qualité d’une structure de réseau ne peut bien souvent pas être décomposée dans les scores des nœuds individuels. Donc, le réseau entier doit être pris considération de manière à déterminer le score.

  • Fixed structure : finalement, il n’y a que quelques méthodes si bien qu’une structure peut être fixée, par exemple, en la lisant a partir d’un WML BIF file. Pour chacune de ces zones, différents algorithms de recherche sont implémentés dans Weka, comme hill climbing, simulated annealing et recherche tabu.

Une fois qu’un bon réseau a été identifié, les tableaux de probabilité conditionnelle pour chacune des variables peuvent être estimés. Vous pouvez choisir un classifier de réseau Bayes en cliquant sur le bouton Choose du classifier dans l’explorer Weka, l’experimenter ou le flux de connaissance (knowledge flow) et trouver BayesNet sous le package weka.classifiers.bayes (voir ci-dessous).

 

Le classifier de réseau Bayes dispose des options suivantes :

L’option BIFFile peut être utilisée pour spécifier un réseau de Bayes stocké sous forme de fichier au format BIF. Quand la méthode toString() est appelée après le learning du réseau de Bayes, les statistiques supplémentaires (comme les arcs supplémentaires ou les arcs manquants) sont imprimés pour comparer le réseau appris avec celui du dossier.

L’option searchAlgorithm peut être utilisée pour sélectionner un algorithme d’apprentissage de structure et spécifier ses options.

L’option estimator put être utilisée pour sélectionner la méthode d’estimation des distributions de probabilité conditionnelle (Section 8.6).

En paramétrant l’option useAdTree sur vrai (true), les calculs sont effectués en utilisant l’algorithme ADTree de Moore. Puisque que je n’ai pas constaté beaucoup d’améliorations pour les petits ensembles de données, elle est désélectionnée par défaut. Notez que l’algorithme ADTree est différent de l’algorithme ADTree classifier issu de weka.classifiers.tree.ADTree. L’option debug n’a aucun effet.


8.2 Apprentissage de la structure basé sur le score local

Distinguez les mesures de score (score metrics ; Section 2.1) et les algorithmes de recherche (search algorithms ; Section 2.2). Un apprentissage de la structure basée sur le score local peut être sélectionné en en choisissant  un dans le package weka.classifiers.bayes.net.search.local.

Les algorithms bases sur le score local ont les options suivantes en commun : initAsNaiveBayes s’il est sélectionné comme vrai (true ; défaut), la structure de réseau initiale utilisée pour commencer  the traversal of the search space est une structure de réseau de Naïve Bayes.

Ceci est une structure avec de flèches point de la variable de classe vers chacune des variables d’attributs. S’il est paramétré comme faux (false), une structure de réseau vide sera utilisée (c’est-à-dire, sans flèche du tout). markovBlanketClassifier (faux par défaut), s’il est paramétré comme vrai (true), à la fin de la transversale d’espace de recherche, une méthode heuristique est utilisée pour s’assurer que chacun des attributs se trouvent dans la couverture Markov du nœud de classifier. Si un nœud se trouve déjà dans la couverture Markov (c’est-à-dire, qu’il est un parent, un enfant ou un membre de la famille d du nœud de classifier) rien ne se passé, sinon, une flèche est ajoutée. S’il est paramétré sur faux (false), aucune flèche de ce type n’est ajoutée.

scoreType détermine la mesure du score utilisée (voir la section 2.1 pour de plus amples détails). Actuellement, K2, BDe, AIC, Entropy et MDL sont implémentés. maxNrOfParents est un lien supérieur sur le nombre de parents de chacun des nœuds dans la structure de réseau apprise.

8.2.1 Mesure du score local (Local score metrics)

Nous utilisons les conventions suivantes pour identifier les comptes dans la base de données D et une structure BS de réseau. Imaginons que ri(1≤ i ≤ n) soit la cardinalité de xi. Nous utilisons qi pour dénoter la cardinalité de l’ensemble parent de xi dans BS, c’est-à- dire le nombre de valeurs différentes avec lesquelles les parents de xi peuvent être instanciées. Donc qi peut être calculé en tant que produit des cardinalités des nœuds dans pa(xi), qi= Qxj∈pa(xi) rj.

Notez que pa(xi) = ∅ implique qi = 1. Nous utilisons Nij (1 ≤ i ≤ n, 1 ≤ j ≤ qi) pour dénoter le nombre d’enregistrements dans D pour lesquels pa(xi) prend sa valeur jth. On utilise Nijk (1 ≤ i ≤ n, 1 ≤ j ≤ qi, 1 ≤ k ≤ ri) pour dénoter le nombre d’enregistrements dans D pour lesquels pa(xi) prend sa valeur jth et pour lesquels xi prend sa valeur kth. Donc, Nij = Pri

k=1 Nijk. On utilise N pour dénoter le nombre d’enregistrements dans D. Définissons la mesure entropy H(BS,D) d’une structure de réseau et la base de données comme étant :

H(BS,D) = −N

n

X

i=1

qi

X

j=1

ri

X

k=1

Nijk

N

log

Nijk

Nij

(8.2)

Et le nombre de paramètres K comme étant :

K =

n

X

i=1

(ri − 1) · qi (8.3)

AIC metric The AIC metric QAIC(BS,D) d’une structure BS de réseau Bayésien pour une base de données D est QAIC(BS,D) = H(BS,D) + K (8.4)

Un terme P(BS) peut être ajouté représentant des informations antérieures aux structures de réseau, mais va être ignore dans l’implémentation Weka pour un souci de simplicité.

 

MDL metric – a mesure de longueur de description minimale QMDL (BS,D) = H(BS,D) +

K

2

LogN (8,5)

 

Bayesian metric – la mesure Bayésienne d’une structure BD de réseau Bayésien pour une base de données D est

n

Y

i=0

qi

Y

j=1

(N′

ij )

(N′

ij + Nij)

ri

Y

k=1

(N′

ijk + Nijk)

(N′

ijk)

quand P(BS) est antérieur à la structure du réseau (considéré comme une constant d’où le fait qu’il soit ignoré dans l’implémentation Weka) et   (.) la fonction gamma. N′ij and N′ijk représentent les choix d’antécédents sur les comptes restreints par N′

ij = Pri

k=1 N′

ijk. Avec

N′

ijk = 1 (et par conséquent N′

ij = ri), on obtient la mesure K2 [18]

QK2(BS,D) = P(BS)

n

Y

i=0

qi

Y

j=1

(ri − 1)!

(ri − 1 + Nij)!

ri

Y

k=1

Nijk!

Avec N′

ijk = 1/ri · qi (et par conséquent N′

ij = 1/qi), on obtient la mesure BDe [21].

 

8.2.2 Les algorithmes de recherche

Les algorithms de recherché suivants sont implémentés pour des mesures locales de scores.

  • K2 : hill climbing ajoute des arcs avec un ordre fixe de variables. Option spécifique : randomOrder, si paramétrée comme vraie (true), une organisation aléatoire des nœuds se fait dès le commencement de la recherche. Si paramétrée comme fausse (false ; par défaut), l’ordre de l’ensemble de données est utilisé. La seule exception, dans les deux cas s’applique lorsque le réseau initial est un réseau Naïve Bayes (initAsNaiveBayes paramétré comme vrai), la variable de classe est place au début de l’organisation
  • Hill Climbing : hill climbing ajoutant et effaçant les arcs n’ayant pas de variables d’organisation fixe. useArcReversal si sélectionné comme vrai (true), les renversements d’arcs sont pris en considération lors de la détermination de la prochaine étape à effectuer.
  • Repeated Hill Climber : commence avec un réseau généré au hasard et appliqué ensuite le hill climber pour atteindre un optimum local. Le meilleur réseau trouvé est retourné. Option useArcReversal comme pour Hill Climber.
  • LAGD Hill Climbing fait un hill climbing avec une vision en avant sur un ensemble limité des meilleures étapes de scoring implémenté(es) par Manuel Neubach. Le nombre d’étapes de vision en avant et le nombre d’étapes considéré pour la vision en avant sont configurables.
  • TAN : Tree Augmented Naïve Bayes là où une arborescence est formée en calculant l’arborescence de l’intervalle de poids maximum en utilisant l’algorithm Chow et liu. Pas d’options spécifiques.
  • Simulated annealing : en utilisant ajouter et effacer des flèches. L’algorithme génère  au hasard un réseau B’S candidat proche du réseau actuel BS. Il accepte le réseau si celui-ci est meilleur que le réseau actuel, c’est-à-dire Q(B’S,D)>Q(BS,D). Sinon, Il accepte le candidat selon la probabilité

etx (Q(B′S,D)−Q(BS,D))

là où ti est la température au niveau de l’itération i. La température commence à t0 et décroît peu à peu avec chacune des itérations.

Options spécifiques :

TStart commence la température à t0.

delta est le facteurδ utilisé pour mettre à jour la température, donc ti+1 = ti · δ.

Runs correspond au nombre d’itérations pour traverse l’espace de recherché.

seed est la valeur d’initialisation pour le générateur de nombre au hasard

  • Tabu search : en utilisant ajouter et effacer des flèches. Tabu search effectue du hill climbing jusqu’à qu’il atteigne un optimum local. Ensuite il fait un pas vers le moins mauvais des candidats du voisinage. Cependant, il ne prend pas en compte les points du voisinage qu’il vient de visiter au cours de ses derniers pas tl (tl steps). Ces pas (steps) sont stockés dans une liste intitulée “tabu-list”.

Options spécifiques :

Runs correspond au nombre d’itérations utilisées pour traverse l’espace de recherché.

TabuList est la longueur tl de la liste tabu.

 

  • Genetic search : appliqué une simple implementation d’un algorithme de recherché génétique à un apprentissage de structure de réseau. Une structure de réseau Bayes est représenté par une gamme de n.n bits (n = le nombre de nœuds), là où bit i ·n+j représente s’il y a une flèche du nœud j → i.

 

Options spécifiques :

populationSize correspond à la taille de la population sélectionnée dans chaque génération.

descendantPopulationSize correspond au nombre de progénitures générées à chaque génération.

Runs est le nombre de générations à générer.

Seed est la valeur d’initialisation pour le générateur de nombres au hasard.

UseMutation flag pour indiquer si une mutation devrait être utilisée ou non. La mutation s’effectue en ajoutant ou en supprimant au hasard un arc unique.

UseCrossOver flag pour indiquer si une opération de cross-over (croisement) doit être utilisé ou non. Cross Over est appliqué en prenant au hasard un index k dans la représentation bit et en sélectionnant les premiers bits k de l’un et les restes d’une autre structure de réseau dans la population. Au moins l’un des useMutation et useCrossOver doit être paramétré sur vrai (true). Utiliser TournamentSelection quand paramétré sur faux (false), les réseaux les plus performants sont sélectionnés à partir des populations descendantes pour former la population de la génération suivante. Quand paramétré sur vrai (true), une sélection  « en tournoi » est utilisée. La sélection en tournoi choisit deux individus au sein de la population descendante et choisit le plus pertinent (performant).


8.3. Apprentissage de structure basée sur les tests d’indépendance conditionnelle

Les tests d’indépendance conditionnels dans Weka sont légèrement différents des tests standards décrits dans la littérature. Pour tester si les variables x et y son indépendantes conditionnellement à partir d’un ensemble de variables z donné, une structure en réseau avec des flèches

∀z∈Zz → y est compare avec un autre qui contient des flèches  {x → y} ∪ ∀z∈Zz → y. Un test est effectué en utilisant n’importe quelle des mesures de scoring décrites dans la section 2.1.

A ce moment-là, seuls les algorithmes  ICS et CI sont implémentés. L’algorithme ICS effectue deux étapes, la première détermine une ossature (le graph sans orientation avec des « liens si la structure du réseau contient une flèche) et la seconde d’orienter tous les liens dans l’ossature pour obtenir un DAG.

En commençant avec un graphique entier non orienté, nous essayons de trouver des indépendances conditionnelles hx, y|Zi dans les données. Pour chaque paire de nœuds x, y, on considère des ensembles Z ayant pour origine le point cardinal 0, puis 1 et jusqu’à un maximum défini par l’utilisateur. De plus, l’ensemble Z est un sous-ensemble de nœuds voisins à la fois de x et y. Si une indépendance est identifiée, le lien entre x et y est ôté de l’ossature. La première étape dans l’orientation des flèches consiste à vérifier chaque configuration x-z-y quand x et y ne sont pas connectés au sein de l’ossature si z appartient à l’ensemble Z de variables qui justifient d’effacer le lien entre x et y (caché dans la première étape). Si z n’est pas dans Z, on peut assigner des orientations  x → z ← y.

Finalement, un ensemble de règles graphiques est appliqué pour orienter les flèches restantes.

Règle : i->j–k & i-/-k => j->k

Règle 2: i->j->k & i–k => i->k

Règle 3 m

/|\

i | k => m->j

i->j<-k \|/

j

Règle 4 m

/ \

i—k => i->m & k->m

i->j \ /

j

Règle 5 : Si aucun lien n’est orienté, puis prennent une orientation au hasard (la première que nous prouvons trouver).

L’algorithme ICS est disponible avec les options suivantes.

Puisque l’algorithme ICS consiste à retrouver la structure causale, au lieu de trouver le classifier optimal, la correction de la couverture de Markov peut être effectuée par la suite.

Options spécifiques : l’option maxCardinality détermine le sous ensemble le plus large de Z qui doit être considéré dans les tests d’indépendance conditionnels hx, y|Zi. L’option score Type est utilisée pour sélectionner la mesure utilisée pour le scoring.


8.4 Apprentissage/éducation de structure basée sur la mesure de score globale

Les options communes des algorithmes basés sur la validation croisée sont initAsNaiveBayes, markovBlanketClassifier and maxNrOfParents.

De plus, pour chacun des algorithmes basés sur la validation croisée, le CVType peut être choisi à partir des éléments suivants :

  • En laisser un sans validation croisée (loo-cv) sélectionne les ensembles d’apprentissage m=N en prenant simplement l’ensemble de données D et en enlevant l’enregistrement ith pour l’ensemble de training Dtj.L’ensemble de validation consiste en un seul enregistrement ith. Loo-cv ne produit pas toujours d’estimations précises de la performance.
  • La validation croisée K-fold (k-fold cv) divise les données D dans m équivaut à peu près aux éléments D1,…, Dm. L’ensemble d’entraînement Dti est obtenu en retirant l’élément Di de D. Les valeurs typiques de m sont 5, 10 et 20. Avec m=N, la validation croisée k-fold devient loo-cv.
  • La validation croisée cumulative (cumulative cv) commence avec un ensemble de données vides et ajoute des exemples item par item à partir de D. A chaque fois, un item est ajouté. L’item suivant à ajouter est classifié en utilisant le réseau de Bayes en cours. Finalement, le useProb flag indique si la précision du classifier devrait être estimée en utilisant la perte zéro-un (si paramétré sur faux) ou en utilisant la probabilité de la classe.

Les algorithmes de recherche suivants sont implémentés : K2, HillClimbing, Repeat-

edHillClimber, TAN, Tabu Search, Simulated Annealing and Genetic Search.


8.5 “L’apprentissage” des structures fixes

L’étape d’apprentissage de structure peut être sautée en sélectionnant une structure de réseau fixe. Il y a deux manières d’obtenir une structure fixe : par le biais d’un réseau naïf de Bayes, ou en le lisant dans un dossier au format  XML BIF.


8.6 L’apprentissage de distribution

Une fois que l’apprentissage de la structure du réseau est terminée, vous pouvez choisir comment procéder à l’apprentissage les tables de probabilité en sélectionnant une classe dans l’ensemble weka.classifiers.bayes.net.estimate.

La classe SimpleEstimator produit des estimations directement des probabilités conditionnelles, à savoir

P(xi = k|pa(xi) = j) =

Nijk + N′

ijk

Nij + N′

ij

quand N’ijks est le paramètre alpha susceptible d’être installé et correspond à 0.5 par défaut. Avec alpha=0, on obtient la plus grande probabilité d’estimations.

Avec  BMAEstimator, on obtient des estimations pour les tables conditionnelles de probabilités basées sur le modèle de Bayes permettant d’obtenir la moyenne de toutes les structures de réseaux correspondant à des sous-structures du réseau appris. Ceci est possible en estimant la table de probabilité conditionnelle d’un nœud xi, ses parents (xi) correspondant à la moyenne d toutes les tables de probabilité conditionnelle de xi, compte tenu des sous-ensembles de pa(xi). Le poids de la répartition P(xi|S) avec S ⊆ pa(xi) utilisée est proportionnel à la contribution de la structure de réseau ∀y∈Sy → xi à soit la mesure BDe ou la mesure K2 (paramétrés respectivement sur faux et vrai).


8.7 Fonctionnement à partir de la ligne de commande

Voici les options de la ligne e commande de BayesNet.

Options générales :

-t <nom du dossier d’apprentissage> installe le dossier d’apprentissage.

-T <nom du dossier test> installe le dossier test. S’il reste manquant, une validation croisée sera effectuée sur les données d’apprentissage.

-c <index de classe> installe l’index de l’attribut de classe (par défaut, le dernier)

-x <nombre de couches> (folds) installe le nombre de couches pour la validation croisée (par défaut : 10)

-No-cv n’effectue aucune validation croisée

-Split-percentage <pourcentage> installe le pourcentage pour la division train/set (apprentissage/test), par exemple 66

-Preserve-order conserve l’ordre de la division

-S <nombre source au hasard> installe le nombre source au hasard pour la validation croisée ou la division (par défaut : 1)

-m<nom du dossier avec matrice de coût> installe le fichier avec une matrice de coût

-l<nom du dossier en entrée> installe un dossier modèle en entrée. Dans le cas où le nom de dossier se termine en ‘.xml ’, les options ont chargées à partie du dossier XML

-d<nom du dossier en sortie> installe des modèles de dossier en sortie. Dans le cas où le nom du dossier se termine en ‘.xml’, seules les options sont conservées dans le dossier XML, et non le modèle.

-v ne génère aucune statistique pour les données d’apprentissage.

-o génère des statistiques seulement, et pas de classifier.

-i génère des statistiques pour la reconnaissance d’informations détaillées pour chacune des classes

-k génère des statistiques théoriques d’informations

-p <gamme d’attributs> ne génère que des prédictions pour des essais de test (ou les essais d’apprentissage si aucun essai test n’est fourni), ainsi que les attributs correspondants (0 pour aucun)

-distribution génère la répartition au lieu de la seule prédiction liée à l’option ‘-p’ (seulement dans les classes nominales).

-r ne génère qu’une répartition de la marge cumulative

-g génère la représentation graphique du classifier.

-xml filename | xml-string retrouve les options à partir des données XML au lieu de la ligne de commande.

Options spécifiques à weka.classifiers.bayes.BayesNet:

-D n’utilise pas de structure de données AD Tree

-B <dossier BIF> dossier BIF de comparaison

-Q weka.classifiers.bayes.net.search.SearchAlgorithme Search algorithm

-E weka.classifiers.bayes.net.estimate.SimpleEstimator Estimator algorithm

L’option d’algorithme de recherché -Q et l’option d’estimateur -E sont obligatoires.

Notez qu’il est important que l’option -E devrait être utilisée après l’option -Q. Des options supplémentaires    peuvent être effectuées par l’algorithme de recherche et l’estimateur après un nom de classe spécifié par ‘-’.

 

Par exemple :

Java weka.classifiers.bayes.BayesNet-t iris.arff-D\

-Q weka.classifiers.bayes.net.estimate.SimpleEstimator— – A 1.0

 

Vue d’ensemble sur les options d’algorithmes de recherche.

  • Weka.classifiers.bayes.net.search.local GeneticSearch

- L <integer> taille de population

- A <integer> taille de la population descendante

- U <integer> nombre d’essais

- M Use Mutation  (paramétré par défaut sur vrai)

- C Utilise le croisement (paramétré par défaut sur vrai)

- O Utilise la sélection par tournoi (vrai) ou la sous- population maximum (faux) (sur faux par défaut)

- R <seed> source de nombre au hasard

- mbc applique une correction de couverture de Markov à la structure de réseau, après l’apprentissage d’une structure de réseau. Ceci assure que tous les nœuds du réseau fassent partie du nœud du classifier.

-S [BAYES|MDL|ENTROPY|AIC|CROSS_CLASSIC|CROSS_BAYES]

Score type (BAYES, BDeu, MDL, ENTROPY and AIC)

• weka.classifiers.bayes.net.search.local.HillClimber

-P <nr of parents> (nombre de parents)

-R utilise des opérations inverses en arc (faux par défaut)

-N La structure initiale est vide (contrairement à Naive Bayes)

-Mbc applique une couverture de Markov de correction la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

• weka.classifiers.bayes.net.search.local.K2

-N la structure initiale est vide (contrairement à Naive Bayes)

-P <nr of parents> Nombre maximum de parents

- R ordre au hasard (faux par défaut)

- mbc applique une couverture de Markov de correction à la structure de réseau, après enseignement d’une structure. Ceci permet que tous les nœuds du réseau fassent partie de la couverture de Markov du nœud du classifier.

• weka.classifiers.bayes.net.search.local.LAGDHillClimber

-L <nr of look ahead steps> Regarde en avant en profondeur

-G <nr of good opérations> Nombre d’opérations concluantes

-P <nr of parents>Nombre maximum de parents

-R utilise des opérations inverses en arc (faux par défaut)

- N La structure initiale est vide (au lieu de Naive Bayes)

- mbc applique une couverture de Markov de correction à la structure de réseau, après enseignement d’une structure. Ceci permet que tous les nœuds du réseau fassent partie de la couverture de Markov du nœud du classifier.

• weka.classifiers.bayes.net.search.local.RepeatedHillClimber

-U <integer> Nombre d’essais

-A <seed> Nombre source au hasard

-P <nr of parents> (nombre de parents)

-R utilise des opérations inverses en arc (faux par défaut)

-N La structure initiale est vide (contrairement à Naive Bayes)

-mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

• weka.classifiers.bayes.net.search.local.SimulatedAnnealing

-A <float> température de départ

-U <integer> Nombre d’essais

-D<float> température delta

-R <seed> Source de nombre au hasard

-mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

• weka.classifiers.bayes.net.search.local.TabuSearch

-L <integer> Longueur de la liste tabu

-U <integer> Nombre d’essais

-P <nr of parents> Nombre maximum de parents

-R utilise des opérations inverses en arc (faux par défaut)

-P <nr of parents> Nombre maximum de parents

- N La structure initiale est vide (contrairement de Naive Bayes)

- mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

• weka.classifiers.bayes.net.search.local.TAN

-mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

• weka.classifiers.bayes.net.search.ci.CISearchAlgorithm

-mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

• weka.classifiers.bayes.net.search.ci.ICSSearchAlgorithm

-cardinality <num> en déterminant si un lien existe, on effectue une recherche pour un ensemble Z qui sépare les nœuds. MaxCardinality détermine la taille maximale de l’ensemble Z. Ceci influe grandement sur la longueur de la recherche. (par défaut : 2)

- mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

• weka.classifiers.bayes.net.search.global.GeneticSearch

-L <integer> Taille de la population

-A <integer> Taille de la population descendante

-U <integer> Nombre d’essais

-M Utilise la mutation

- O utilise a sélection en tournoi -vrai)  ou la sous- population maximum (faux) (par défaut paramétré sur faux)

- R <seed> source de nombre au hasard

- mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

-S [LOO-CV|k-Fold-CV|Cumulative-CV] Score type (LOO-CV,k-Fold-CV,Cumulative-CV)

-Q Utilise le scoring par probabilité ou par scoring 0/1 (par défaut le scoring se fait selon les probabilités)

• weka.classifiers.bayes.net.search.global.HillClimber

-P <nr of parents> Nombre de parents maximum

-R utilise des opérations inverses en arc (faux par défaut)

- N La structure initiale est vide (contrairement à Naive Bayes)

- mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

• weka.classifiers.bayes.net.search.global.K2

- N La structure initiale est vide (contrairement à Naive Bayes)

- P <nr of parents> Nombre de parents maximum

- R ordre au hasard (par défaut sur faux)

- mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

-Q Utilise le scoring par probabilité ou par scoring 0/1 (par défaut le scoring se fait selon les probabilités)

• weka.classifiers.bayes.net.search.global.RepeatedHillClimber

-U <integer> Nombre d’essais

- A <seed> source de nombre au hasard

- P <nr of parents> Nombre de parents maximum

- R utilise des opérations inverses en arc (faux par défaut)

- N La structure initiale est vide (contrairement à Naive Bayes)

- mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

-Q Utilise le scoring par probabilité ou par scoring 0/1 (par défaut le scoring se fait selon les probabilités)

• weka.classifiers.bayes.net.search.global.SimulatedAnnealing

-A <float> Température de départ

-U <integer> nombre d’essais

-D <float> Température Delta

-R <seed> source de nombre au hasard

- mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

-Q Utilise le scoring par probabilité ou par scoring 0/1 (par défaut le scoring se fait selon les probabilités)

• weka.classifiers.bayes.net.search.global.TabuSearch

-L <integer> Longueur de la liste tabu

-U <integer> nombre d’essais

- P <nr of parents> Nombre de parents maximum

- R utilise des opérations inverses en arc (faux par défaut)

- N La structure initiale est vide (contrairement à Naive Bayes)

- mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

-Q Utilise le scoring par probabilité ou par scoring 0/1 (par défaut le scoring se fait selon les probabilités)

• weka.classifiers.bayes.net.search.global.TAN

- mbc applique une couverture de Markov de correction à la structure du réseau, après l’apprentissage de la structure de réseau. Ceci permet de s’assurer que les nœuds du réseau fassent partie de la couverture de Markov du nœud de classifier.

-Q Utilise le scoring par probabilité ou par scoring 0/1 (par défaut le scoring se fait selon les probabilités)

• weka.classifiers.bayes.net.search.fixed.FromFile

-B <BIF File> Nom du dossier contenant la structure du réseau au format BIF

• weka.classifiers.bayes.net.search.fixed.NaiveBayes

Pas d’options

Vue d’ensemble des options pour les estimateurs

• weka.classifiers.bayes.net.estimate.BayesNetEstimator

-A <alpha> Compte initial (alpha)

• weka.classifiers.bayes.net.estimate.BMAEstimator

-k2 lorsqu’il faut utiliser k2 tout d’abord

-A <alpha> Compte initial (alpha)

• weka.classifiers.bayes.net.estimate.SimpleEstimator

-A <alpha> Compte initial (alpha)

Générer des réseaux au hasard et des ensembles de données artificielles. 

Vous pouvez générer des réseaux Bayes au hasard et des ensembles de données en utilisant weka.classifiers.bayes.net.BayesNetGenerator

Les options sont :

-B Générer un réseau (et non des exemples)

-N <integer> nombre de nœuds

-A <integer> nombre d’arcs

-M <integer> Nombre d’exemples

-C <integer> Cardinalité des variables

-S <integer> Source du générateur de nombres au hasard

-F <file> Le dossier BIF à partir duquel obtenir la structure

La structure de réseau est générée en générant tout d’abord une arborescence de manière à s’assurer qu’il y a bel et bien un graphique connecté. Si des flèches supplémentaires sont indiquées, elles sont aoutées au hasard.


8.8 Inspecter les réseaux Bayésiens

Vous pouvez inspecter une partie des propriétés des réseaux Bayésiens ayant subi un apprentissage dans l’Explorer au format texte ainsi qu’au format graphique.

Réseaux Bayésiens en texte

Ci-dessous, vous allez trouver les éléments en sortie typiques pour une validation croisée à dix couches effectuée dans l’Explorer Weka avec les commentaires où les sorties sont spécifiques aux réseaux Bayésiens.

 

===Run information===

Schéma : weka.classifiers.bayes.BayesNet -D -B iris.xml -Q weka.classifiers.bayes.neOptions for BayesNet inclut les noms de classes pour l’apprenant ainsi que pour l’estimateur de répartition.

Relation iris-weka.filtres.unsupervised.attribut.Discretize- B2-M-1.0-Rfirst-last Instances: 150

Attributs: 5

sepallength

sepalwidth

petallength

petalwidth

class

Mode Test: Validation croisée à 10 couches

 

=== Classifier model (full training set) ===

===Modèle de classifier (ensemble complet d’apprentissage)===

Classifier de réseau de Bayes n’utilisant pas d’arborescence AD

Indication si l’algorithme d’arborescence AD  a été utilisée pour calculer les comptes des ensembles de données.

#attributs=5 #classindex=4

Cette ligne liste le nombre d’attribut s et le nombre de variables de classe pour lesquelles classifier a été entraîné.

Network structure / Structure de réseau (nœuds suivis de leurs parents

sepallength(2): class

sepalwidth(2): class

petallength(2): class sepallength

petalwidth(2): class petallength

class(3):

Cette liste spécifie la structure du réseau. Chacune des variables est suivie d’une liste de parents, de manière à ce que la variable petallength ait les parents sepallength et classe tandis que la classe n’a aucun parent. Le nombre entre accolades est la cardinalité de la variable. Ceci montre que dans l’ensemble de données (dataset) iris il y a trois variables de classes. Toutes les autres variables sont rendues binaires en les soumettant au filtre de discrétisation.

LogScore Bayes: -374.9942769685747

LogScore BDeu: -351.85811477631626

LogScore MDL: -416.86897021246466

LogScore ENTROPY: -366.76261727150217

LogScore AIC: -386.76261727150217

Ces lignes listent le score de la structure du réseau pour différentes méthodes de scoring.

Si un fichier BIF a été spécifié, les deux lignes suivantes seront produites (si aucun fichier de ce type n’a été spécifié, aucune information ne sera imprimée)

Missing: 0 Extra: 2 Reversed: 0

Divergence: -0.0719759699700729

Dans ce cs, le réseau qui a été éduqué a été comparé à un fichier iris.xml qui contenait une structure de réseau naive Bayes. Le nombre figurant après « Missing » est le nombre d’arcs qui figuraient dans le réseau dans le dossier qui n’est pas comprise par la structure learner (l’éducateur de structure). Notez qu’un arc inversé n’est pas considéré comme Missing. Le nombre situé après « Extra » est le nombre d’arcs dans le réseau éduqué qui ne le sont pas.

Enfin, la divergence entre la distribution de réseau du fichier et la structure éduquée est reportée. Ce nombre est calculé n énumérant toutes les instanciations de toutes les variables. Il est possible que cette opération nécessite du temps dans le cas où le calcul des divergences s’applique à de larges réseaux

Le reste des sorties sont des sorties standards et ce pour tous les classifiers.

Le temps pris pour construire un modèle : 0 ;01 secondes

=== Stratified cross-validation ===

=== Summary ===

Correctly Classified Instances 116 77.3333 %

Incorrectly Classified Instances 34 22.6667 %

etc.

Les réseaux Bayésiens dans GUI

Pour  faire apparaître la structure graphique, cliquer droit sur le BayesNet approprié dans la liste des résultats de l’Explorer. Un menu apparaît dans lequel il est possible de sélectionner « Visualize graph ».

Le réseau Bayes est se dessine automatiquement grâce à un algorithme de dessin implémenté par Ashraf Kibriya.

Lorsque l’utilisateur passe sa souris sur un nœud, le nœud est mis en lumière et tous ses enfants sont mis en lumière également, de façon à ce qu’il soit plus facile d’identifier la relation entre les nœuds même dans des graphes très denses.

Saving Bayes nets. Il est possible de sauvegarder le réseau Bayes dans le graph visualizer. L’utilisateur a le choix de le sauvegarder au format XML BIF ou au format « dot ». Sélectionner le bouton floppy et une boîte de dialogue de sauvegarde des fichiers apparaît et permet à l’utilisateur de sélectionner le nom du fichier et son format.

Zoomer dans le Graph. Le visualizer a deux boutons pour zoomer et dézoomer. Le zoom exact souhaité peut également être entré dans l’espace d’entrée de pourcentage de zoom. Cliquer sur entrer pour redessiner le graph au zoom désiré.

Les options de dessin (Graph Drawing options). Cliquer sur le bouton « extra controls » pour faire apparaître d’options supplémentaires qui contrôlent les directions des nœuds.

Le Layout Type détermine l’algorithme à appliquer pour placer les nœuds

La LayoutMethod détermine dans quelles directions les nœuds sont considérés.

La touche Edge Concentration  permet aux lignes (edges) pour être partiellement fusionnées.

La Custom Node Size peut être utilisée pour passer outre la taille prédéfinie automatiquement des nœuds.

Quand l’utilisateur clique sur l’un des nœuds figurant dans un réseau Bayesien, une fenêtre apparaît comprenant un tableau de probabilité du nœud choisi. La partie gauche montre les attributs parents et liste les valeurs respectives des parents, le côté droit montre la probabilité du nœud cliqué conditionnée par les valeurs des parents listées à gauche.

Ainsi, le graph visualizer permet à l’utilisateur d’étudier à la fois la structure de réseau et les tableaux de probabilité.


8.9 Le réseau Bayésien GUI

L’éditeur de réseau Bayésien est une application indépendante avec les fonctionnalités suivantes :

  • Edit Bayesian network = fonctionnalité totalement manuelle comprenant une un ensemble undo/redo (défaire/refaire), cut/copy/paste (couper/copier/coller) et aide à la présentation.
  • Eduquer un réseau Bayésien à partir de données utilisant les algorithmes d’apprentissage de Weka
  • Edit structure manuellement et éduquer les tableaux de probabilités conditionnelles en utilisant les algorithmes d’apprentissage de Weka.
  • Générer des ensembles de données à partir d’un réseau Bayésien
  • Inférence (en utilisant la méthode de jonction d’arbres) d’évidences à travers le réseau, en changeant de manière interactive les valeurs de nœuds.
  • Visualiser les clicks dans l’arbre de jonction
  • La  touche Accelerator correspond aux opérations communes

Le réseau GUI de Bayes est démarré java weka.classifiers.bayes.net.GUI ¡bif file¿

La fenêtre suivante apparaît quand un fichier XML BIF est spécifié (si aucun n’est spécifié un graphe vide apparaît).

Déplacer un nœud 

Cliquer gauche sur le nœud et le faire glisser jusqu’à l’emplacement souhaité.

Sélectionner des groupes de nœuds 

Cliquer gauche dans le panneau graphe. Un rectangle apparaît et tous les nœuds entrecoupés avec le rectangle sont sélectionnés une fois le bouton de la souris relâché.

Les nœuds sélectionnés sont rendus visibles avec quatre carrés noirs représentant les angles ‘voir l’impression d’écran ci-dessus).

La sélection peut être étendue en maintenant la touche shift tout en sélectionnant un autre ensemble de nœuds.

La sélection peut être inversée en maintenant la touche ctrl pressée. Tous les nœuds de la sélection dans le rectangle sont désélectionnés, tandis que ceux ne figurant pas dans la sélection mais entrecoupant le rectangle sont ajoutés à la sélection. Les groupes de nœuds peuvent être déplacés en maintenant le bouton gauche de la souris pressé sur l’un des nœuds sélectionnés et en faisant glisser le groupe jusqu’à la position désirée.

Menu fichier (file menu)

Les menus New, Save, SaveAs t Exit apportent les fonctionnalités attendues.

Le format du fichier utilisé est XML BIF.

Il y a deux formats de fichiers supportés pour l’ouverture

  • .xml pour les fichiers XML BIF. Le réseau Bayesien est reconstruit à partir des informations contenues dans le fichier. L’information sur la largeur du nœud n’est pas stockée, la largeur des nœuds est donc par défaut. Ceci peut être changé en faisant apparaître le graphique (menu Tools/Layout)
  • fichiers .arff Weka data. Quand un fichier arff est sélectionné, un nouveau réseau Bayesien vide est créé avec des nœuds correspondant à chacun des attributs contenus dans un fichier arff. Les variables continues sont discrétisées en utilisant le filtre weka.filtres.supervised.attribut.Discretize. La structure de réseau peut être spécifiée et les CPT éduqués en utilisant le menu Tools/Learn CPT.

Le menu Print marche (parfois) comme attendu.

Le menu Export permet une écriture du graphique dans l’image (les formats actuellement supportés sont bmp, jpg et png). Ceci peut également être activé en utilisant l’action Alt-Shift-clic gauche dans le panneau graphe.

Le Menu Edit

 

Support défaire/refaire illimité (undo/redo). La plupart des opérations d’édition sont infaisables sur le réseau Bayesien. Deux exceptions notables, l’éducation du réseau et les CPT.
Le support Cut/Copy/Paste (couper/copier/coller). Quand un ensemble de nœuds est sélectionné, ils peuvent être placés dans un presse-papier (interne, aucune interaction n’est donc possible avec d’autres applications) et une action coller (paste) va ajouter les nœuds. Les nœuds sont renommés en ajoutant « Copy of » devant le nom et en ajoutant les nombres si nécessaire pour s’assurer de l’unicité du nom. Seules les flèches pointant vers les parents sont copiées, pas celles des enfants.

Le menu Add Node fait apparaître une boîte de dialogue (voir ci-dessous) qui permet de spécifier le nom d’un nouveau nœud ainsi que sa cardinalité. Aux valeurs des nœuds sont assignés les noms « Value1 », « Value 2 », etc. Ces valeurs peuvent être renommées (cliquer droit sur le nœud dans le panneau de graphe et sélectionner Rename Value). Une autre option est de copier/coller (copy/paste) un nœud avec des valeurs déjà correctement nommées et renommer le nœud.

Le menu Add Arc fait apparaître une boîte de dialogue pour choisir un nœud enfant tout d’abord.

Puis une boîte de dialogue apparaît de manière à sélectionner un parent. Les descendants des nœuds enfants, les parents du nœud enfant et le nœud lui-même ne sont pas listés puisqu’ils ne peuvent pas être désélectionnés en tant que nœuds enfants et puisqu’ils introduiraient des cycles ou qu’ils possèdent déjà un arc dans le réseau.

Le menu Delete Arc fait apparaître une boîte de dialogue avec une liste de tous les arcs qui peuvent être effacées.

La liste de 8 items en bas est active à la condition qu’un groupe d’au moins deux nœuds soient sélectionnés.

  • Align Left/Right/Top/Bottom (gauche/droite/Haut/Bas) déplace les nœuds dans la sélection telle que tous les nœuds de la sélection s’alignent respectivement à l’extrême gauche, droite, haut ou bas
  • Center Horizontal/Vertical déplace les nœuds de la sélection à mi-chemin entre la gauche et la droite (ou haut et bas).
  • Space Horizontal/Vertical espace les nœuds de la sélection uniformément à mi-chemin entre la gauche et la droite (ou haut et bas). L’ordre dans lequel les nœuds sont sélectionnés influe sur l’emplacement vers lequel le nœud est déplacé.

Menu Tools (outils)

Le menu Generate Network permet de générer un réseau Bayésien aléatoire entier. Ceci appelle une boîte de dialogue pour spécifier le nombre de nœuds, le nombre d’arcs, la cardinalité et un seed (une graine) aléatoire pour générer un réseau.

Le menu Generate Data permet de générer un ensemble de données dans l’éditeur, à partir du réseau Bayésien. Une boîte de dialogue  apparaît pour spécifier le nombre d’instances à générer, un seed aléatoire et le fichier dans lequel sauvegarder l’ensemble des données. Le fichier  est au format arff. Lorsqu’aucun fichier n’est sélectionné (le champ est laissé blanc), aucun fichier n’est écrit et seul l’ensemble de données internes est installé.

Le menu Set Data installe l’ensemble de données actuelles. A partir de cet ensemble de données, un nouveau réseau Bayésien peut être éduqué, ou les CPT d’un réseau peuvent être estimées.

Un menu de choix de fichier apparaît pour sélectionner le fichier arff contenant les données.

Les menus Learn Network et Learn CPT ne sont actifs que lorsqu’un ensemble de données est spécifié soit par :

• le menu Tools/Set Data, ou

• le menu Tools/Generate Data, ou

• le menu File/Open lorsqu’un fichier arff est sélectionné.

L’action Learn Network éduque le réseau Bayésien entier à partir de l’ensemble de données. Les algorithmes d’apprentissage peuvent être sélectionnés à partir de l’ensemble disponible dans Weka, en sélectionnant le bouton Options dans la boîte de dialogue ci-dessous. Eduquer un réseau vide la pile undo (défaire).

Le menu layout applique l’algorithme d’affichage des graphes au réseau et s’efforce de rendre le graphe plus lisible. Quand l’item du menu est sélectionné, la taille du nœud peut être spécifiée ou soumis au calcul de l’algorithme basé sur la taille des étiquettes en cochant la case custom node size (de personnalisation de la taille des nœuds).

Le menu Show margins rend visibles les répartitions des marges. Celles-ci sont calculées en utilisant l’algorithme d’arbre de jonction. Les probabilités relatives aux marges des  nœuds apparaissent en vert à côté des nœuds. La valeur d’un nœud peut être enregistrée (cliquer droit sur le nœud, sélectionner evidence, choisir une valeur) et la couleur passe au rouge pour indiquer que l’évidence est enregistrée pour le nœud. Des erreurs de rounding sont susceptibles de se produire dans les probabilités de marge.

 

Le menu Show Cliques rend visibles les clics utilisés par l’algorithme de l’arbre de jonction. Les clics sont rendus apparents au moyen de contours discontinus de couleur. Marges et clics peuvent être visualisés simultanément, mais plus particulièrement pour les graphes denses.

 

Menu View

Le menu View permet de zoomer et dézoomer dans le panneau de graphe. Il permet également de cacher ou faire apparaître le statut et les barres d’outils.

Menu Help

Le menu Help pointe vers ce document

Barre d’outils (Toolbar)

 

La barre d’outils permet un accès rapide à de nombreuses fonctionnalités. Il suffit de passer la souris sur les boutons de la barre d’outils et un encart de « trucs » apparaît et précise quelle fonction est activée. La barre d’outils peut être cachée ou montrée avec le menu View/View Toolbar.

Barre de statut (Statusbar)

En bas de l’écran, la barre de statut diffuse des messages. Ceci peut être utile lorsqu’une action undo/redo (défaire/refaire) est effectuée qui risque de n’avoir aucun effet visible, comme les actions d’édition sur un CPT. La barre de statuts peut être visible ou cachée avec le menu de barre de statut View/View Statusbar.

Bouton Clic droit avec la souris (Click Right Mouse)

Cliquer droit avec la souris dans le panneau de graphe en dehors d’un nœud fait apparaître le menu suivant. Ceci permet d’ajouter un nœud à l’emplacement sur lequel l’utilisateur a cliqué, ou sélectionner un parent à ajouter à tous les nœuds de la sélection. Si aucun nœud n’est sélectionné, ou si aucun nœud ne peut jour le rôle de parent, cette fonction est désactivée.

Cliquer droit sur un nœud fait apparaître un menu popup. Celui-ci fait apparaître une liste de valeurs qui peuvent être enregistrés comme évidences aux nœuds sélectionnés. Ceci n’est visible que quand les marges sont visibles (menu Tools/Show margins). En sélectionnant « Clear », la valeur des nœuds est retirée et les marges sont calculées de nouveau en fonction des CPT.

Un nœud peut être renommé en cliquant droit et en sélectionnant Rename dans le menu popup. La boîte de dialogue suivante apparaît et permet d’entrer un nouveau nom de nœud.

Le CPT d’un nœud peut être édité manuellement en sélectionnant un nœud, en cliquant droit Edit CPT. Une boîte de dialogue apparaît avec un tableau représentant le CPT. Quand une valeur est éditée, les valeurs de ce qui reste dans le tableau sont mises à jour de manière à garantir que les probabilités additionnées les unes aux autres correspondent à 1. Cette opération tente d’ajuster la dernière colonne tout d’abord, puis de revenir en arrière à partir de ce point.

Le tableau tout entier peut être rempli de répartitions générées au hasard en sélectionnant le bouton Randomize.

Le menu qui apparaît montre une liste de parents qui peut être ajoutée au nœud sélectionné. Le CPT pour le nœud est mis à jour en effectuant des copies pour chaque valeur du nouveau parent.

Le menu popup montre la liste des parents qui peuvent être effacés  du nœud sélectionné. Le CPT du nœud ne conserve que celui conditionné à partir de la première valeur du nœud parent.

Le menu popup montre la liste des enfants qui peuvent être effacés du nœud sélectionné. Le CPT du nœud enfant ne conserve que celui conditionné à partir de la première valeur du nœud parent.

Sélectionner la valeur à ajouter (Add Value) dans la fenêtre fait apparaître cette boîte de dialogue, dans laquelle le nom de la nouvelle valeur appliquée au nœud peut être spécifié. La répartition assigne à la valeur du nœud la probabilité zéro. Les nœuds enfants CPT sont mis à jour en copiant les répartitions conditionnées sur la nouvelle valeur.

Le menu popup fait apparaître une liste de valeurs qui peuvent  être renommées pour le nœud sélectionné.

Sélectionner une valeur fait apparaître la boîte de dialogue suivante dans laquelle  un nouveau nom peut- être spécifié.

Le menu popup fait apparaître une liste de valeurs qui peut être effacée à partir du nœud sélectionné. Ceci n’est actif que lorsqu’il y a plus de deux valeurs pour le nœud (les nœuds qui n’ont qu’une seule valeur n’ont pas une grande signification). En sélectionnant la valeur, le CPT du nœud est mis à jour afin de garantir que le CPT s’ajoute à l’unité. Les CPT des enfants sont mis à jour en glissant les répartitions conditionnées sur la valeur.

Une précision sur l’apprentissage CPT

Les variables continues sont discrétisées par la classe du réseau de Bayes. L’algorithme de discrétisation choisit ses valeurs basées sur les informations contenues dans l’ensemble de données.

Cependant, ces valeurs ne sont stockées nulle part. Par conséquent, lire un fichier arff avec des variables continues en utilisant le menu File/Open permet de spécifier un réseau, puis d’éduquer les CPT à partir du réseau, puisque les liens restent connus.

Cependant, ouvrir un fichier arff, spécifier une structure, puis fermer une application, rouvrir et essayer d’éduquer le réseau à partir d’un autre fichier contenant des variables continues peut ne pas donner le résultat désiré puisque l’algorithme de discrétisation est réappliqué et de nouvelles limites sont susceptibles d’avoir été trouvées.

Apprendre à partir d’un ensemble de données qui contient plus d’attributs qu’il n’y a de nœuds dans le réseau est possible. Les attributs supplémentaires sont simplement ignorés.

Apprendre à partir d’un ensemble de données avec des attributs ordonnés différemment est possible. Les attributs sont associés aux nœuds en fonction du nom. Cependant, les valeurs d’attributs sont associées avec les valeurs de nœuds basés sur l’ordre des valeurs.

Les attributs de l’ensemble de données devraient avoir le même nombre de valeurs que les nœuds correspondants du réseau (voir ci-dessus pour les variables continues).


8.10 Les réseaux Bayésiens dans l’experimenter

Les réseaux Bayésiens génèrent des mesures supplémentaires qui peuvent être examinées dans l’experimenter. L’experimenter peut alors être utilisé pour calculer la moyenne et la variance correspondant à ces mesures.

Les métriques suivantes sont générées

  • measureExtraArcs : Les arcs supplémentaires comparés au réseau de référence. Le réseau doit être fourni en tant que fichier BIF à la classe BayesNet. Si aucun réseau de ce type n’est fourni, cette valeur est zéro.
  • MeasureMissingArcs : les arcs manquants comparés au réseau de référence ou zéro si non fourni
  • measureReversedArcs : les arcs inversés comparés au réseau de référence ou zéro si non fourni
  • measureDivergence : divergence entre réseau éduqué comparé avec le réseau de référence ou zéro si non fourni
  • measureBayesScore : connection du score K2 de la structure du réseau.
  • measureBDeuScore : connection du score de BDeu de la structure du réseau
  • measureMDLScore : connection du score MDL
  • measureAICScore: connection du score AIC.
  • -measureEntropyScore: connection de l’entropie

8.11 Ajouter ses propres  apprenants de réseau Bayésien

Il est possible d’ajouter ses propres apprenants et estimateurs de structure.

Ajouter un nouvel apprenant de structure

Ci-après, un guide rapide pour ajouter un apprenant de structure :

  • Créer une classe qui dérive de weka.classifiers.bayes.net.search.SearchAlgorithm. Si votre outil de recherche est basé sur les scores, sur l’indépendance conditionnelle ou une validation croisée, l’utilisateur peut préférer dériver de ScoreSearchAlgorithm, CISearchAlgorithm ouCVSearchAlgorithm au lieu de dériver directement de SearchAlgorithm.
  • Mettre en pratique le public void buildStructure(BayesNet bayesNet, Instances instances). Essentiellement, l’utilisateur est responsable d’installer les ensembles de parents dans les réseaux bayesNet. L’utilisateur peut accéder aux parentsets en utilisant bayesNet.getParentSet(iAttribut).AddParent(iParent, instances) où les instances doivent être passées pour l’ensemble parents afin de dériver les propriétés de l’attribut. Alternativement, mettre en application la recherche public void (BayesNet bayesNet, Instances instances).La mise en pratique de buildStructure dans la classe de base. Cette méthode est appelée par le SearchAlgorithm qui appellera la recherche après l’initialisation des ensembles de parents et si le drapeau initAsNaiveBase est installé, il lancera une structure de réseau naive Bayes. Après avoir appelé la recherche  dans la classe de personnalisation, ceci ajoutera des flèches si le drapeau markovBlanketClassifier flag est installé afin de garantir que tous les attributs soient dans la couverture Markov du nœud de classe.
    • Si l’apprenant de structure a des options qui ne sont pas des options par défaut, l’utilisateur veut mettre en pratique Enumeration listOptions(), public void setOptions(String[] options), public String[] getOptions() et les méthodes d’obtention et d’installation pour les propriétés que l’utilisateur veut être capable d’installer.

NB1. N’utilise pas l’-E option puisque cette option est réservée à la classe BayesNet pour distinguer les options supplémentaires de la classe SearchAlgorithm et la classe Estimator. Si l’-E option est utilisée, elle ne sera pas passée au SearchAlgorithm de l’utilisateur (et va probablement causer de problèmes dans la classe BayesNet)

NB2. S’assurer de procéder aux options de la classe parents si n’importe quelle des méthodes get/setOptions

Ajouter un nouvel estimateur

Voici un rapide guide pour ajouter un nouvel estimateur

1) Créer une classe qui dérive weka.classifiers.bayes.net.estimate.BayesNetEstimator. Disons qu’il s’intitule weka.classifiers.bayes.net.estimate.MyEstimator.

2) Mettre en pratique public void initCPTs(BayesNet bayesNet) public void estimateCPTs(BayesNet bayesNet) public void updateClassifier(BayesNet bayesNet, Instance instance), et public double[] distributionForInstance(BayesNet bayesNet, Instance instance).

3) Si l’apprenant de structure a des options qui ne sont pas par défaut, l’utilisateur peut souhaiter mettre en application  public Enumeration listOptions(), public void setOptions(String[] options), public String[] getOptions() et les méthodes d’obtention et d’installation pour les propriétés que l’utilisateur souhaite être en mesure d’installer. NB Ne pas utiliser l’ -E option puisque cette opération est réservée à la classe BayesNet pour distinguer les options supplémentaires de la classe SearchAlgorithm et la classe Estimator. Si l’-E option est utilisée et si aucun autre argument n’est passé dans le SearchAlgorithm, les options supplémentaires de l’estimateur seront passées au SearchAlgorithm à la place. En bref, ne pas utiliser l’ -E option.

 


8.12 FAQ

Comment dois-je utiliser un ensemble de données avec des variables continues dans les classes BayesNet ?

Utiliser la classe weka.filtres.unsupervised.attribut.Discretize pour les discrétiser. A partir de la ligne de commande, vous pouvez utiliser java weka.filtres.unsupervised.attribut.Discretize -B 3 -i infile.arff-o outfile.arff ou la -B option détermine la cardinalité des variables discrétisées.

Comment dois-je utiliser un ensemble de données comprenant des valeurs manquantes avec les classes BayesNet ?

Il serait nécessaire que vous effaciez les entrées avec valeurs manquantes ou valeurs test

Comment dois-je créer une structure de réseau de Bayes aléatoire ?

Faire fonctionner avec la ligne de commande java weka.classifiers.bayes.net.BayesNetGenerator -B -N 10 – A 9 -C 2 va imprimer un réseau de Bayes avec dix nœuds, 9 arcs et des variables binaires au format XML BIF aux sorties standard.

Comment puis-je créer un ensemble de données artificiel en utilisant des réseaux de Bayes aléatoires ?

Faire tourner java weka.classifiers.bayes.net.BayesNetGenerator -N 15 -A 20 -C 3-M 300 va générer un ensemble de données au format arff avec 300 instances à partir d’un réseau aléatoire avec 15 variables ternaires et 20 flèches.

Comment puis-je créer un ensemble de données artificiel en utilisant les réseaux de Bayes que j’ai sur fichier ?

Faire tourner java weka.classifiers.bayes.net.BayesNetGenerator -F alarm.xml -M 1000 va générer un ensemble de données avec 1000 instances à partir du réseau stocké dans le fichier alarm.xml.

Comment puis-je conserver un réseau Bayes au format BIF ?

  • GUI : dans l’Explorer

-Eduquer la structure du réseau

-Cliquer droit sur la fonctionnalité pertinente de la liste de résultats

-Choisir « Visualize Graph » dans le menu popup

-Cliquer sur le bouton  disquette (floppy) dans la fenêtre Graph Visualizer

-Une boîte de dialogue de fichier « save as »apparaît qui vous permet de sélectionner le nom de fichier dans lequel effectuer la sauvegarde

  • Java : Créer un BayesNet et appeler BayesNet.toXMLBIF03() qui va retourner le réseau Bayes au format BIF comme un String.
  • Command line (ligne de commande) : utiliser la g- option et rediriger la sortie sur stdout dans un fichier.

Comment puis-je comparer le réseau que j’ai éduqué avec  un autre au format BIF ?

Spécifier l’option -B <bif-file> option au BayesNet. Calling toString() va produire une résumé des flèches supplémentaires, manquantes et inversées. La différence également entre le réseau éduqué et celui du fichier est reporté.

Comment puis-je utiliser le réseau que j’ai éduqué à l’inférence générale ?

Il n’y a aucune inférence type dans Weka  mais vous pouvez exporter le réseau en tant que fichier XML BIF (voir ci-dessous) et l’importer dans d’autres packs, par exemple JavaBayes disponibles sous GPL à partir de http://www.cs.cmu.edu/~javabayes.

Flux RSS

S'abonner

Me contacter

Pascal Cottereau
mp6 (site in maintenance)
Paris, France

Tel. bureau: 33 +1 77 35 36 00
E-mail.

Information Mining