Knowledge Flow
Sommaire
6.1 Introduction
Le KnowledgeFlow fournit une alternative à l’Explorer en tant que frontend graphique des algorithmes au cœur de Weka. Le KnowledgeFlow est en cours de développement, et certaines des fonctionnalités de l’Explorer ne sont donc pas encore disponibles. D’autre part, certaines actions sont possibles avec le KnowledgeFlow, mais pas avec l’Explorer.
Le KnowledgeFlow présente une interface inspirée des flux de données pour Weka. L’utilisateur peut sélectionner les composants Weka à partir d’une barre d’outils, les placer sur un support de présentation (layout canvas) et les connecter entre eux afin de former un flux d’information pour le traitement et l’analyse des données. Pour le moment tous les classifiers, filtres, clusterers, chargeurs (loaders) et savers de Weka sont disponibles dans le KnwowedgeFlow, ainsi que d’autres outils supplémentaires. Le KnowledgeFlow peut gérer les données soit en incrémentation, soit en traitement par lots (l’Explorer ne gère que le traitement par lot). Bien sûr, s’appuyer sur des données en incrémentation requiert que la classifier puisse être mis à jour au cas par cas. Actuellement dans Weka, il existe 10 classifiers capable de gérer les données en incrémentation :
• AODE
• IB1
• IBk
• KStar
• NaiveBayesMultinomialUpdateable
• NaiveBayesUpdateable
• NNge
• Window
Et deux meta classifiers :
• RacedIncrementalLogitBoost – qui peut utiliser n’importe quelle régression base learner pour extraire en incrémentation l’information à partir de classes discrètes de données .
• LWL – locally weighted learning.
6.2 Caractéristiques
Le KnwoledgeFlow présente les fonctionnalités suivantes :
- Présentation intuitive des flux de données
- Traitement incrémentiel ou par lot des données
- Traitement simultané de plusieurs lots ou flux (chaque flux individuel exécute sa propre série)
- Enchainement des filtres les uns avec les autres
- Visualisation des modèles produits par les classifiers pour chaque dimension dans une validation croisée
- Visualisation des classifiers incrémentiels de performance pendant le traitement (scrolling plots of classification accuracy, RMS error, predictions etc.)
- Installation de plugins pour permettre d’ajouter facilement de nouveaux composants au KnowledgeFlow.
6.3 Composants
Composants disponibles dans le KnowledgeFlow :
6.3.1 DataSources
Tous les chargeurs (loaders) de Weka sont disponibles
6.3.2 DataSinks
Tous les outils de sauvegarde de Weka sont disponibles.
6.3.3 Filtres
Tous les filtres de Weka sont disponibles
6.3.4 Classifiers
Tous les classifiers de Weka sont disponibles
6.3.5 Clusterers
Tous les clusterers de Weka sont disponibles
6.3.6 Evaluation
- TrainingSetMaker – fait d’un ensemble de données un ensemble de training.
- TestSetMaker – Fait d’un ensemble de données un ensemble test.
- CrossValidationFoldMaker – Divise n’importe quel ensemble de données, de training ou de test en dimensions.
- TrainTestSplitMaker – Divise n’importe quel ensemble de données, de raining ou de test en ensemble de training et de test.
- ClassAssigner – assigne à une colonne la fonction de classe pour n’importe quel ensemble de données de training et de test.
- ClassValuePicker – Choisit une valeur de classe comme étant la classe “positive”. Ceci s’avère utile quand la création de données pour des courbes ROC (voir ModelPerformanceChart ci- dessous et l’exemple 6.4.2)
- ClassifierPerformanceEvaluator – évalue les performances des classifiers par lot entrainées et/ou testés.
- IncrementalClassifierEvaluator – évalue la performance des classifiers entrainés sur un plan incrementiel
- ClusterePerformanceEvaluator – évalue la performance des clusterers par lot entrainés et/ou testés
- PredictionAppender – annexe les prédictions de classifiers dans un ensemble test. En ce qui concerne les problèmes relatives aux classes discrètes, elle peut soit annexer les étiquettes des classes prédites ou les répartitions de probabilités.
6.3.7 Visualisation
- DataVisualizer – Composant qui fait apparaître un panneau de visualisation des données dans un grand diagramme de dispersion en 2D
- ScatterPlotMatrix – composant qui fait apparaître un panneau contenant une matrice de petits diagrammes de dispersion (cliquer sur un petit diagramme fait apparaître un plus grand diagramme).
- AttributSummerizer – composant qui fait apparaître un panneau contenant une matrice d’histogrammes – un pour chacun des attributs en entrée dans les données)
- ModelPerformanceChart – composant qui fait apparaître un panneau pour la visualization des courbes de seuil (par exemple, ROC)
- TextViewer – composant pour représenter les données textuelles. Peut représenter les ensembles de données, statistiques de performances de classification, etc.
- Graph Viewer – composant qui fait apparaître un panneau qui présente une structure défilante de données (utilisée pour visualiser la performance en ligne des classifiers incrémentiels.
6.4 Exemples
6.4.1 J48 en validation croisée
Installer un flux pour charger un fichier ARFF (en mode par lot) et effectuer une validation croisée en utilisant J48 (implementation C4.5 de Weka).
- Cliquer sur l’espace DataSources et choisir ArffLoader à partir de la barre d’outils (le curseur de la souris va devenir une croix).
- Ensuite, placer le composant ArffLoader sur la zone de création en cliquant quelque part sur la zone (une copie de l’icône ArffLoader va apparaître dans la zone)
- Ensuite, spécifier un fichier ARFF pour charger en un clic droit sur l’icône ArffLoader dans la zone. Sélectionner Configure dans la liste du menu Edit et designer l’emplacement de votre fichier ARFF.
- Cliquer ensuite sur l’onglet Evaluation en haut de la fenêtre et choisir le composant ClassAssigner (qui vous permet de choisir dans quelle colonne placer la classe) à partir de la barre d’outils. Le placer dans la zone de création.
- Maintenant, connectez le ArffLoader avec le ClassAssigner : d’abord, cliquer droit et sélectionner le dataset sous Connections dans le menu. Une ligne élastique va apparaître. Déplacer la souris sur le composant ClassAssigner et cliquer gauche – une ligne rouge intitulée dataset va connecter les deux composants.
- Ensuite, cliquer droit sur ClassAssigner et choisir Configure à partir du menu. Cette action va faire apparaître une fenêtre à partir de laquelle il sera possible de spécifier quelle colonne correspond à la classe dans vos données ‘la dernière est spécifiée par défaut).
- Ensuite sélectionnez un composant CrossValidationFoldMaker dans la barre d’outils Evaluation et le placer dans l’espace de travail. Connecter le ClassAssigner au CrossValidationFoldMaker en cliquant droit sur ClassAssigner et en sélectionnant Connections dans le menu, puis dataset.
- Cliquez ensuite sur l’onglet Classifiers en haut de la fenêtre et faire dérouler la barre d’outils jusqu’à ce que vous ayez atteint le composant J48 dans les sections d’arborescences. Placez un composant J48 dans la zone de création.
- Connectez le CrossValidationFoldMaker au J48 TWICE en choisissant d’abord TrainingSet puis testSet à partir du menu popup de CrossValidationFoldMaker.
- Ensuite, retournez à l’onglet Evaluation et placez un composant ClassifierPerformanceEvaluator dans la zone de travail. Connectez J48 à ce composant en sélectionnant l’entrée batchClassifier à partir du menu popup J48.
- Puis, allez à la barre d’outils Visualization et placez un composant TextViewer sur la zone de création. Connectez le ClassifierPerformanceEvaluator avec le TextViewer en sélectionnant l’entrée texte dans le menu popup du ClassifierPerformanceEvaluator.
- A présent, démarrez l’exécution du flux en sélectionnant Star Loading dans le menu popup du ArffLoader. En fonction du volume de l’ensemble de données et du temps que prend la validation croisée, vous allez voir s’animer certaines des icones dans la zone de création (l’arborescence J48 va grandir dans l’icône et les coches vont s’animer dans le ClassifierPerformanceEvaluator). Vous allez également voir une information de progression dans la barre Status et un journal (Log) en bas de la fenêtre. Une fois cette opération terminée, vous pouvez visualiser les résultats en choisissant Show results dans le menu popup du composant TextViewer.
D’autres choses intéressantes à ajouter à ce flux : connecter un TextViewer et/ou un GraphViewer au J48 afin de visualiser les représentations textuelles ou graphiques des arborescences produites, pour chaque dimension de la validation croisée (cette opération n’est pas possible dans l’Explorer).
6.4.2 Structurer plusieurs courbes ROC
Le KnowledgeFlow peut dessiner un grand nombre de courbes ROC dans la même fenêtre, action que l’Explorer ne peut pas faire. Dans cet exemple, nous utilisons J48 et RandomForests comme des classifiers. On peut trouver cet exemple dans le WekaWiki également.
- Cliquer sur l’onglet DataSources et choisir ArffLoader dans la barre d’outils ArffLoader dans la barre d’outils le curseur de la souris devient une croix)
- Placer ensuite le composant ArffLoader dans la zone de création en cliquant quelque part dans la zone (une copie de l’icône ArffLoader va apparaître dans la zone de création).
- Ensuite, pour charger, spécifier un fichier ARFF en cliquant droit sur l’icône ArffLoader dans la zone de création. Un menu popup va apparaître. Sélectionner Edit puis dans la liste des menus, Configure, et choisir l’emplacement pour votre fichier ARFF.
- Cliquer ensuite dans l’onglet Evaluation en haut de la fenêtre et choisir le composant ClassAssigner (ce qui vous permet de choisir dans quelle colonne placer la classe) à partir de la barre d’outils. Le placer dans l’espace de travail.
- Maintenant, connecter le ArffLoader au ClassAssigner : cliquer d’abord sur le ArffLoader et sélectionner Connections puis dataset. Une ligne élastique va apparaître. Passer la souris sur le composant ClassAssigner et choisir Configure dans le menu. Cette action va faire apparaître une fenêtre à partir de laquelle vous pourrez choisir quelle colonne est la classe de vos données (la dernière par défaut)
- Choisir ensuite le composant ClassValuePicker à partir de la barre d’outils (ce qui vous permet de choisir quelle classe va être évalué dans le ROC). Le placer dans l’espace de travail et cliquer droit sur ClassAssigner, sélectionner Connections, puis dataSet dans le menu et le connecter avec le ClassValuePicker.
- Prendre ensuite le composant CrossValidationFoldMaker dans la barre d’outils Evaluation et le placer dans l’espace de travail. Connecter le ClassAssigner au CrossValidationFoldMaker en cliquant droit sur ClassAssigner et en sélectionnant Connections puis, dans le menu, dataset.
- Cliquer ensuite sur l’onglet Classifiers en haut de la fenêtre et faire dérouler la barre d’outils jusqu’au composant J48 dans la section arborescences. Placer un composant J48 dans l’espace de travail.
- Connecter CrossValidationFoldMaker au J48 TWICE en choisissant d’abord trainingSet et testSet à dans le menu popup de CrossValidationFoldMaker.
- Répéter ces deux étapes dans le classifier RandomForest
- Ensuite, revenir à l’onglet Evaluation et placer un composant ClassifierPerformanceEvaluator dans l’espace de travail. Connecter J48 à ce composant en sélectionnant l’entrée batchClassifier dans le menu popup de J48. Ajouter un autre ClassifierPerformanceEvaluator pour RandomForest et les connecter via batchClassifier également.
- Aller ensuite à la barre d’outils Visualization et placer un composant ModelPerformanceChart dans l’espace de travail. Connecter les deux ClassifierPerformanceEvaluators au ModelPerformanceChart en sélectionnant l’entrée thresholdData dans le menu popup du ClassifierPerformanceEvaluator.
- Maintenant, démarrer l’exécution du flux, en sélectionnant Start loading dans le menu popup d’ArffLoader. En fonction de la taille de l’ensemble des données et le temps nécessaire pour la validation croisée, vous allez voir s’animer certaines des icons dans la zone de création (l’arborescence J48 va grandir dans l’icône et les coches vont s’animer dans le ClassifierPerformanceEvaluator). Vous allez également voir une information de progression dans la barre Status et un journal (Log) en bas de la fenêtre.
- Sélectionner Show plot dans le menu popup du modelPerformanceChart sous la section Actions. Les deux courbes ROC sont ainsi créées à partir de l’ensemble de données credit-g UCI, évaluée à partir on the class label good.
6.4.3 Traiter les données de manière incrémentielle
Certains classifiers, clusterers et filtres de Weka peuvent gérer les données de manière incrémentielle en streaming. Voici un exemple de training et de test de naïve Bayse, de manière incrémentielle. Les résultats sont envoyés à un TextViewer et les predictions sont structures par un composant StripChart.
***
- Cliquer sur l’onglet DataSources et choisir ArffLoader dans la barre d’outils (le curseur de la souris va devenir une croix).
- Placer ensuite le composant ArffLoader dans la zone de travail en cliquant quelque part dans la zone (une copie de l’icône ArffLoader va apparaître dans la zone)
- Spécifier ensuite un fichier ARFF pour charger en cliquant droit sur l’icône ArffLoader dans la zone de travail. Un menu popup va apparaître. SélectionnerEdit puis, dans le menu, Configure, et choisir l’emplacement du fichier ARFF créé.
- Cliquer ensuite sur l’onglet Evaluation en haut de la fenêtre et choisir le composant ClassAssigner à partir de la barre d’outils (cette opération vous permet de choisir quelle colonne sera la classe). La placer dans la zone de travail.
- Maintenant, connecter l’ArffLoader au ClassAssigner : pour commencer, cliquer droit sur l’ArffLoader et sélectionner Connections, puis dans le menu, dataset. Une ligne élastique va apparaître. Passer la souris sur le composant ClassAssigner et cliquer gauche – une ligne rouge intitulée dataset va connecter les deux composants.
- Ensuite, cliquer droit sur le ClassAssigner et choisir Configure dans le menu. Cette action va faire apparaître une fenêtre dans laquelle vous allez pouvoir spécifier quelle colonne sera la classe dans vos données (la dernière par défaut).
- Maintenant, prendre un composant NaiveBayesUpdateable dans la section bayes du panneau Classifiers et le placer sur la zone de travail.
- Connecter ensuite le ClassAssigner avec NaiveBayesUpdateable en utilisant une instance connexion.
- Placer ensuite un IncrementalClassifierEvaluator du panneau Evaluation dans l’espace de travail et le connecter au NaiveBayesUpdateable en utilisant une incrementalClassifier connection.
- Placer ensuite un composant TextViewer du panneau de Visualization dans l’espace de travail. Le connecter à l’IncrementalClassifierEvaluator en utilisant une text connection.
- Placer ensuite un composant StripChart du panneau Visualization dans l’espace de travail et le connecter au IncrementalClassifierEvaluator en utilisant une chart connection.
- Faire apparaître la représentation StripChart en cliquant droit dessus et en choisissant Show chart dans le menu popup. Note : le StripChart peut être configure avec des options pour contrôler la fréquence à laquelle les points de données et les labels seront représentés.
- Finalement, lancer le flux en cliquant droit sur l’ArffLoader et en sélectionnant Start loading dans le menu Popup.
***
Notez que, dans cet exemple, on obtient une prédiction de Naïve Bayes pour chacun des cas entrants en désélectionnant avant que le classifier soit entraîné (mis à jour) par le cas. Si vous avez un classifier pré-entraîné, vous pouvez choisir que votre classifier ne soit pas mis à jour avec les cas entrants en décochant la case dans la boîte de dialogue du classifier. Si le classifier pré-entraîné est un classifier par lot (batch) (c’est-à-dire qu’il ne peut pas faire de training incrémentiel) alors, vous ne serez en mesure de le tester que d’une manière incrémentielle.
***
6.5 Plugin Facility (Fonctionnalité de plugin)
Le KnowledgeFlow permet d’ajouter facilement de nouveaux composants par un mécanisme de plugin. Les plugins sont installés dans un répertoire intitulé .knowledgeFlow/plugins dans le répertoire home de l’utilisateur. Si ce répertoire n’existe pas, vous devez le créer afin d’installer les plugins. Les plugins sont installés dans des sous-répertoires du répertoire .knowledgeFlow/plugins. Il se peut qu’il existe plus d’un composant de plugins dans un même répertoire. Chaque sous répertoire doit contenir un ou plusieurs fichiers jar qui contiennent et supportent les composants de plugin. Le KnowledgeFlow va charger les fichiers jar de manière dynamique et les additionner dans le classpath. Afin de dire au KnowledgeFlow quelles classes instancier en tant que composants dans les fichiers jar, un second fichier intitulé Beans.props doit nécessairement être créé et place dans chaque sous- répertoire plugin. Ce dossier contient une liste de noms de classes complètement qualifié à instancier. Les composants instanciés avec success vont apparaître dans un onglet “Plugins” dans l’interface utilisateur du KnowledgeFlow. Ci-dessous, voici un exemple de listing de répertoire de plugin, celui du contenu du fichier jar et du contenu associé Beans.propsfile :
cygnus:~ mhall$ ls -l $HOME/.knowledgeFlow/plugins/kettle/
total 24
-rw-r–r– 1 mhall mhall 117 20 Feb 10:56 Beans.props
-rw-r–r– 1 mhall mhall 8047 20 Feb 14:01 kettleKF.jar
cygnus:~ mhall$ jar tvf /Users/mhall/.knowledgeFlow/plugins/kettle/kettleKF.jar
0 Wed Feb 20 14:01:34 NZDT 2008 META-INF/
70 Wed Feb 20 14:01:34 NZDT 2008 META- INF/MANIFEST.MF
0 Tue Feb 19 14:59:08 NZDT 2008 weka/
0 Tue Feb 19 14:59:08 NZDT 2008 weka/gui/
0 Wed Feb 20 13:55:52 NZDT 2008 weka/gui/beans/
0 Wed Feb 20 13:56:36 NZDT 2008 weka/gui/beans/icons/
2812 Wed Feb 20 14:01:20 NZDT 2008 weka/gui/beans/icons/KettleInput.gif
2812 Wed Feb 20 14:01:18 NZDT 2008 weka/gui/beans/icons/KettleInput_animated.gif
1839 Wed Feb 20 13:59:08 NZDT 2008 weka/gui/beans/KettleInput.class
174 Tue Feb 19 15:27:24 NZDT 2008 weka/gui/beans/KettleInputBeanInfo.class
cygnus:~ mhall$ more /Users/mhall/.knowledgeFlow/plugins/kettle/Beans.props
# Specifies the tools to go into the Plugins toolbar
weka.gui.beans.KnowledgeFlow.Plugins=weka.gui.beans.KettleInput

