SlideShare a Scribd company logo
1 of 80
CLUSTERING SOUS
MAHOUT
Dr Mustapha MICHRAFY Dr Bernard KOUAKOU
Contact des auteurs :
datascience.km@gmail.com
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Plan
• Présentation de Mahout
• Présentation du clustering
• Les algorithmes de clustering
• Clustering en ligne de commande
• API clustering
• Évaluation des clusters
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation de Mahout
• Objectif
• Caractéristique
• Compilation des sources
• Format et représentation de données
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation de Mahout
• Mahout : objectif
• Mahout est un API Java dédié aux algorithmes
d’apprentissage, à savoir:
Recommandation
Clustering
Classification
• Mahout supporte l’écosystème Hadoop
Les algorithmes sont programmés sous le paradigme
MapReduce
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Mahout : caractéristique
• Mahout est un projet Apache, open source
• Il est évolutif (« scalable »)
• Portable ( API Java)
• Algorithmes en deux modes
Exécutable sous le framework hadoop
En séquentiel
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Mahout : Compilation des sources
• Prérequis
Maven 2 et plus
Java 6
• Étapes de la compilation des sources
télécharger les sources de Mahout (Mahout-distribution-version-
src.zip)
dézipper le fichier téléchargé
aller à la racine du dossier Mahout
compiler les sources : mvn install
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Mahout : Installation et configuration
• Prérequis
• Java
• Et Hadoop (pour les version mapreduce)
• Installation
télécharger Mahout (Mahout-distribution-version-src.zip)
dézipper le fichier téléchargé dans le dossier home/opt
• Configuration
• Ajouter le dossier Mahout dans le classpath
Ouvrir .bashrc
export Mahout_HOME=/home/opt/dossier_Mahout
export PATH=$PATH:$MAHOUT_HOME/bin
• Pointer sur Hadoop
Ouvrir le fichier bin/mahout et fixer la valeur de HADOOP_CONF_DIR
HADOOP_CONF_DIR=Home/Path_Hadoop
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation de mahout
• Format et représentation de données
• Sélection des caractéristiques et vectorisation :
Identifier un ensemble de caractéristiques pertinentes des objets à grouper ;
Attribuer des valeurs numériques aux caractéristiques retenues pour les
objets ;
Vectorisation : Représenter chaque objet par un vecteur en utilisant ces
valeurs numériques. Si n caractéristiques ont été retenues, alors un vecteur
de dimensions n est construit pour chaque objet.
• Mahout prend en entrée seulement les fichiers séquentiels
Écrire donc tous les vecteurs dans un même fichier de type «
SequenceFile ».
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation du clustering
• Objectif du Clustering
• Classement des méthodes de « Clustering »
• Critère de distinction des méthodes
• Qualité d’une méthode de clustering
• Similarité et dissimilarité
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation du clustering
• Clustering : objectif
• Il vise à répartir l'échantillon en groupes d'observations
homogènes.
• Chaque groupe est bien différencié des autres.
• Certaines méthodes visent à construire une hiérarchie, c-à-
d une suite de partitions « emboîtées », de plus en plus
fines, sur un ensemble d'observations (objets) initial. Cette
hiérarchie peut être résumée par un arbre hiérarchique.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation du clustering
• Classement des méthodes de « Clustering »
• Méthodes de type CAH
Ce sont les méthodes construisant une hiérarchie par agrégations
successives d’objets, puis de groupes, en fonction des distances entre objets
ou groupes.
• Méthodes de type CDH
Elles procèdent par dichotomie itérative : l’ensemble des éléments est divisé
en deux, puis chacune de ses parties est, à son tour subdivisée, et ainsi de
suite.
• Méthode de partitionnement
Elles visent à construire une partition de l’ensemble des données initiales
selon certains critères.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation du clustering
• Critère de distinction des méthodes (1)
• Trois points permettent de distinguer les méthodes.
• Point 1 : Le principe de construction des groupes
Procéder séquentiellement en regroupant les observations les
plus « semblables » en premier lieu ; c’est le principe des
méthodes hiérarchiques.
Ou regrouper simultanément en k groupes toutes les
observations. C’est le principe des méthodes non-
hiérarchiques.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation du clustering
• Critère de distinction des méthodes (2)
• Point 2 : Le critère de similarité/distance entre deux
observations/variables.
• Point 3 : Le critère de similarité/distance entre deux groupes ou entre
une observation et un groupe.
???
??? ???
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation du clustering
• Qualité d’une méthode de clustering (1)
• Une bonne méthode produit des clusters ayant :
une forte similarité intra‐classe ;
une faible similarité inter‐classe.
• La qualité d’un clustering dépend de la mesure de
similarité.
• La qualité d’une méthode peut aussi être mesurée par sa
capacité à identifier des motifs pertinents.
• En pratique, une fonction est utilisée pour la mesure de la
qualité.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation du clustering
• Qualité d’une méthode de clustering (2)
• la qualité des clusters est étroitement liée au :
1. Système de Pondération
Identifier les bonnes caractéristiques à prendre en compte ;
Donner un poids (une valeur numérique conséquente) à chacune
des caractéristiques. Les valeurs associées à une caractéristique
devront être cohérentes, pour l’ensemble des objets.
2. Choix de la Distance
Une bonne distance devra pouvoir mettre en lumière les objets
similaires et les affecter à un même cluster.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation du clustering
Distance Inter-clusters
x
y
(0,0)
Grande distance inter-cluster
x
y
(0,0)
petite distance inter-cluster
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation du clustering
Distance Intra-clusters
x
y
(0,0)
Grande distance intra-cluster
x
y
(0,0)
petite distance intra-cluster
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Présentation du clutering
• Similarité et dissimilarité
• Une métrique de similarité/dissimilarité est exprimée par une
distance.
• La distance dépend du type des données : binaires,
nominales, ordinales ou continues.
• La pondération des dimensions selon l’application et la
sémantique des données.
• La notion de similarité est assez difficile à définir : la réponse
est très subjective.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithmes de clustering sous Mahout
• Mode d’utilisation des algorithmes
• Distances sous Mahout
• Schéma général des algorithmes
• Principe de l’Algorithme de Canopy
• Algorithme Canopy
• Algorithme K-means
• Algorithme Fuzzy K-means
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithmes de clustering sous Mahout
• Introduction
• Mahout propose plusieurs algorithmes de clustering dont :
• Canopy
• K-means
• Fuzy K-means
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithmes de clustering sous Mahout
• Mode d’utilisation des algorithmes
• Deux modes d’utilisation des algorithmes sous Mahout
1. Mode 1 : ligne de commande
2. Mode 2 : via l’API Mahout
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithmes de clustering sous Mahout
• Données fournies en Entrées des algorithmes
• Les vecteurs d’entrée (sous forme de SequenceFile)
• Les clusters initiaux ( sous forme de SequenceFile)
• La mesure de similarité (Distance)
• La précision pour la convergence
• Le nombre d’itérations
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithmes de clustering sous Mahout
• caractéristique d’une distance
• d(x,y) >= 0
• d(x,y) = 0 ssi x = y
• La symétrie : d(x,y) = d(y,x)
• Inégalité triangulaire : d(x,y) =< d(x,z) + d(z,y)
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithmes de clustering sous Mahout
• Distances proposées par Mahout
• Distance euclidienne d x, y 	ൌ	 ∑ ሺ‫ݔ‬௜ െ	‫ݕ‬௜ሻଶ௡
௜ୀଵ
• Squared Euclidean distance measure d x, y 	ൌ	∑ ሺ‫ݔ‬௜ െ	‫ݕ‬௜ሻଶ௡
௜ୀଵ
• Distance Manhattan d x, y 	ൌ	∑ ‫ݔ‬௜ െ	‫ݕ‬௜
௡
௜ୀଵ
• Cosine distance d x, y 	ൌ 	1 െ		
∑ ௫೔	௬೔
೙
೔సభ
∑ ௫೔
మ೙
೔సభ 	 ∑ ௬೔
మ೙
೔సభ
൘
• DistanceTanimoto
d x, y 	ൌ 1 െ
∑ ‫ݔ‬௜‫ݕ‬௜
௡
௜ୀଵ
∑ ‫ݔ‬௜
ଶ௡
௜ୀଵ ൅ ∑ ‫ݕ‬௜
ଶ௡
௜ୀଵ െ ∑ ‫ݔ‬௜‫ݕ‬௜
௡
௜ୀଵ
൙
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithmes de clustering sous Mahout
Générer les vecteurs
via les données
Ecrire les vecteurs
dans un dossier
Ecrire les clusters
initiaux
Moteur de
clustering
Clusters générés
Schéma général des algorithmes
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithmes de clustering sous Mahout
• Algorithme de Canopy : principe
• C’est un algorithme de classification non supervisé.
• Il vise à construire un des canopy « qui peuvent se
chevaucher » d’une manière rapide.
• Il fait partie de la phase de prétraitement pour k-means ou
clustering hiérarchique.
• Il est essentiellement utilisé pour accélérer la mise en place
des grappes pour des instances de grande taille.
• Cet algorithme ne nécessite pas la spécification du nombre
de clusters.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithmes de Canopy
1. Entrée
• Ensemble des points E
• Distance d
• T1 et T2 deux seuils, T1 > T2
2. Sélectionner un élément x au hasard dans E.
3. Créer un canopy Cx en utilisant les y : d(x,y) < T1
4. Supprimer les y de E tels que d(x,y) < T2
5. Si E est non vide, aller à l’étape 2
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
K-means : caractéristiques
1. Il s’agit d’un algorithme de partitionnement.
2. L’objectif est de construire une partition à k clusters d’une
base de n objets
3. Chaque cluster est représenté par son centre (centroid)
4. Le nombre k de clusters est une entrée
5. Le codage des variables et la distance utilisée ont un
impact sur le résultat.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithme Kmeans
Entrée
• E, ensemble de points
• D, distance
• K, nombre de cluster
1. Choisir k objets Mi (i=1..k) formant ainsi k clusters ;
2. Affecter chaque objet O de E au cluster Ch de centre Mh
tel que d(O, Mh) est minimale ( d(O,Mh) <= d(O, Mi ),
i=1..k) ;
3. Recalculer Mi de chaque cluster (le barycentre) ;
4. Aller à l’étape 2 si on vient de faire une affectation (lors de
l’itération courante).
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Fuzzy K-means : Caractéristiques
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Algorithme Fuzzy K-means
Entrée
• ݊ points, ‫ݔ‬௜		݅ ൌ 1. . ݊,
• ܿ nombre de clusters,
• ݉ le degré flou et ߝ		le seuil de convergence
1- Choisir aléatoirement c centres	‫ܥ‬௝		݆ ൌ 1. . ܿ
2- Initialiser la matrice ܷ : ‫ݑ‬௜௝ ൌ
ଵ
∑
ೣ೔ష೎ೕ
ೣ೔ష೎ೖ
మ
೘షభ
೎
ೖసభ
3- À l’étape 3, actualiser d’abord ‫ܥ‬ et puis ܷ
ܿ௝ ൌ
∑ ௨೔ೕ
೘
௫೔
೙
೔సభ
∑ ௨೔ೕ
೘೙
೔సభ
		݆ ൌ 1. . ܿ, 			݁‫ݑ		ݐ‬௜௝ ൌ
ଵ
∑
ೣ೔ష೎ೕ
ೣ೔ష೎ೖ
మ
೘షభ
೎
ೖసభ
				݅ ൌ 1. . ݊, ݆ ൌ 1. . ܿ
4- Si max௜௝ ‫ݑ‬௜௝
௛ାଵ
െ	‫ݑ‬௜௝
௛
	൑ 	ߝ			stop, sinon aller à l étape 3
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Clustering en ligne de commande
• Algorithme canopy en ligne de commande
• Algorithme K-means en ligne de commande
• Algorithme FuzzyKemans en ligne de commande
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Canopies en ligne de commande
• bin/mahout canopybin/mahout canopybin/mahout canopybin/mahout canopy 
• i <input vectors directory> 
• o <output working directory> 
• dm <DistanceMeasure> 
• t1 <T1 threshold> 
• t2 <T2 threshold> 
• t3 <optional reducer T1 threshold> 
• t4 <optional reducer T2 threshold> 
• cf <optional cluster filter size (default: 0)> 
• ow <overwrite output directory if present>
• cl <run input vector clustering after computing Canopies>
• xm <execution method: sequential or mapreduce>
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
K-means en ligne de commande
• bin/mahout kmeans 
• i <input vectors directory> 
• c <input clusters directory> 
• o <output working directory> 
• k <optional number of initial clusters to sample from input vectors> 
• dm <DistanceMeasure> 
• x <maximum number of iterations> 
• cd <optional convergence delta. Default is 0.5> 
• ow <overwrite output directory if present>
• cl <run input vector clustering after computing Canopies>
• xm <execution method: sequential or mapreduce>
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Fuzzy K-means en ligne de commande
bin/mahout fkmeans 
• -i <input vectors directory> 
• -c <input clusters directory> 
• -o <output working directory> 
• -dm <DistanceMeasure> 
• -m <fuzziness argument >1> 
• -x <maximum number of iterations> 
• -k <optional number of initial clusters to sample from input vectors> 
• -cd <optional convergence delta. Default is 0.5> 
• -ow <overwrite output directory if present>
• -cl <run input vector clustering after computing Clusters>
• -e <emit vectors to most likely cluster during clustering>
• -t <threshold to use for clustering if -e is false>
• -xm <execution method: sequential or mapreduce>
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
API Clustering sous Mahout
• Le package Canopy
• Les packages relatifs à K-means
• Les packages relatifs à Fuzzy K-means
• L’arborescence des classes de type driver
• L’arborescence des classe de type cluster
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
A propos de l’API Clustering
• L’organisation des packages des algorithmes (canopy, k-
means, fuzzy k-means) est similaire.
• Chacun des trois algorithmes repose sur une classe driver
CanopyDriver pour l’algorithme canopy
KMeansDriver pour pour l’algorithme k-means
FuzzyKMeansDriver pour l’algorithme Fuzzy K-means
• La structure des trois classes drivers est similaire.
• Les classes drivers disposent des mêmes méthodes :
run, buildcluster, clusterData
• La description de l’API concerne la version 0.9 de Mahout.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Package Canopy
• Package org.apache.mahout.clustering.canopy
Ce package présente les classes relatives à l’algorithme
canopy pour les modes séquentiel et parallèle (mapreduce).
• CanopyDriver
C’est la classe principale. C’est le point d’entrée de
l’algorithme.
Cette classe encapsule les étapes de l’algorithme canopy pour les
différents modes d’exécution.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Package org.apache.mahout.clustering.canopy
• Les classes de ce package :
• CanopyDriver
• Canopy
• CanopyClusterer
• CanopyConfigKeys
• CanopyMapper
• CanopyReducer
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe canopy
• Cette classe encapsule les données d’un canopy
• Elle étend la classe DistanceMeasureCluster
• DistanceMeasureCluster étend AbstractCluster
• AstractCluster implémente Cluster
• Constructeurs
public Canopy()
public Canopy(Vector center, int canopyId, DistanceMeasure measure)
• Services
Creer un canopy
Calculer le barycentre
Ajouter un point a un canopy
Et des getters et setters
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Classe CanopyClusterer (1)
• Cette classe permet de gérer les canopy
• CanopyMapper, CanopyReducer et CanopyDrivers font
appel à cette classe.
• Constructeurs
public CanopyClusterer(DistanceMeasure measure, double t1, double t2)
public CanopyClusterer(Configuration config)
• Services
• addPointToCanopie ajoute un point aux canopy
public void addPointToCanopies(Vector, Collection<Canopy> )
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Classe CanopyClusterer (2)
• canopyCovers teste si un point est couvert par un canopy
public boolean canopyCovers(Canopy, Vector)
• createCanopies crée des canopy en utilisant vecteurs et seuils
public static List<Canopy> createCanopies(List<Vector> points,
DistanceMeasure measure, double t1, double t2)
• getCenters retourne les barycentres des canopy
public static List<Vector> getCenters(Iterable<Canopy> canopies)
• updateCentroid actualise le barycentre de chaque canopy
public static void updateCentroids(Iterable<Canopy> canopies)
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe CanopyConfigKeys
• C’est une classe finale.
• Elle ne comporte aucune méthode.
• Les attributs portent le qualificatif public static final.
• Elle encapsule l’ensemble des clés utilisées relatives au
seuil de canopy.
• Elle encapsule aussi la mesure de la distance.
• Elle dispose d’un constructeur sans arguments.
• Les attributs de cette classe sont utilisés par les classes
CanopyMapper, CanopyRudcer, CanopyDriver et
CanopyClusterer
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Les classes CanapyMapper et CanopyReducer
• Les classes CanopyMapper et CanopyReducer sont utilisées
dans le mode parallèle pour construire les canopy.
• Elles sont appelées par la méthode buildClustersMR de la
classe CanopyDriver
• CanopyMapper redéfinit la méthode mapper() ainsi que stup()
et cleanup().
• CanopyReducer redéfinit les méthodes reducer() et stup()
• Les deux classes CanopyMapper et CanopyReducer font
appel aux classes Canoyp, CanopyClusterer et CanopyConfig
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe CanopyDriver
• La classe principale qui gère les étapes de l’algorithme
• Elle étend AbstractJob
• Les deux principales méthodes sont
public static void run(…)
public static Path buildClusters(…)
• Les méthodes précédentes font appel à :
Algorithme séquentielAlgorithme séquentielAlgorithme séquentielAlgorithme séquentiel : private static Path buildClustersSeq(…)
Algorithme parallèleAlgorithme parallèleAlgorithme parallèleAlgorithme parallèle : private static Path buildClustersMR(…)
Calcul des points des clustersCalcul des points des clustersCalcul des points des clustersCalcul des points des clusters : private static void clusterData (…)
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe CanopyDriver : séquence d’appel dans run(…)
1. Construire les clusters en appelant buildClusters(..)
a. Si runSequentiel = true alors
- Appeler la méthode séquentielle buildClustersSeq(…)
b. Sinon Appeler la méthode parallèle buildClustersMR()
2. Calculer des points de chaque clusters
a. Si runClustering = true alors
- Appeler la méthode clusterData()
b. Fin Si
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Packages relatifs à l’algorithme K-means
• Deux principaux package regroupent les classes de
l’algorithme K-means :
org.apache.mahout.clustering.kmeans ;
org.apache.mahout.clustering.iterator.
• Le package org.apache.mahout.clustering.kmeans pilote les
différentes étapes de l’algorithme k means.
• Le package org.apache.mahout.clustering.iterator se charge de
l’implémentation des algorithmes séquentiel et parallèle de k
means.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Package org.apache.mahout.clustering.kmeans
• Ce package est composé de plusieurs classes.
• La classe principale est KMeansDriver .
• C’est la classe KMeansDriver qui sera utilisée via l’API.
• Les classes de ce package sont :
Kluster : elle permet de créer un cluster. Elle étend
DistanceMeasureCluster
KMeansUtil : C’est une classe finale qui permet de créer une
liste de kluster.
KMeansConfigKeys : il dispose des clés qui seront utilisées
par la configuration relative à mapreduce
KMeansDriver : c’est la classe principale disposant des
méthodes qui seront exploitées via l’API pour l’algorithme K-
means
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe KMeansDriver
• Cette classe dispose d’un ensemble de méthodes permettant la
mise en œuvre de l’algorithme K-means.
• La méthode principale est run(…)
• La méthode run à trois signatures différentes.
• Deux méthodes statiques et une public non statique.
1. Run1 : publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid runrunrunrun(Configuration conf, Path input, Path clustersIn, Path
output, double convergenceDelta, int maxIterations, boolean runClustering, double
clusterClassificationThreshold, boolean runSequential)
2. Run2 : publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid runrunrunrun(Path input, Path , Path double , int , boolean , double,
boolean )
3. Run3 : publicpublicpublicpublic intintintint runrunrunrun(String[] )
• Run2 crée une configuration et fait appel à Run1.
• Run3, utilisée via la ligne de commande, instancie les données et fait
appel à Run1.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe KMeansDriver : la méthode run()
• La méthode Run1 fait appel à deux méthodes :
public static Path buildClusters(Configuration conf, Path input, Path clustersIn, Path
output, int maxIterations, String delta, boolean runSequential)
public static void clusterData(Configuration conf, Path input, Path clustersIn, Path
output, double clusterClassificationThreshold, boolean runSequential)
• Les arguments de la méthodes run()
input, clustersIn, output : les dossiers pour les vecteurs d’entrée, les clusters initiaux,
et le dossier de sortie. Les fichiers utilisés sont de type séquentiel (SequenceFile). Le
dossier de sortie de l’itération courante est utilisé comme entrée pour l’itération suivante
convergenceDelta : un nombre réel positif est utilisé pour la convergence.
clusterClassificationThreshold : il doit être dans [0,1], utilisé dans clusterData() pour
la constitution des points relatifs à chaque cluster.
maxIterations : le nombre maximum d’itérations fixé pour le calcul des clusters.
runSequential : il détermine le mode d’exécution ( séquentiel ou parallèle)
runClustering : si sa valeur est vraie, les points des clusters sont calculés et stockés
dans un dossier nommé clusteredPoints.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Packages relatifs à l’algorithme Fuzzy K-means
• Deux principaux packages regroupent les classes de
l’algorithme Fuzzy K-means :
org.apache.mahout.clustering. fuzzykmeans
org.apache.mahout.clustering.iterator
• Le package org.apache.mahout.clustering. fuzzykmeans pilote
les différentes étapes de l’algorithme Fuzzy k means. Ce
dernier à une structure similaire à celle du package de K means.
• Le package org.apache.mahout.clustering.iterator se charge de
l’implemantation des algorithmes séquentiel et parallèle de
l’algorithme Fuzzy k means.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Package org.apache.mahout.clustering.fuzzykmeans
• Ce package est composé de plusieurs classes dont la
principale est FuzzyKMeansDriver .
• Les classes de ce package sont :
SoftCluster : elle permet de créer un cluster. Elle étend Kluster.
FuzzyKMeansUtil : C’est une classe finale qui permet de créer
une liste de SoftCluster.
FuzzyKMeansClusterer : elle permet de calculer le degré
d’affinité d’un point par rapport à un cluster.
FuzzyKMeansConfigKeys : elle dispose d’une clé qui sera
utilisée par la configuration relative à mapreduce.
FuzzyKMeansDriver : c’est la classe principale disposant des
méthodes qui seront exploitées via l’API.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe FuzzyKMeansDriver
• Cette classe dispose d’un ensemble de méthodes permettant la
mise en œuvre de l’algorithme Fuzzy K-Means.
• Cette classe est très similaire à la classe KmeansDriver.
• La méthode principale est run(…).
• La méthode run() à trois signatures différentes :
1. Run1 : publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid runrunrunrun(Configuration conf, Path input, Path clustersIn, Path
output, double convergenceDelta, int maxIterations, floatfloatfloatfloat mmmm, boolean runClustering,
booleanbooleanbooleanboolean emitMostLikelyemitMostLikelyemitMostLikelyemitMostLikely, double threshold,, boolean runSequential)
2. Run2 : publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid runrunrunrun(Path input, Path , Path, double , int, floatfloatfloatfloat ,,,, boolean ,
booleanbooleanbooleanboolean ,,,, double , boolean )
3. Run3 : publicpublicpublicpublic intintintint runrunrunrun(String[] )
• Run3 instancie les données et fait appel à Run1.
• la méthode Run3 est utilisée via la ligne de commande.
• Run2 ne dispose pas d’une configuration comme argument d’entrée.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe FUZZYKMeansDriver
• Comme la méthode run() de la classe KmeansDriver, La méthode
run() fait appel à deux méthodes :
void buildClusters( …)
Void clusterData()
• Les arguments de la méthode run() :
float m : ce paramètre, spécifique à l’algorithme fuzzy k-means,
décrit le degré d’affinité.
boolean emitMostLikely : si sa valeur est « vraie », on associe le
cluster le plus probable à chaque point.
double threshold : il est utilisé si emitMostLikely est « false ». Il est
similaire à clusterClassificationThreshol utilisé dans la méthode run
de l’algorithme KmeansDriver.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Arborescence de la classe de type « cluster »
DistanceMeasureCluster
Canopy
AbstractCluster
Object
<<Interface>>
cluster
org.apache.hadoop.util.Tool
Kluster
<<Interface>>
Model
bind<VectorWritable>
<<Interface>>
Parametered
Arborescence de la classe Canopy et Kluster
SoftCluster
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Arborescence des classes de type Driver
org.apache.hadoop.util.Tool
AbstractJob
CanopyDriver
org.apache.hadoop.conf.Configured
Interface
org.apache.hadoop.util.Tool
KmeansDriver FuzzyKMeansDriver
SpectralKMeansDriver
Interface
org.apache.hadoop.conf.Configurable
Java.lang.Object
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
API Math de Mahout
• Interface vector
• Cette interface regroupe un ensemble d’opérations
relatives à un vecteur.
• Package : org.apache.mahout.math
• Interface Matrix
• Cette interface regroupe un ensemble d’opérations
relatives à une matrice.
• Package : org.apache.mahout.math
Les deux interfaces sont implémentées par plusieurs classes
(voir la doc).
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
API Math de Mahout
• Fichiers séquentiels
• Objectif : ecrire/lire une paire de key/value.
• Package : org.apache.hadoop.io.SequenceFile
• SequenceFile est un format Hadoop pour encoder une série de
clé-valeur.
• SequenceFile fournit deux classes internes : Writer et Reader
• La clé et la valeur doivent respectivement implémenter les
interfaces WritableComparable et Writable de hadoop.
• Les classes SequenceFile.Writer et SequenceFile.Reader sont
utilisées pour la génération des données sous forme d’un fichier
séquentiel ou la lecture des fichiers des clusters.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
API Math de Mahout
Fichiers séquentiels (Writer et Reader)
• La classe SequenceFile.Writer
SequenceFile.Writer(FileSystem, Configuration, Path,Class,Class) constructeurconstructeurconstructeurconstructeur
void append(Object key, Object val) ajouterajouterajouterajouter ((((kyekyekyekye,,,, valvalvalval) de type object) de type object) de type object) de type object.
void append(Writable key, Writable val) ajouterajouterajouterajouter un (key,un (key,un (key,un (key, valvalvalval))))
void close() fermerfermerfermerfermer lelelele fichierfichierfichierfichier
• La classe SequenceFile.Reader
SequenceFile.Reader(FileSystem, Path, Configuration) constructeurconstructeurconstructeurconstructeur
Class<?> getKeyClass() renvoyerrenvoyerrenvoyerrenvoyer lalalala classeclasseclasseclasse de lade lade lade la cléclécléclé
Class<?> getValueClass() renvoyer la classe de la valeurrenvoyer la classe de la valeurrenvoyer la classe de la valeurrenvoyer la classe de la valeur
boolean next(Writable key, Writable val) lire lalire lalire lalire la prochaineprochaineprochaineprochaine pair <key, value>pair <key, value>pair <key, value>pair <key, value>
void close() fermerfermerfermerfermer lelelele fichierfichierfichierfichier
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
API Math de Mahout
L’interface distance et ses Implémentations
• L’interface DistanceMeasure présente un ensemble de
services relatifs à une distance.
• Package : org.apache.mahout.common.distance
• Cette interface est implémentée par plusieurs classes dont :
• EuclideanDistanceMeasure : distance euclidienne 2 d
• SquaredEuclideanDistanceMeasure : distance euclidienne
• ManhattanDistanceMeasure : Distance de Manhattan
• CosineDistanceMeasure : distance cosinus
• TanimotoDistanceMeasure : distance de Tanimoto
• etc.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Évaluation des clusterings
• Evaluation des algorithmes de clustering
• API Mahout pour l’affichage des clusters
• API Mahout pour l’évaluation des clusters
• Diagrammes et relation de dépendance
• Exécution en ligne de commande
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Évaluation des algorithme de clustering
• Mahout propose des outils pour évaluer la qualité des
résultats obtenus par un algorithme de clustering.
• L’évaluation d’un clustering se fait à travers :
1. L’affichage et la visualisation des clusters générés ;
2. L’étude de la distance intra-clusters et inter-clusters.
• Trois packages sont dédiés à l’analyse et à l’évaluation des
clusters :
1. org.apache.mahout.utils.clustering
2. org.apache.mahout.clustering.evaluation
3. package org.apache.mahout.clustering.cdbw
• Ces 3 packages sont dans le module « integration » de la
version 0.9 de Mahout.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Affichage et visualisation des clusters
• Le package org.apache.mahout.utils.clustering propose des
classes dédiées à l’affichage sous différents formats.
• La classe clé du package est ClusterDumper.
• ClusterDumper affiche les clusters selon le format spécifié.
• Elle supporte plusieurs formats :
TEXT, CSV, JSON, GRAPH_ML
• L’affichage par format est délégué à des classes du package.
• ClusterDumper est une classe finale et étend la classe
AbstractJob.
• ClusterDumper peut être utilisée via l’API Mahout ou en ligne de
commande en passant par bin/bin/bin/bin/mahoutmahoutmahoutmahout....
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Formats d’affichage des clusters
• Plusieurs classes sont dédiées aux formats d’affichage.
• Ces classes implémentent la classe abstraite AbstractClusterWriterAbstractClusterWriterAbstractClusterWriterAbstractClusterWriter
• AbstractClusterWriterAbstractClusterWriterAbstractClusterWriterAbstractClusterWriter implémente l’interface ClusterWriterClusterWriterClusterWriterClusterWriter.
• ClusterWriterClusterWriterClusterWriterClusterWriter dispose d’une seule méthode writewritewritewrite avec 3 signatures
pour afficher une liste de clusters de type ClusterWritableClusterWritableClusterWritableClusterWritable.
• Mahout offre 4 implémentations de la classe AbstractClusterWriterAbstractClusterWriterAbstractClusterWriterAbstractClusterWriter :
1.1.1.1. ClusterDumperWriterClusterDumperWriterClusterDumperWriterClusterDumperWriter pour générer du format TEXTTEXTTEXTTEXT
2.2.2.2. CSVClusterWriterCSVClusterWriterCSVClusterWriterCSVClusterWriter pour générer du format CVSCVSCVSCVS
3.3.3.3. GraphMLClusterWriterGraphMLClusterWriterGraphMLClusterWriterGraphMLClusterWriter pour générer du format GraphMLGraphMLGraphMLGraphML
4.4.4.4. JsonClusterWriterJsonClusterWriterJsonClusterWriterJsonClusterWriter pour générer du format JSONJSONJSONJSON
• Le format se configure via la classe ClusterDumperClusterDumperClusterDumperClusterDumper avec la méthode
setOutputFormatsetOutputFormatsetOutputFormatsetOutputFormat (), option(), option(), option(), option of en ligne de commande.of en ligne de commande.of en ligne de commande.of en ligne de commande.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe ClusterDumper
• ObjectifObjectifObjectifObjectif : Afficher et visualiser les clusters afin d’en apprécier la qualité.
• Elle transforme les résultats de type SequenceFile en un format lisible.
• Trois principales méthodesTrois principales méthodesTrois principales méthodesTrois principales méthodes
voidvoidvoidvoid printClustersprintClustersprintClustersprintClusters(String[](String[](String[](String[] dictionarydictionarydictionarydictionary)))) : pour afficher les clusters ;
publicpublicpublicpublic intintintint runrunrunrun(String[](String[](String[](String[] argsargsargsargs)))) : pour lancer l’affichage en ligne de
commande via bin/mahout. Cette méthode fait appel à printClustersprintClustersprintClustersprintClusters() ;() ;() ;() ;
voidvoidvoidvoid setOutputFormatsetOutputFormatsetOutputFormatsetOutputFormat(OUTPUT_FORMAT of(OUTPUT_FORMAT of(OUTPUT_FORMAT of(OUTPUT_FORMAT of)))) : pour fixer le format
d’affichage.
OUTPUT_FORMAT est un champs public, de type énumération de la classe
ClusterDumper, permettant de spécifier le format d’affichage.
• ConstructeursConstructeursConstructeursConstructeurs
public ClusterDumper(Path seqFileClusterIn, Path pointsClustered) ;
public ClusterDumper().
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Densités Inter-clusters et Intra-clusters
• Pour un grand volume de données, il est impossible d’afficher et
d’observer les clusters.
• L’alternative est d’utiliser les distances Inter-clusters et Intra-
clusters mesurant resp. la séparation et la compacité des clusters
• Distance Inter-clusters vise à :
• évaluer la distance entre chaque paire de centroids ;
• mesurer l’éloignement/rapprochement des clusters.
• Distance Intra-clusters vise à :
• évaluer la distance entre chaque paire d’objets du même cluster ;
• mesurer le rapprochement des points au sein du même cluster ;
• exprimer la capacité de la mesure de similarité à retrouver et regrouper
des objets similaires.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Distances Inter-clusters et Intra-clusters
• Mahout fournit 2 packages pour :
calculer les distances intra-cluster et inter-cluster ;
calculer et afficher les points des différents clusters.
• Les packages sont :
org.apache.mahout.clustering.evaluation ;
org.apache.mahout.clustering.cdbw.
• Les 3 principales classes sont :
RepresentativePointsDriverRepresentativePointsDriverRepresentativePointsDriverRepresentativePointsDriver : pour calculer et afficher les points des clusters ;
ClusterEvaluatorClusterEvaluatorClusterEvaluatorClusterEvaluator : pour calculer les distances intra/inter clusters ;
CDbwEvaluatorCDbwEvaluatorCDbwEvaluatorCDbwEvaluator : pour calculer densité intra/inter clusters à l’aide de la
méthode CDbw.
• En mode parallèle, la classe RepresentativePointsDriver fait appel aux
classes suivantes :
RepresentativePointsMapperRepresentativePointsMapperRepresentativePointsMapperRepresentativePointsMapper
RepresentativePointsReducerRepresentativePointsReducerRepresentativePointsReducerRepresentativePointsReducer
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Classe RepresentativePointsDriver (1)
• Cette classe permet de créer et d’afficher les points par itération.
• Il s’agit d’une classe finale, qui étend la classe AbstractJobAbstractJobAbstractJobAbstractJob....
• Elle est aussi utilisée lors du calcul des densités intra-cluster par
les classes d’évaluation ClusterEvaluatorClusterEvaluatorClusterEvaluatorClusterEvaluator etetetet CDbwEvaluatorCDbwEvaluatorCDbwEvaluatorCDbwEvaluator....
• CetteCetteCetteCette classeclasseclasseclasse doitdoitdoitdoit etreetreetreetre appeléeappeléeappeléeappelée apresapresapresapres avoiravoiravoiravoir calculécalculécalculécalculé les clustersles clustersles clustersles clusters ainsiainsiainsiainsi quequequeque les points.les points.les points.les points.
• LesLesLesLes deuxdeuxdeuxdeux principalesprincipalesprincipalesprincipales méthodesméthodesméthodesméthodes de lade lade lade la classeclasseclasseclasse sontsontsontsont :
Run ()Run ()Run ()Run () : pour calculer les points à chaque itération
printRepresentativePoints (..) : pour afficher les points par itération en
utilisant les données générées par la méthode run().
L’argument runSequential de run() précise le mode d’exécution :
runSequential égal « true », pour le mode séquentiel ;
runSequentiel égal « false », pour le mode parallèle.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Classe RepresentativePointsDriver (2)
• Ses méthodes « publics » sont des méthodes de classe (static).
• Notons aussi que la classe est finale et a d’un constructeur privé.
• Les méthodes « public » sont :
publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid runrunrunrun(Configuration(Configuration(Configuration(Configuration confconfconfconf,,,, PathPathPathPath clustersInclustersInclustersInclustersIn,,,, PathPathPathPath
clusteredPointsInclusteredPointsInclusteredPointsInclusteredPointsIn,,,, PathPathPathPath output,output,output,output, DistanceMeasureDistanceMeasureDistanceMeasureDistanceMeasure measuremeasuremeasuremeasure,,,, intintintint
numIterationsnumIterationsnumIterationsnumIterations,,,, booleanbooleanbooleanboolean runSequentialrunSequentialrunSequentialrunSequential) throws IOException,
InterruptedException : calculer les points/iteration
publicpublicpublicpublic intintintint run(String[]run(String[]run(String[]run(String[] argsargsargsargs)))) throws ClassNotFoundException,
IOException, InterruptedException : constituer les params et fait appel à
la methode run() precedente.
publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid printRepresentativePointsprintRepresentativePointsprintRepresentativePointsprintRepresentativePoints((((PathPathPathPath output,output,output,output, intintintint
numIterationsnumIterationsnumIterationsnumIterations)))) : afficher les points pour les iterations k ( k <
numIterations).
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Formules des densités Inter/Intra-clusters
(pour la classe ClusterEvaluator )
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe ClusterEvaluator
• Les méthodes sont :
• Map<Map<Map<Map<Integer,VectorInteger,VectorInteger,VectorInteger,Vector>>>> interClusterDistancesinterClusterDistancesinterClusterDistancesinterClusterDistances()()()()
Calculer la distance pour chaque paire de «centroids».
• doubledoubledoubledouble interClusterDensityinterClusterDensityinterClusterDensityinterClusterDensity()()()()
Calculer la densité inter clusters ;
Cette méthode fait appel à la méthode interClusterDistances() .
• publicpublicpublicpublic Map<Map<Map<Map<Integer,VectorInteger,VectorInteger,VectorInteger,Vector>>>> interClusterDistancesinterClusterDistancesinterClusterDistancesinterClusterDistances()()()()
Calculer la distance entre chaque paire de points du meme cluster.
• doubledoubledoubledouble intraClusterDensityintraClusterDensityintraClusterDensityintraClusterDensity()()()()
Calculer la densité intra cluster ;
Cette méthode fait appel à la méthode interClusterDistances().
• Deux Constructeurs
• publicpublicpublicpublic ClusterEvaluatorClusterEvaluatorClusterEvaluatorClusterEvaluator(Map<(Map<(Map<(Map<Integer,ListInteger,ListInteger,ListInteger,List<<<<VectorWritableVectorWritableVectorWritableVectorWritable>>,>>,>>,>>,
List<Cluster> ,List<Cluster> ,List<Cluster> ,List<Cluster> , DistanceMeasureDistanceMeasureDistanceMeasureDistanceMeasure))))
• ClusterEvaluatorClusterEvaluatorClusterEvaluatorClusterEvaluator(Configuration(Configuration(Configuration(Configuration confconfconfconf,,,, PathPathPathPath clustersInclustersInclustersInclustersIn))))
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe CDbwEvaluator (1)
• Le calcul des densités s’appuyent sur la métrique CDBw (Compose
Density between and within clusters).
• CDbwEvaluator appartient au package
org.apache.mahout.clustering.cdbw.
• CDbw utilise un ensemble de points pour représenter le cluster (à
l’inverse des approches utilisant le centroid).
• La compacité des clusters est évaluée par la formule d’intra-cluster
density.
• La séparation des clusters est évaluée par une formule qui tient à la
fois compte des distances entre les clusters et l’intra-cluster density.
• La classe ClusterDumper fait appel aux méthodes de la classe
CDBwEvaluator pour l’évaluation des clusters.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe CDbwEvaluator (2)
• Constructeurs
public CDbwEvaluator(Map<Integer,List<VectorWritable>>
representativePoints, List<Cluster> clusters, DistanceMeasure measure) ;
public CDbwEvaluator(Configuration conf, Path clustersIn).
• Les principales méthodes publics sont :
public doublepublic doublepublic doublepublic double intraClusterDensityintraClusterDensityintraClusterDensityintraClusterDensity()()()() : evalue le pourcentage de points
appartenant au voisinage des points choisis pour représenter les
clusters. L’objectif étant d’avoir une valeur élevée de cette densité.
publicpublicpublicpublic doubledoubledoubledouble interClusterDensityinterClusterDensityinterClusterDensityinterClusterDensity()()()() : evalue la densité moyenne des
points dans les zones situées entre les clusters. L’objectif étant d’avoir
la plus faible densité pour ces régions.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
La classe ClusterDumper et ses dépendances
AbstractClusterWriter
JsonClusterWriter
CvsClusterWriter
GraphClusterWriter
ClusterDumperWriter
Closeable
AbstractJob
ClusterDumper
<<Interface>>
ClusterWriter
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Liens entre ClusterEvaluator, CDBwEvaluator,
ClsuterDumper et leurs dépendances
RepresentativePointsDriver
ClusterEvaluator
CDbwEvaluator
AbstractJob
RepresentativePointsMapper
RepresentativePointsReducer
ClusterDumper
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Exécution en ligne de commande : ClusterDumper (1)
bin/mahout clusterdump
• input ( i) <input Path to job input directory> 
• output ( o) < output file; if not specified, it prints the output to the
console.> 
• outputFormat ( of) <outputFormat The optional output format for the
results. Options: TEXT, CSV, JSON or GRAPH_ML .> 
• substring ( b) <substring The number of chars of the asFormatString()
to print>
• evaluate ( e) <Run ClusterEvaluator and CDbwEvaluator over the
input. The output will be appended to the rest of the output at the end. >
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Exécution en ligne de commande : ClusterDumper (2)
• samplePoints ( sp) <samplePoints Specifies the maximum number of
points to include per cluster. The default is to include all points. > 
• distanceMeasure ( dm) <distanceMeasure The classname of the
DistanceMeasure. Default is SquaredEuclidean > 
• dictionary ( d) <The dictionary file that contains the reverse mapping
of integer ID to word.> 
• dictionaryType ( dt) <dictionaryType The dictionary file type
(text|sequencefile); defaulted to ‘text’ .> 
• numWords ( n) <The number of top terms to print, defaulted to 10> 
• pointsDir ( p) <pointsDir The directory containing points sequence
files mapping input vectors to their cluster. If specified, then the program
will output the points associated with a cluster. > 
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
ClusterDumper : exemples en ligne de commande
Exemple 1
bin/mahout clusterdump 
-i <OUTPUT DIR>/output/clusters-10-final 
-o <OUTPUT DIR>/output/clustersanalyze.txt
Exemple 2
• l’option –-evaluate permet de calculer les distances Inter et Intra-clusters
• bin/mahout clusterdump 
-i <OUTPUT DIR>/output/clusters-10-final 
-p <OUTPUT DIR>/output/clusteredPoints 
-o /clusterPointsanalyze.txt 
--evaluate
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Les auteurs
• Mustapha MICHRAFY
• Bull/Fastconnect
• Bernard KOUAKOU
• CGI inc.
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
Contact des auteurs :
datascience.km@gmail.com
Références
• Data Mining et statistique décisionnelle, Stéphane TUFFÉRY
• Mahout en Action, Sean Owen, Robin Anil, Ted Dunning, Ellen Friedman
• Site web de mahout : http://mahout.apache.org/
• Mahout 0.9 API : https://builds.apache.org/job/Mahout Quality/javadoc/
• Évaluation CDbw : http://www.db net.aueb.gr/files/HV_shortSETN02.pdf
• Mahout svn (vesrion 0.1 à 0.9) : http://svn.apache.org/repos/asf/mahout/tags/
• Mahout svn (version plus récente dans trunk) :
http://svn.apache.org/repos/asf/mahout/trunk/
Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com

More Related Content

What's hot

AI Apprentissage Automatique, Machine Learnig
AI Apprentissage Automatique, Machine LearnigAI Apprentissage Automatique, Machine Learnig
AI Apprentissage Automatique, Machine LearnigFelipe Sanchez Garzon
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Riadh K.
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkAmal Abid
 
Installation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidInstallation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidAmal Abid
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2Amal Abid
 
La classification des Emails utilisant le modèle MapReduce
La classification des Emails utilisant le modèle MapReduce La classification des Emails utilisant le modèle MapReduce
La classification des Emails utilisant le modèle MapReduce Nour El Houda Megherbi
 
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliotheque
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliothequeEcole ESMA : Rapport de projet - Application de gestion d'une bibliotheque
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliothequeMehdi Hamime
 
Rapport pfe isi_Big data Analytique
Rapport pfe isi_Big data AnalytiqueRapport pfe isi_Big data Analytique
Rapport pfe isi_Big data AnalytiqueYosra ADDALI
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & SparkAlexia Audevart
 
PFE BI - INPT
PFE BI - INPTPFE BI - INPT
PFE BI - INPTriyadadva
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3Amal Abid
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduceAmal Abid
 
Système de recommandations de films
Système de recommandations de filmsSystème de recommandations de films
Système de recommandations de filmsIbn Tofail University
 
Reconnaissance faciale
Reconnaissance facialeReconnaissance faciale
Reconnaissance facialebgdu49xxx
 
Rapport de projet odoo
Rapport de projet odooRapport de projet odoo
Rapport de projet odooayoub damir
 
Analyse de sentiments dans les médias sociaux
Analyse de sentiments dans les médias sociauxAnalyse de sentiments dans les médias sociaux
Analyse de sentiments dans les médias sociauxYacine Yakoubi
 

What's hot (20)

AI Apprentissage Automatique, Machine Learnig
AI Apprentissage Automatique, Machine LearnigAI Apprentissage Automatique, Machine Learnig
AI Apprentissage Automatique, Machine Learnig
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
Installation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abidInstallation hadoopv2.7.4-amal abid
Installation hadoopv2.7.4-amal abid
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
La classification des Emails utilisant le modèle MapReduce
La classification des Emails utilisant le modèle MapReduce La classification des Emails utilisant le modèle MapReduce
La classification des Emails utilisant le modèle MapReduce
 
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliotheque
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliothequeEcole ESMA : Rapport de projet - Application de gestion d'une bibliotheque
Ecole ESMA : Rapport de projet - Application de gestion d'une bibliotheque
 
Les systèmes de recommandations
Les systèmes de recommandationsLes systèmes de recommandations
Les systèmes de recommandations
 
Rapport pfe isi_Big data Analytique
Rapport pfe isi_Big data AnalytiqueRapport pfe isi_Big data Analytique
Rapport pfe isi_Big data Analytique
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & Spark
 
PFE BI - INPT
PFE BI - INPTPFE BI - INPT
PFE BI - INPT
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
 
Présentation PFE
Présentation PFEPrésentation PFE
Présentation PFE
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
 
Système de recommandations de films
Système de recommandations de filmsSystème de recommandations de films
Système de recommandations de films
 
Reconnaissance faciale
Reconnaissance facialeReconnaissance faciale
Reconnaissance faciale
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
 
Rapport de projet odoo
Rapport de projet odooRapport de projet odoo
Rapport de projet odoo
 
Analyse de sentiments dans les médias sociaux
Analyse de sentiments dans les médias sociauxAnalyse de sentiments dans les médias sociaux
Analyse de sentiments dans les médias sociaux
 

Viewers also liked

Machine learning pour tous
Machine learning pour tousMachine learning pour tous
Machine learning pour tousDamien Seguy
 
Mahout classification presentation
Mahout classification presentationMahout classification presentation
Mahout classification presentationNaoki Nakatani
 
Machine learning, deep learning et search : à quand ces innovations dans nos ...
Machine learning, deep learning et search : à quand ces innovations dans nos ...Machine learning, deep learning et search : à quand ces innovations dans nos ...
Machine learning, deep learning et search : à quand ces innovations dans nos ...Antidot
 
Introduction au Machine Learning
Introduction au Machine LearningIntroduction au Machine Learning
Introduction au Machine LearningMathieu Goeminne
 
Machine learning
Machine learningMachine learning
Machine learningebiznext
 
Mix it2014 - Machine Learning et Régulation Numérique
Mix it2014 - Machine Learning et Régulation NumériqueMix it2014 - Machine Learning et Régulation Numérique
Mix it2014 - Machine Learning et Régulation NumériqueDidier Girard
 
Machine intelligente d’analyse financiere
Machine intelligente d’analyse financiereMachine intelligente d’analyse financiere
Machine intelligente d’analyse financiereSabrine MASTOURA
 
Apprentissage Automatique et moteurs de recherche
Apprentissage Automatique et moteurs de rechercheApprentissage Automatique et moteurs de recherche
Apprentissage Automatique et moteurs de recherchePhilippe YONNET
 
Analyse financière
Analyse financièreAnalyse financière
Analyse financièreAbdo attar
 
Ia project Apprentissage Automatique
Ia project Apprentissage AutomatiqueIa project Apprentissage Automatique
Ia project Apprentissage AutomatiqueNizar Bechir
 
TP2 Big Data HBase
TP2 Big Data HBaseTP2 Big Data HBase
TP2 Big Data HBaseAmal Abid
 
Machine Learning and Apache Mahout : An Introduction
Machine Learning and Apache Mahout : An IntroductionMachine Learning and Apache Mahout : An Introduction
Machine Learning and Apache Mahout : An IntroductionVarad Meru
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1Amal Abid
 

Viewers also liked (13)

Machine learning pour tous
Machine learning pour tousMachine learning pour tous
Machine learning pour tous
 
Mahout classification presentation
Mahout classification presentationMahout classification presentation
Mahout classification presentation
 
Machine learning, deep learning et search : à quand ces innovations dans nos ...
Machine learning, deep learning et search : à quand ces innovations dans nos ...Machine learning, deep learning et search : à quand ces innovations dans nos ...
Machine learning, deep learning et search : à quand ces innovations dans nos ...
 
Introduction au Machine Learning
Introduction au Machine LearningIntroduction au Machine Learning
Introduction au Machine Learning
 
Machine learning
Machine learningMachine learning
Machine learning
 
Mix it2014 - Machine Learning et Régulation Numérique
Mix it2014 - Machine Learning et Régulation NumériqueMix it2014 - Machine Learning et Régulation Numérique
Mix it2014 - Machine Learning et Régulation Numérique
 
Machine intelligente d’analyse financiere
Machine intelligente d’analyse financiereMachine intelligente d’analyse financiere
Machine intelligente d’analyse financiere
 
Apprentissage Automatique et moteurs de recherche
Apprentissage Automatique et moteurs de rechercheApprentissage Automatique et moteurs de recherche
Apprentissage Automatique et moteurs de recherche
 
Analyse financière
Analyse financièreAnalyse financière
Analyse financière
 
Ia project Apprentissage Automatique
Ia project Apprentissage AutomatiqueIa project Apprentissage Automatique
Ia project Apprentissage Automatique
 
TP2 Big Data HBase
TP2 Big Data HBaseTP2 Big Data HBase
TP2 Big Data HBase
 
Machine Learning and Apache Mahout : An Introduction
Machine Learning and Apache Mahout : An IntroductionMachine Learning and Apache Mahout : An Introduction
Machine Learning and Apache Mahout : An Introduction
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1
 

Similar to Mahout clustering

Présentation sur le Data Mining
Présentation sur le Data MiningPrésentation sur le Data Mining
Présentation sur le Data MiningTakfarinas KENOUCHE
 
Introduction au Machine Learning
Introduction au Machine Learning Introduction au Machine Learning
Introduction au Machine Learning Novagen Conseil
 
Rapport de stage fatma karem
Rapport de stage fatma karemRapport de stage fatma karem
Rapport de stage fatma karemfatmakarem
 
Automatic Subspace Clustering of High Dimensional Data for Data Mining Applic...
Automatic Subspace Clustering of High Dimensional Data for DataMining Applic...Automatic Subspace Clustering of High Dimensional Data for DataMining Applic...
Automatic Subspace Clustering of High Dimensional Data for Data Mining Applic...Hajer Trabelsi
 
Data mining - Segmentation(k-means, cah)
Data mining - Segmentation(k-means, cah)Data mining - Segmentation(k-means, cah)
Data mining - Segmentation(k-means, cah)Mohamed Heny SELMI
 
Séminaire IA & VA- Dominique Gruyer, Univ Gustave Eiffel
Séminaire IA & VA- Dominique Gruyer, Univ Gustave EiffelSéminaire IA & VA- Dominique Gruyer, Univ Gustave Eiffel
Séminaire IA & VA- Dominique Gruyer, Univ Gustave EiffelMahdi Zarg Ayouna
 
Méthodologie de mise en place d'observatoires virtuels via les métadonnées
Méthodologie de mise en place d'observatoires virtuels via les métadonnéesMéthodologie de mise en place d'observatoires virtuels via les métadonnées
Méthodologie de mise en place d'observatoires virtuels via les métadonnéesDesconnets Jean-Christophe
 
CHAP 1 PRÉSENTATION GENERALE.pdf
CHAP 1 PRÉSENTATION GENERALE.pdfCHAP 1 PRÉSENTATION GENERALE.pdf
CHAP 1 PRÉSENTATION GENERALE.pdfamine17157
 
Data Mining (Partie 1).pdf
Data Mining (Partie 1).pdfData Mining (Partie 1).pdf
Data Mining (Partie 1).pdfOuailChoukhairi
 
Rapport kmeans
Rapport kmeans Rapport kmeans
Rapport kmeans Imen Turki
 
Introduction au Deep Learning
Introduction au Deep Learning Introduction au Deep Learning
Introduction au Deep Learning Niji
 
📝 ✅ La checklist ultime pour rendre vos applications cloud native
📝 ✅ La checklist ultime pour rendre vos applications cloud native 📝 ✅ La checklist ultime pour rendre vos applications cloud native
📝 ✅ La checklist ultime pour rendre vos applications cloud native KatiaHIMEUR1
 
Exposé segmentation
Exposé segmentationExposé segmentation
Exposé segmentationDonia Hammami
 
Collecte des données métiers et constitution d'un entrepôt centrale
Collecte des données métiers et constitution d'un entrepôt centraleCollecte des données métiers et constitution d'un entrepôt centrale
Collecte des données métiers et constitution d'un entrepôt centraleoussama Hafid
 
Scenarisation d’un module d’enseignement en ligne
Scenarisation d’un module d’enseignement en ligneScenarisation d’un module d’enseignement en ligne
Scenarisation d’un module d’enseignement en ligneMerlin Lamago
 
DesignPatternsISI.pdf
DesignPatternsISI.pdfDesignPatternsISI.pdf
DesignPatternsISI.pdfandre543581
 

Similar to Mahout clustering (20)

test
testtest
test
 
Présentation sur le Data Mining
Présentation sur le Data MiningPrésentation sur le Data Mining
Présentation sur le Data Mining
 
Introduction au Machine Learning
Introduction au Machine Learning Introduction au Machine Learning
Introduction au Machine Learning
 
Rapport de stage fatma karem
Rapport de stage fatma karemRapport de stage fatma karem
Rapport de stage fatma karem
 
5.5 Clustering
5.5 Clustering5.5 Clustering
5.5 Clustering
 
Automatic Subspace Clustering of High Dimensional Data for Data Mining Applic...
Automatic Subspace Clustering of High Dimensional Data for DataMining Applic...Automatic Subspace Clustering of High Dimensional Data for DataMining Applic...
Automatic Subspace Clustering of High Dimensional Data for Data Mining Applic...
 
Data mining - Segmentation(k-means, cah)
Data mining - Segmentation(k-means, cah)Data mining - Segmentation(k-means, cah)
Data mining - Segmentation(k-means, cah)
 
Séminaire IA & VA- Dominique Gruyer, Univ Gustave Eiffel
Séminaire IA & VA- Dominique Gruyer, Univ Gustave EiffelSéminaire IA & VA- Dominique Gruyer, Univ Gustave Eiffel
Séminaire IA & VA- Dominique Gruyer, Univ Gustave Eiffel
 
Debuteraveclesmls
DebuteraveclesmlsDebuteraveclesmls
Debuteraveclesmls
 
Méthodologie de mise en place d'observatoires virtuels via les métadonnées
Méthodologie de mise en place d'observatoires virtuels via les métadonnéesMéthodologie de mise en place d'observatoires virtuels via les métadonnées
Méthodologie de mise en place d'observatoires virtuels via les métadonnées
 
CHAP 1 PRÉSENTATION GENERALE.pdf
CHAP 1 PRÉSENTATION GENERALE.pdfCHAP 1 PRÉSENTATION GENERALE.pdf
CHAP 1 PRÉSENTATION GENERALE.pdf
 
Data Mining (Partie 1).pdf
Data Mining (Partie 1).pdfData Mining (Partie 1).pdf
Data Mining (Partie 1).pdf
 
Rapport kmeans
Rapport kmeans Rapport kmeans
Rapport kmeans
 
Algorithme knn
Algorithme knnAlgorithme knn
Algorithme knn
 
Introduction au Deep Learning
Introduction au Deep Learning Introduction au Deep Learning
Introduction au Deep Learning
 
📝 ✅ La checklist ultime pour rendre vos applications cloud native
📝 ✅ La checklist ultime pour rendre vos applications cloud native 📝 ✅ La checklist ultime pour rendre vos applications cloud native
📝 ✅ La checklist ultime pour rendre vos applications cloud native
 
Exposé segmentation
Exposé segmentationExposé segmentation
Exposé segmentation
 
Collecte des données métiers et constitution d'un entrepôt centrale
Collecte des données métiers et constitution d'un entrepôt centraleCollecte des données métiers et constitution d'un entrepôt centrale
Collecte des données métiers et constitution d'un entrepôt centrale
 
Scenarisation d’un module d’enseignement en ligne
Scenarisation d’un module d’enseignement en ligneScenarisation d’un module d’enseignement en ligne
Scenarisation d’un module d’enseignement en ligne
 
DesignPatternsISI.pdf
DesignPatternsISI.pdfDesignPatternsISI.pdf
DesignPatternsISI.pdf
 

Mahout clustering

  • 1. CLUSTERING SOUS MAHOUT Dr Mustapha MICHRAFY Dr Bernard KOUAKOU Contact des auteurs : datascience.km@gmail.com Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 2. Plan • Présentation de Mahout • Présentation du clustering • Les algorithmes de clustering • Clustering en ligne de commande • API clustering • Évaluation des clusters Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 3. Présentation de Mahout • Objectif • Caractéristique • Compilation des sources • Format et représentation de données Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 4. Présentation de Mahout • Mahout : objectif • Mahout est un API Java dédié aux algorithmes d’apprentissage, à savoir: Recommandation Clustering Classification • Mahout supporte l’écosystème Hadoop Les algorithmes sont programmés sous le paradigme MapReduce Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 5. Mahout : caractéristique • Mahout est un projet Apache, open source • Il est évolutif (« scalable ») • Portable ( API Java) • Algorithmes en deux modes Exécutable sous le framework hadoop En séquentiel Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 6. Mahout : Compilation des sources • Prérequis Maven 2 et plus Java 6 • Étapes de la compilation des sources télécharger les sources de Mahout (Mahout-distribution-version- src.zip) dézipper le fichier téléchargé aller à la racine du dossier Mahout compiler les sources : mvn install Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 7. Mahout : Installation et configuration • Prérequis • Java • Et Hadoop (pour les version mapreduce) • Installation télécharger Mahout (Mahout-distribution-version-src.zip) dézipper le fichier téléchargé dans le dossier home/opt • Configuration • Ajouter le dossier Mahout dans le classpath Ouvrir .bashrc export Mahout_HOME=/home/opt/dossier_Mahout export PATH=$PATH:$MAHOUT_HOME/bin • Pointer sur Hadoop Ouvrir le fichier bin/mahout et fixer la valeur de HADOOP_CONF_DIR HADOOP_CONF_DIR=Home/Path_Hadoop Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 8. Présentation de mahout • Format et représentation de données • Sélection des caractéristiques et vectorisation : Identifier un ensemble de caractéristiques pertinentes des objets à grouper ; Attribuer des valeurs numériques aux caractéristiques retenues pour les objets ; Vectorisation : Représenter chaque objet par un vecteur en utilisant ces valeurs numériques. Si n caractéristiques ont été retenues, alors un vecteur de dimensions n est construit pour chaque objet. • Mahout prend en entrée seulement les fichiers séquentiels Écrire donc tous les vecteurs dans un même fichier de type « SequenceFile ». Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 9. Présentation du clustering • Objectif du Clustering • Classement des méthodes de « Clustering » • Critère de distinction des méthodes • Qualité d’une méthode de clustering • Similarité et dissimilarité Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 10. Présentation du clustering • Clustering : objectif • Il vise à répartir l'échantillon en groupes d'observations homogènes. • Chaque groupe est bien différencié des autres. • Certaines méthodes visent à construire une hiérarchie, c-à- d une suite de partitions « emboîtées », de plus en plus fines, sur un ensemble d'observations (objets) initial. Cette hiérarchie peut être résumée par un arbre hiérarchique. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 11. Présentation du clustering • Classement des méthodes de « Clustering » • Méthodes de type CAH Ce sont les méthodes construisant une hiérarchie par agrégations successives d’objets, puis de groupes, en fonction des distances entre objets ou groupes. • Méthodes de type CDH Elles procèdent par dichotomie itérative : l’ensemble des éléments est divisé en deux, puis chacune de ses parties est, à son tour subdivisée, et ainsi de suite. • Méthode de partitionnement Elles visent à construire une partition de l’ensemble des données initiales selon certains critères. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 12. Présentation du clustering • Critère de distinction des méthodes (1) • Trois points permettent de distinguer les méthodes. • Point 1 : Le principe de construction des groupes Procéder séquentiellement en regroupant les observations les plus « semblables » en premier lieu ; c’est le principe des méthodes hiérarchiques. Ou regrouper simultanément en k groupes toutes les observations. C’est le principe des méthodes non- hiérarchiques. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 13. Présentation du clustering • Critère de distinction des méthodes (2) • Point 2 : Le critère de similarité/distance entre deux observations/variables. • Point 3 : Le critère de similarité/distance entre deux groupes ou entre une observation et un groupe. ??? ??? ??? Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 14. Présentation du clustering • Qualité d’une méthode de clustering (1) • Une bonne méthode produit des clusters ayant : une forte similarité intra‐classe ; une faible similarité inter‐classe. • La qualité d’un clustering dépend de la mesure de similarité. • La qualité d’une méthode peut aussi être mesurée par sa capacité à identifier des motifs pertinents. • En pratique, une fonction est utilisée pour la mesure de la qualité. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 15. Présentation du clustering • Qualité d’une méthode de clustering (2) • la qualité des clusters est étroitement liée au : 1. Système de Pondération Identifier les bonnes caractéristiques à prendre en compte ; Donner un poids (une valeur numérique conséquente) à chacune des caractéristiques. Les valeurs associées à une caractéristique devront être cohérentes, pour l’ensemble des objets. 2. Choix de la Distance Une bonne distance devra pouvoir mettre en lumière les objets similaires et les affecter à un même cluster. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 16. Présentation du clustering Distance Inter-clusters x y (0,0) Grande distance inter-cluster x y (0,0) petite distance inter-cluster Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 17. Présentation du clustering Distance Intra-clusters x y (0,0) Grande distance intra-cluster x y (0,0) petite distance intra-cluster Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 18. Présentation du clutering • Similarité et dissimilarité • Une métrique de similarité/dissimilarité est exprimée par une distance. • La distance dépend du type des données : binaires, nominales, ordinales ou continues. • La pondération des dimensions selon l’application et la sémantique des données. • La notion de similarité est assez difficile à définir : la réponse est très subjective. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 19. Algorithmes de clustering sous Mahout • Mode d’utilisation des algorithmes • Distances sous Mahout • Schéma général des algorithmes • Principe de l’Algorithme de Canopy • Algorithme Canopy • Algorithme K-means • Algorithme Fuzzy K-means Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 20. Algorithmes de clustering sous Mahout • Introduction • Mahout propose plusieurs algorithmes de clustering dont : • Canopy • K-means • Fuzy K-means Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 21. Algorithmes de clustering sous Mahout • Mode d’utilisation des algorithmes • Deux modes d’utilisation des algorithmes sous Mahout 1. Mode 1 : ligne de commande 2. Mode 2 : via l’API Mahout Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 22. Algorithmes de clustering sous Mahout • Données fournies en Entrées des algorithmes • Les vecteurs d’entrée (sous forme de SequenceFile) • Les clusters initiaux ( sous forme de SequenceFile) • La mesure de similarité (Distance) • La précision pour la convergence • Le nombre d’itérations Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 23. Algorithmes de clustering sous Mahout • caractéristique d’une distance • d(x,y) >= 0 • d(x,y) = 0 ssi x = y • La symétrie : d(x,y) = d(y,x) • Inégalité triangulaire : d(x,y) =< d(x,z) + d(z,y) Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 24. Algorithmes de clustering sous Mahout • Distances proposées par Mahout • Distance euclidienne d x, y ൌ ∑ ሺ‫ݔ‬௜ െ ‫ݕ‬௜ሻଶ௡ ௜ୀଵ • Squared Euclidean distance measure d x, y ൌ ∑ ሺ‫ݔ‬௜ െ ‫ݕ‬௜ሻଶ௡ ௜ୀଵ • Distance Manhattan d x, y ൌ ∑ ‫ݔ‬௜ െ ‫ݕ‬௜ ௡ ௜ୀଵ • Cosine distance d x, y ൌ 1 െ ∑ ௫೔ ௬೔ ೙ ೔సభ ∑ ௫೔ మ೙ ೔సభ ∑ ௬೔ మ೙ ೔సభ ൘ • DistanceTanimoto d x, y ൌ 1 െ ∑ ‫ݔ‬௜‫ݕ‬௜ ௡ ௜ୀଵ ∑ ‫ݔ‬௜ ଶ௡ ௜ୀଵ ൅ ∑ ‫ݕ‬௜ ଶ௡ ௜ୀଵ െ ∑ ‫ݔ‬௜‫ݕ‬௜ ௡ ௜ୀଵ ൙ Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 25. Algorithmes de clustering sous Mahout Générer les vecteurs via les données Ecrire les vecteurs dans un dossier Ecrire les clusters initiaux Moteur de clustering Clusters générés Schéma général des algorithmes Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 26. Algorithmes de clustering sous Mahout • Algorithme de Canopy : principe • C’est un algorithme de classification non supervisé. • Il vise à construire un des canopy « qui peuvent se chevaucher » d’une manière rapide. • Il fait partie de la phase de prétraitement pour k-means ou clustering hiérarchique. • Il est essentiellement utilisé pour accélérer la mise en place des grappes pour des instances de grande taille. • Cet algorithme ne nécessite pas la spécification du nombre de clusters. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 27. Algorithmes de Canopy 1. Entrée • Ensemble des points E • Distance d • T1 et T2 deux seuils, T1 > T2 2. Sélectionner un élément x au hasard dans E. 3. Créer un canopy Cx en utilisant les y : d(x,y) < T1 4. Supprimer les y de E tels que d(x,y) < T2 5. Si E est non vide, aller à l’étape 2 Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 28. K-means : caractéristiques 1. Il s’agit d’un algorithme de partitionnement. 2. L’objectif est de construire une partition à k clusters d’une base de n objets 3. Chaque cluster est représenté par son centre (centroid) 4. Le nombre k de clusters est une entrée 5. Le codage des variables et la distance utilisée ont un impact sur le résultat. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 29. Algorithme Kmeans Entrée • E, ensemble de points • D, distance • K, nombre de cluster 1. Choisir k objets Mi (i=1..k) formant ainsi k clusters ; 2. Affecter chaque objet O de E au cluster Ch de centre Mh tel que d(O, Mh) est minimale ( d(O,Mh) <= d(O, Mi ), i=1..k) ; 3. Recalculer Mi de chaque cluster (le barycentre) ; 4. Aller à l’étape 2 si on vient de faire une affectation (lors de l’itération courante). Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 30. Fuzzy K-means : Caractéristiques Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 31. Algorithme Fuzzy K-means Entrée • ݊ points, ‫ݔ‬௜ ݅ ൌ 1. . ݊, • ܿ nombre de clusters, • ݉ le degré flou et ߝ le seuil de convergence 1- Choisir aléatoirement c centres ‫ܥ‬௝ ݆ ൌ 1. . ܿ 2- Initialiser la matrice ܷ : ‫ݑ‬௜௝ ൌ ଵ ∑ ೣ೔ష೎ೕ ೣ೔ష೎ೖ మ ೘షభ ೎ ೖసభ 3- À l’étape 3, actualiser d’abord ‫ܥ‬ et puis ܷ ܿ௝ ൌ ∑ ௨೔ೕ ೘ ௫೔ ೙ ೔సభ ∑ ௨೔ೕ ೘೙ ೔సభ ݆ ൌ 1. . ܿ, ݁‫ݑ ݐ‬௜௝ ൌ ଵ ∑ ೣ೔ష೎ೕ ೣ೔ష೎ೖ మ ೘షభ ೎ ೖసభ ݅ ൌ 1. . ݊, ݆ ൌ 1. . ܿ 4- Si max௜௝ ‫ݑ‬௜௝ ௛ାଵ െ ‫ݑ‬௜௝ ௛ ൑ ߝ stop, sinon aller à l étape 3 Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 32. Clustering en ligne de commande • Algorithme canopy en ligne de commande • Algorithme K-means en ligne de commande • Algorithme FuzzyKemans en ligne de commande Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 33. Canopies en ligne de commande • bin/mahout canopybin/mahout canopybin/mahout canopybin/mahout canopy • i <input vectors directory> • o <output working directory> • dm <DistanceMeasure> • t1 <T1 threshold> • t2 <T2 threshold> • t3 <optional reducer T1 threshold> • t4 <optional reducer T2 threshold> • cf <optional cluster filter size (default: 0)> • ow <overwrite output directory if present> • cl <run input vector clustering after computing Canopies> • xm <execution method: sequential or mapreduce> Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 34. K-means en ligne de commande • bin/mahout kmeans • i <input vectors directory> • c <input clusters directory> • o <output working directory> • k <optional number of initial clusters to sample from input vectors> • dm <DistanceMeasure> • x <maximum number of iterations> • cd <optional convergence delta. Default is 0.5> • ow <overwrite output directory if present> • cl <run input vector clustering after computing Canopies> • xm <execution method: sequential or mapreduce> Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 35. Fuzzy K-means en ligne de commande bin/mahout fkmeans • -i <input vectors directory> • -c <input clusters directory> • -o <output working directory> • -dm <DistanceMeasure> • -m <fuzziness argument >1> • -x <maximum number of iterations> • -k <optional number of initial clusters to sample from input vectors> • -cd <optional convergence delta. Default is 0.5> • -ow <overwrite output directory if present> • -cl <run input vector clustering after computing Clusters> • -e <emit vectors to most likely cluster during clustering> • -t <threshold to use for clustering if -e is false> • -xm <execution method: sequential or mapreduce> Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 36. API Clustering sous Mahout • Le package Canopy • Les packages relatifs à K-means • Les packages relatifs à Fuzzy K-means • L’arborescence des classes de type driver • L’arborescence des classe de type cluster Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 37. A propos de l’API Clustering • L’organisation des packages des algorithmes (canopy, k- means, fuzzy k-means) est similaire. • Chacun des trois algorithmes repose sur une classe driver CanopyDriver pour l’algorithme canopy KMeansDriver pour pour l’algorithme k-means FuzzyKMeansDriver pour l’algorithme Fuzzy K-means • La structure des trois classes drivers est similaire. • Les classes drivers disposent des mêmes méthodes : run, buildcluster, clusterData • La description de l’API concerne la version 0.9 de Mahout. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 38. Package Canopy • Package org.apache.mahout.clustering.canopy Ce package présente les classes relatives à l’algorithme canopy pour les modes séquentiel et parallèle (mapreduce). • CanopyDriver C’est la classe principale. C’est le point d’entrée de l’algorithme. Cette classe encapsule les étapes de l’algorithme canopy pour les différents modes d’exécution. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 39. Package org.apache.mahout.clustering.canopy • Les classes de ce package : • CanopyDriver • Canopy • CanopyClusterer • CanopyConfigKeys • CanopyMapper • CanopyReducer Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 40. La classe canopy • Cette classe encapsule les données d’un canopy • Elle étend la classe DistanceMeasureCluster • DistanceMeasureCluster étend AbstractCluster • AstractCluster implémente Cluster • Constructeurs public Canopy() public Canopy(Vector center, int canopyId, DistanceMeasure measure) • Services Creer un canopy Calculer le barycentre Ajouter un point a un canopy Et des getters et setters Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 41. Classe CanopyClusterer (1) • Cette classe permet de gérer les canopy • CanopyMapper, CanopyReducer et CanopyDrivers font appel à cette classe. • Constructeurs public CanopyClusterer(DistanceMeasure measure, double t1, double t2) public CanopyClusterer(Configuration config) • Services • addPointToCanopie ajoute un point aux canopy public void addPointToCanopies(Vector, Collection<Canopy> ) Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 42. Classe CanopyClusterer (2) • canopyCovers teste si un point est couvert par un canopy public boolean canopyCovers(Canopy, Vector) • createCanopies crée des canopy en utilisant vecteurs et seuils public static List<Canopy> createCanopies(List<Vector> points, DistanceMeasure measure, double t1, double t2) • getCenters retourne les barycentres des canopy public static List<Vector> getCenters(Iterable<Canopy> canopies) • updateCentroid actualise le barycentre de chaque canopy public static void updateCentroids(Iterable<Canopy> canopies) Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 43. La classe CanopyConfigKeys • C’est une classe finale. • Elle ne comporte aucune méthode. • Les attributs portent le qualificatif public static final. • Elle encapsule l’ensemble des clés utilisées relatives au seuil de canopy. • Elle encapsule aussi la mesure de la distance. • Elle dispose d’un constructeur sans arguments. • Les attributs de cette classe sont utilisés par les classes CanopyMapper, CanopyRudcer, CanopyDriver et CanopyClusterer Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 44. Les classes CanapyMapper et CanopyReducer • Les classes CanopyMapper et CanopyReducer sont utilisées dans le mode parallèle pour construire les canopy. • Elles sont appelées par la méthode buildClustersMR de la classe CanopyDriver • CanopyMapper redéfinit la méthode mapper() ainsi que stup() et cleanup(). • CanopyReducer redéfinit les méthodes reducer() et stup() • Les deux classes CanopyMapper et CanopyReducer font appel aux classes Canoyp, CanopyClusterer et CanopyConfig Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 45. La classe CanopyDriver • La classe principale qui gère les étapes de l’algorithme • Elle étend AbstractJob • Les deux principales méthodes sont public static void run(…) public static Path buildClusters(…) • Les méthodes précédentes font appel à : Algorithme séquentielAlgorithme séquentielAlgorithme séquentielAlgorithme séquentiel : private static Path buildClustersSeq(…) Algorithme parallèleAlgorithme parallèleAlgorithme parallèleAlgorithme parallèle : private static Path buildClustersMR(…) Calcul des points des clustersCalcul des points des clustersCalcul des points des clustersCalcul des points des clusters : private static void clusterData (…) Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 46. La classe CanopyDriver : séquence d’appel dans run(…) 1. Construire les clusters en appelant buildClusters(..) a. Si runSequentiel = true alors - Appeler la méthode séquentielle buildClustersSeq(…) b. Sinon Appeler la méthode parallèle buildClustersMR() 2. Calculer des points de chaque clusters a. Si runClustering = true alors - Appeler la méthode clusterData() b. Fin Si Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 47. Packages relatifs à l’algorithme K-means • Deux principaux package regroupent les classes de l’algorithme K-means : org.apache.mahout.clustering.kmeans ; org.apache.mahout.clustering.iterator. • Le package org.apache.mahout.clustering.kmeans pilote les différentes étapes de l’algorithme k means. • Le package org.apache.mahout.clustering.iterator se charge de l’implémentation des algorithmes séquentiel et parallèle de k means. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 48. Package org.apache.mahout.clustering.kmeans • Ce package est composé de plusieurs classes. • La classe principale est KMeansDriver . • C’est la classe KMeansDriver qui sera utilisée via l’API. • Les classes de ce package sont : Kluster : elle permet de créer un cluster. Elle étend DistanceMeasureCluster KMeansUtil : C’est une classe finale qui permet de créer une liste de kluster. KMeansConfigKeys : il dispose des clés qui seront utilisées par la configuration relative à mapreduce KMeansDriver : c’est la classe principale disposant des méthodes qui seront exploitées via l’API pour l’algorithme K- means Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 49. La classe KMeansDriver • Cette classe dispose d’un ensemble de méthodes permettant la mise en œuvre de l’algorithme K-means. • La méthode principale est run(…) • La méthode run à trois signatures différentes. • Deux méthodes statiques et une public non statique. 1. Run1 : publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid runrunrunrun(Configuration conf, Path input, Path clustersIn, Path output, double convergenceDelta, int maxIterations, boolean runClustering, double clusterClassificationThreshold, boolean runSequential) 2. Run2 : publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid runrunrunrun(Path input, Path , Path double , int , boolean , double, boolean ) 3. Run3 : publicpublicpublicpublic intintintint runrunrunrun(String[] ) • Run2 crée une configuration et fait appel à Run1. • Run3, utilisée via la ligne de commande, instancie les données et fait appel à Run1. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 50. La classe KMeansDriver : la méthode run() • La méthode Run1 fait appel à deux méthodes : public static Path buildClusters(Configuration conf, Path input, Path clustersIn, Path output, int maxIterations, String delta, boolean runSequential) public static void clusterData(Configuration conf, Path input, Path clustersIn, Path output, double clusterClassificationThreshold, boolean runSequential) • Les arguments de la méthodes run() input, clustersIn, output : les dossiers pour les vecteurs d’entrée, les clusters initiaux, et le dossier de sortie. Les fichiers utilisés sont de type séquentiel (SequenceFile). Le dossier de sortie de l’itération courante est utilisé comme entrée pour l’itération suivante convergenceDelta : un nombre réel positif est utilisé pour la convergence. clusterClassificationThreshold : il doit être dans [0,1], utilisé dans clusterData() pour la constitution des points relatifs à chaque cluster. maxIterations : le nombre maximum d’itérations fixé pour le calcul des clusters. runSequential : il détermine le mode d’exécution ( séquentiel ou parallèle) runClustering : si sa valeur est vraie, les points des clusters sont calculés et stockés dans un dossier nommé clusteredPoints. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 51. Packages relatifs à l’algorithme Fuzzy K-means • Deux principaux packages regroupent les classes de l’algorithme Fuzzy K-means : org.apache.mahout.clustering. fuzzykmeans org.apache.mahout.clustering.iterator • Le package org.apache.mahout.clustering. fuzzykmeans pilote les différentes étapes de l’algorithme Fuzzy k means. Ce dernier à une structure similaire à celle du package de K means. • Le package org.apache.mahout.clustering.iterator se charge de l’implemantation des algorithmes séquentiel et parallèle de l’algorithme Fuzzy k means. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 52. Package org.apache.mahout.clustering.fuzzykmeans • Ce package est composé de plusieurs classes dont la principale est FuzzyKMeansDriver . • Les classes de ce package sont : SoftCluster : elle permet de créer un cluster. Elle étend Kluster. FuzzyKMeansUtil : C’est une classe finale qui permet de créer une liste de SoftCluster. FuzzyKMeansClusterer : elle permet de calculer le degré d’affinité d’un point par rapport à un cluster. FuzzyKMeansConfigKeys : elle dispose d’une clé qui sera utilisée par la configuration relative à mapreduce. FuzzyKMeansDriver : c’est la classe principale disposant des méthodes qui seront exploitées via l’API. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 53. La classe FuzzyKMeansDriver • Cette classe dispose d’un ensemble de méthodes permettant la mise en œuvre de l’algorithme Fuzzy K-Means. • Cette classe est très similaire à la classe KmeansDriver. • La méthode principale est run(…). • La méthode run() à trois signatures différentes : 1. Run1 : publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid runrunrunrun(Configuration conf, Path input, Path clustersIn, Path output, double convergenceDelta, int maxIterations, floatfloatfloatfloat mmmm, boolean runClustering, booleanbooleanbooleanboolean emitMostLikelyemitMostLikelyemitMostLikelyemitMostLikely, double threshold,, boolean runSequential) 2. Run2 : publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid runrunrunrun(Path input, Path , Path, double , int, floatfloatfloatfloat ,,,, boolean , booleanbooleanbooleanboolean ,,,, double , boolean ) 3. Run3 : publicpublicpublicpublic intintintint runrunrunrun(String[] ) • Run3 instancie les données et fait appel à Run1. • la méthode Run3 est utilisée via la ligne de commande. • Run2 ne dispose pas d’une configuration comme argument d’entrée. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 54. La classe FUZZYKMeansDriver • Comme la méthode run() de la classe KmeansDriver, La méthode run() fait appel à deux méthodes : void buildClusters( …) Void clusterData() • Les arguments de la méthode run() : float m : ce paramètre, spécifique à l’algorithme fuzzy k-means, décrit le degré d’affinité. boolean emitMostLikely : si sa valeur est « vraie », on associe le cluster le plus probable à chaque point. double threshold : il est utilisé si emitMostLikely est « false ». Il est similaire à clusterClassificationThreshol utilisé dans la méthode run de l’algorithme KmeansDriver. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 55. Arborescence de la classe de type « cluster » DistanceMeasureCluster Canopy AbstractCluster Object <<Interface>> cluster org.apache.hadoop.util.Tool Kluster <<Interface>> Model bind<VectorWritable> <<Interface>> Parametered Arborescence de la classe Canopy et Kluster SoftCluster Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 56. Arborescence des classes de type Driver org.apache.hadoop.util.Tool AbstractJob CanopyDriver org.apache.hadoop.conf.Configured Interface org.apache.hadoop.util.Tool KmeansDriver FuzzyKMeansDriver SpectralKMeansDriver Interface org.apache.hadoop.conf.Configurable Java.lang.Object Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 57. API Math de Mahout • Interface vector • Cette interface regroupe un ensemble d’opérations relatives à un vecteur. • Package : org.apache.mahout.math • Interface Matrix • Cette interface regroupe un ensemble d’opérations relatives à une matrice. • Package : org.apache.mahout.math Les deux interfaces sont implémentées par plusieurs classes (voir la doc). Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 58. API Math de Mahout • Fichiers séquentiels • Objectif : ecrire/lire une paire de key/value. • Package : org.apache.hadoop.io.SequenceFile • SequenceFile est un format Hadoop pour encoder une série de clé-valeur. • SequenceFile fournit deux classes internes : Writer et Reader • La clé et la valeur doivent respectivement implémenter les interfaces WritableComparable et Writable de hadoop. • Les classes SequenceFile.Writer et SequenceFile.Reader sont utilisées pour la génération des données sous forme d’un fichier séquentiel ou la lecture des fichiers des clusters. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 59. API Math de Mahout Fichiers séquentiels (Writer et Reader) • La classe SequenceFile.Writer SequenceFile.Writer(FileSystem, Configuration, Path,Class,Class) constructeurconstructeurconstructeurconstructeur void append(Object key, Object val) ajouterajouterajouterajouter ((((kyekyekyekye,,,, valvalvalval) de type object) de type object) de type object) de type object. void append(Writable key, Writable val) ajouterajouterajouterajouter un (key,un (key,un (key,un (key, valvalvalval)))) void close() fermerfermerfermerfermer lelelele fichierfichierfichierfichier • La classe SequenceFile.Reader SequenceFile.Reader(FileSystem, Path, Configuration) constructeurconstructeurconstructeurconstructeur Class<?> getKeyClass() renvoyerrenvoyerrenvoyerrenvoyer lalalala classeclasseclasseclasse de lade lade lade la cléclécléclé Class<?> getValueClass() renvoyer la classe de la valeurrenvoyer la classe de la valeurrenvoyer la classe de la valeurrenvoyer la classe de la valeur boolean next(Writable key, Writable val) lire lalire lalire lalire la prochaineprochaineprochaineprochaine pair <key, value>pair <key, value>pair <key, value>pair <key, value> void close() fermerfermerfermerfermer lelelele fichierfichierfichierfichier Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 60. API Math de Mahout L’interface distance et ses Implémentations • L’interface DistanceMeasure présente un ensemble de services relatifs à une distance. • Package : org.apache.mahout.common.distance • Cette interface est implémentée par plusieurs classes dont : • EuclideanDistanceMeasure : distance euclidienne 2 d • SquaredEuclideanDistanceMeasure : distance euclidienne • ManhattanDistanceMeasure : Distance de Manhattan • CosineDistanceMeasure : distance cosinus • TanimotoDistanceMeasure : distance de Tanimoto • etc. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 61. Évaluation des clusterings • Evaluation des algorithmes de clustering • API Mahout pour l’affichage des clusters • API Mahout pour l’évaluation des clusters • Diagrammes et relation de dépendance • Exécution en ligne de commande Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 62. Évaluation des algorithme de clustering • Mahout propose des outils pour évaluer la qualité des résultats obtenus par un algorithme de clustering. • L’évaluation d’un clustering se fait à travers : 1. L’affichage et la visualisation des clusters générés ; 2. L’étude de la distance intra-clusters et inter-clusters. • Trois packages sont dédiés à l’analyse et à l’évaluation des clusters : 1. org.apache.mahout.utils.clustering 2. org.apache.mahout.clustering.evaluation 3. package org.apache.mahout.clustering.cdbw • Ces 3 packages sont dans le module « integration » de la version 0.9 de Mahout. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 63. Affichage et visualisation des clusters • Le package org.apache.mahout.utils.clustering propose des classes dédiées à l’affichage sous différents formats. • La classe clé du package est ClusterDumper. • ClusterDumper affiche les clusters selon le format spécifié. • Elle supporte plusieurs formats : TEXT, CSV, JSON, GRAPH_ML • L’affichage par format est délégué à des classes du package. • ClusterDumper est une classe finale et étend la classe AbstractJob. • ClusterDumper peut être utilisée via l’API Mahout ou en ligne de commande en passant par bin/bin/bin/bin/mahoutmahoutmahoutmahout.... Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 64. Formats d’affichage des clusters • Plusieurs classes sont dédiées aux formats d’affichage. • Ces classes implémentent la classe abstraite AbstractClusterWriterAbstractClusterWriterAbstractClusterWriterAbstractClusterWriter • AbstractClusterWriterAbstractClusterWriterAbstractClusterWriterAbstractClusterWriter implémente l’interface ClusterWriterClusterWriterClusterWriterClusterWriter. • ClusterWriterClusterWriterClusterWriterClusterWriter dispose d’une seule méthode writewritewritewrite avec 3 signatures pour afficher une liste de clusters de type ClusterWritableClusterWritableClusterWritableClusterWritable. • Mahout offre 4 implémentations de la classe AbstractClusterWriterAbstractClusterWriterAbstractClusterWriterAbstractClusterWriter : 1.1.1.1. ClusterDumperWriterClusterDumperWriterClusterDumperWriterClusterDumperWriter pour générer du format TEXTTEXTTEXTTEXT 2.2.2.2. CSVClusterWriterCSVClusterWriterCSVClusterWriterCSVClusterWriter pour générer du format CVSCVSCVSCVS 3.3.3.3. GraphMLClusterWriterGraphMLClusterWriterGraphMLClusterWriterGraphMLClusterWriter pour générer du format GraphMLGraphMLGraphMLGraphML 4.4.4.4. JsonClusterWriterJsonClusterWriterJsonClusterWriterJsonClusterWriter pour générer du format JSONJSONJSONJSON • Le format se configure via la classe ClusterDumperClusterDumperClusterDumperClusterDumper avec la méthode setOutputFormatsetOutputFormatsetOutputFormatsetOutputFormat (), option(), option(), option(), option of en ligne de commande.of en ligne de commande.of en ligne de commande.of en ligne de commande. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 65. La classe ClusterDumper • ObjectifObjectifObjectifObjectif : Afficher et visualiser les clusters afin d’en apprécier la qualité. • Elle transforme les résultats de type SequenceFile en un format lisible. • Trois principales méthodesTrois principales méthodesTrois principales méthodesTrois principales méthodes voidvoidvoidvoid printClustersprintClustersprintClustersprintClusters(String[](String[](String[](String[] dictionarydictionarydictionarydictionary)))) : pour afficher les clusters ; publicpublicpublicpublic intintintint runrunrunrun(String[](String[](String[](String[] argsargsargsargs)))) : pour lancer l’affichage en ligne de commande via bin/mahout. Cette méthode fait appel à printClustersprintClustersprintClustersprintClusters() ;() ;() ;() ; voidvoidvoidvoid setOutputFormatsetOutputFormatsetOutputFormatsetOutputFormat(OUTPUT_FORMAT of(OUTPUT_FORMAT of(OUTPUT_FORMAT of(OUTPUT_FORMAT of)))) : pour fixer le format d’affichage. OUTPUT_FORMAT est un champs public, de type énumération de la classe ClusterDumper, permettant de spécifier le format d’affichage. • ConstructeursConstructeursConstructeursConstructeurs public ClusterDumper(Path seqFileClusterIn, Path pointsClustered) ; public ClusterDumper(). Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 66. Densités Inter-clusters et Intra-clusters • Pour un grand volume de données, il est impossible d’afficher et d’observer les clusters. • L’alternative est d’utiliser les distances Inter-clusters et Intra- clusters mesurant resp. la séparation et la compacité des clusters • Distance Inter-clusters vise à : • évaluer la distance entre chaque paire de centroids ; • mesurer l’éloignement/rapprochement des clusters. • Distance Intra-clusters vise à : • évaluer la distance entre chaque paire d’objets du même cluster ; • mesurer le rapprochement des points au sein du même cluster ; • exprimer la capacité de la mesure de similarité à retrouver et regrouper des objets similaires. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 67. Distances Inter-clusters et Intra-clusters • Mahout fournit 2 packages pour : calculer les distances intra-cluster et inter-cluster ; calculer et afficher les points des différents clusters. • Les packages sont : org.apache.mahout.clustering.evaluation ; org.apache.mahout.clustering.cdbw. • Les 3 principales classes sont : RepresentativePointsDriverRepresentativePointsDriverRepresentativePointsDriverRepresentativePointsDriver : pour calculer et afficher les points des clusters ; ClusterEvaluatorClusterEvaluatorClusterEvaluatorClusterEvaluator : pour calculer les distances intra/inter clusters ; CDbwEvaluatorCDbwEvaluatorCDbwEvaluatorCDbwEvaluator : pour calculer densité intra/inter clusters à l’aide de la méthode CDbw. • En mode parallèle, la classe RepresentativePointsDriver fait appel aux classes suivantes : RepresentativePointsMapperRepresentativePointsMapperRepresentativePointsMapperRepresentativePointsMapper RepresentativePointsReducerRepresentativePointsReducerRepresentativePointsReducerRepresentativePointsReducer Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 68. Classe RepresentativePointsDriver (1) • Cette classe permet de créer et d’afficher les points par itération. • Il s’agit d’une classe finale, qui étend la classe AbstractJobAbstractJobAbstractJobAbstractJob.... • Elle est aussi utilisée lors du calcul des densités intra-cluster par les classes d’évaluation ClusterEvaluatorClusterEvaluatorClusterEvaluatorClusterEvaluator etetetet CDbwEvaluatorCDbwEvaluatorCDbwEvaluatorCDbwEvaluator.... • CetteCetteCetteCette classeclasseclasseclasse doitdoitdoitdoit etreetreetreetre appeléeappeléeappeléeappelée apresapresapresapres avoiravoiravoiravoir calculécalculécalculécalculé les clustersles clustersles clustersles clusters ainsiainsiainsiainsi quequequeque les points.les points.les points.les points. • LesLesLesLes deuxdeuxdeuxdeux principalesprincipalesprincipalesprincipales méthodesméthodesméthodesméthodes de lade lade lade la classeclasseclasseclasse sontsontsontsont : Run ()Run ()Run ()Run () : pour calculer les points à chaque itération printRepresentativePoints (..) : pour afficher les points par itération en utilisant les données générées par la méthode run(). L’argument runSequential de run() précise le mode d’exécution : runSequential égal « true », pour le mode séquentiel ; runSequentiel égal « false », pour le mode parallèle. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 69. Classe RepresentativePointsDriver (2) • Ses méthodes « publics » sont des méthodes de classe (static). • Notons aussi que la classe est finale et a d’un constructeur privé. • Les méthodes « public » sont : publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid runrunrunrun(Configuration(Configuration(Configuration(Configuration confconfconfconf,,,, PathPathPathPath clustersInclustersInclustersInclustersIn,,,, PathPathPathPath clusteredPointsInclusteredPointsInclusteredPointsInclusteredPointsIn,,,, PathPathPathPath output,output,output,output, DistanceMeasureDistanceMeasureDistanceMeasureDistanceMeasure measuremeasuremeasuremeasure,,,, intintintint numIterationsnumIterationsnumIterationsnumIterations,,,, booleanbooleanbooleanboolean runSequentialrunSequentialrunSequentialrunSequential) throws IOException, InterruptedException : calculer les points/iteration publicpublicpublicpublic intintintint run(String[]run(String[]run(String[]run(String[] argsargsargsargs)))) throws ClassNotFoundException, IOException, InterruptedException : constituer les params et fait appel à la methode run() precedente. publicpublicpublicpublic staticstaticstaticstatic voidvoidvoidvoid printRepresentativePointsprintRepresentativePointsprintRepresentativePointsprintRepresentativePoints((((PathPathPathPath output,output,output,output, intintintint numIterationsnumIterationsnumIterationsnumIterations)))) : afficher les points pour les iterations k ( k < numIterations). Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 70. Formules des densités Inter/Intra-clusters (pour la classe ClusterEvaluator ) Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 71. La classe ClusterEvaluator • Les méthodes sont : • Map<Map<Map<Map<Integer,VectorInteger,VectorInteger,VectorInteger,Vector>>>> interClusterDistancesinterClusterDistancesinterClusterDistancesinterClusterDistances()()()() Calculer la distance pour chaque paire de «centroids». • doubledoubledoubledouble interClusterDensityinterClusterDensityinterClusterDensityinterClusterDensity()()()() Calculer la densité inter clusters ; Cette méthode fait appel à la méthode interClusterDistances() . • publicpublicpublicpublic Map<Map<Map<Map<Integer,VectorInteger,VectorInteger,VectorInteger,Vector>>>> interClusterDistancesinterClusterDistancesinterClusterDistancesinterClusterDistances()()()() Calculer la distance entre chaque paire de points du meme cluster. • doubledoubledoubledouble intraClusterDensityintraClusterDensityintraClusterDensityintraClusterDensity()()()() Calculer la densité intra cluster ; Cette méthode fait appel à la méthode interClusterDistances(). • Deux Constructeurs • publicpublicpublicpublic ClusterEvaluatorClusterEvaluatorClusterEvaluatorClusterEvaluator(Map<(Map<(Map<(Map<Integer,ListInteger,ListInteger,ListInteger,List<<<<VectorWritableVectorWritableVectorWritableVectorWritable>>,>>,>>,>>, List<Cluster> ,List<Cluster> ,List<Cluster> ,List<Cluster> , DistanceMeasureDistanceMeasureDistanceMeasureDistanceMeasure)))) • ClusterEvaluatorClusterEvaluatorClusterEvaluatorClusterEvaluator(Configuration(Configuration(Configuration(Configuration confconfconfconf,,,, PathPathPathPath clustersInclustersInclustersInclustersIn)))) Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 72. La classe CDbwEvaluator (1) • Le calcul des densités s’appuyent sur la métrique CDBw (Compose Density between and within clusters). • CDbwEvaluator appartient au package org.apache.mahout.clustering.cdbw. • CDbw utilise un ensemble de points pour représenter le cluster (à l’inverse des approches utilisant le centroid). • La compacité des clusters est évaluée par la formule d’intra-cluster density. • La séparation des clusters est évaluée par une formule qui tient à la fois compte des distances entre les clusters et l’intra-cluster density. • La classe ClusterDumper fait appel aux méthodes de la classe CDBwEvaluator pour l’évaluation des clusters. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 73. La classe CDbwEvaluator (2) • Constructeurs public CDbwEvaluator(Map<Integer,List<VectorWritable>> representativePoints, List<Cluster> clusters, DistanceMeasure measure) ; public CDbwEvaluator(Configuration conf, Path clustersIn). • Les principales méthodes publics sont : public doublepublic doublepublic doublepublic double intraClusterDensityintraClusterDensityintraClusterDensityintraClusterDensity()()()() : evalue le pourcentage de points appartenant au voisinage des points choisis pour représenter les clusters. L’objectif étant d’avoir une valeur élevée de cette densité. publicpublicpublicpublic doubledoubledoubledouble interClusterDensityinterClusterDensityinterClusterDensityinterClusterDensity()()()() : evalue la densité moyenne des points dans les zones situées entre les clusters. L’objectif étant d’avoir la plus faible densité pour ces régions. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 74. La classe ClusterDumper et ses dépendances AbstractClusterWriter JsonClusterWriter CvsClusterWriter GraphClusterWriter ClusterDumperWriter Closeable AbstractJob ClusterDumper <<Interface>> ClusterWriter Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 75. Liens entre ClusterEvaluator, CDBwEvaluator, ClsuterDumper et leurs dépendances RepresentativePointsDriver ClusterEvaluator CDbwEvaluator AbstractJob RepresentativePointsMapper RepresentativePointsReducer ClusterDumper Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 76. Exécution en ligne de commande : ClusterDumper (1) bin/mahout clusterdump • input ( i) <input Path to job input directory> • output ( o) < output file; if not specified, it prints the output to the console.> • outputFormat ( of) <outputFormat The optional output format for the results. Options: TEXT, CSV, JSON or GRAPH_ML .> • substring ( b) <substring The number of chars of the asFormatString() to print> • evaluate ( e) <Run ClusterEvaluator and CDbwEvaluator over the input. The output will be appended to the rest of the output at the end. > Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 77. Exécution en ligne de commande : ClusterDumper (2) • samplePoints ( sp) <samplePoints Specifies the maximum number of points to include per cluster. The default is to include all points. > • distanceMeasure ( dm) <distanceMeasure The classname of the DistanceMeasure. Default is SquaredEuclidean > • dictionary ( d) <The dictionary file that contains the reverse mapping of integer ID to word.> • dictionaryType ( dt) <dictionaryType The dictionary file type (text|sequencefile); defaulted to ‘text’ .> • numWords ( n) <The number of top terms to print, defaulted to 10> • pointsDir ( p) <pointsDir The directory containing points sequence files mapping input vectors to their cluster. If specified, then the program will output the points associated with a cluster. > Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 78. ClusterDumper : exemples en ligne de commande Exemple 1 bin/mahout clusterdump -i <OUTPUT DIR>/output/clusters-10-final -o <OUTPUT DIR>/output/clustersanalyze.txt Exemple 2 • l’option –-evaluate permet de calculer les distances Inter et Intra-clusters • bin/mahout clusterdump -i <OUTPUT DIR>/output/clusters-10-final -p <OUTPUT DIR>/output/clusteredPoints -o /clusterPointsanalyze.txt --evaluate Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com
  • 79. Les auteurs • Mustapha MICHRAFY • Bull/Fastconnect • Bernard KOUAKOU • CGI inc. Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com Contact des auteurs : datascience.km@gmail.com
  • 80. Références • Data Mining et statistique décisionnelle, Stéphane TUFFÉRY • Mahout en Action, Sean Owen, Robin Anil, Ted Dunning, Ellen Friedman • Site web de mahout : http://mahout.apache.org/ • Mahout 0.9 API : https://builds.apache.org/job/Mahout Quality/javadoc/ • Évaluation CDbw : http://www.db net.aueb.gr/files/HV_shortSETN02.pdf • Mahout svn (vesrion 0.1 à 0.9) : http://svn.apache.org/repos/asf/mahout/tags/ • Mahout svn (version plus récente dans trunk) : http://svn.apache.org/repos/asf/mahout/trunk/ Mustapha MICHRAFY & Bernard KOUAKOU datascience.km@gmail.com