Big Data Analytics TP2 1 Objectif 2 Classification non supervisée de

Big Data Analytics TP2
Utilisation de Mahout
Cécile Bothorel, Romain Picot-Clemente
Printemps 2015
1 Objectif
Cette séance de TP utilise des outils Big Data bien connus : la librairie Mahout. C’est une librairie
en constante évolution fournissant l’implémentation distribuée (Hadoop, Spark) d’une multitude
d’algorithmes d’apprentissage / de prédiction pour des très grands jeux de données.
Nous utiliserons la version d’Hadoop de Mahout, sur la machine virtuelle du premier TP VM
cloudera-training2015.
Au terme de ce TP, vous serez capables :
d’utiliser Mahout,
en particulier d’utiliser l’algorithme de classification non supervisée K-Means,
de reproduire une chaîne de traitement de classification de textes,
de résoudre un problème en imaginant votre propre chaîne de traitement utilisant la librairie
Mahout,
de générer des jeux de données de train/test, d’estimer et tester des classifieurs de textes.
2 Classification non supervisée de textes pas à pas
Cette première partie vous initie à la classification non supervisée de textes. Le but est de trouver
des groupes de textes similaires (thème de la Recherche d’Information, Information Retrieval en
Anglais). Nous allons partir de fichiers textes bruts, en générer une représentation vectorielle
(vecteurs de mots), puis utiliser l’algorithme K-Means de la librairie Mahout sur ces vecteurs pour
trouver des clusters de documents.
Suivre pas à pas les instructions ci-dessous.
Télécharger les fichiers .txt présents ici. URLURLURL!!!!!!
Créer un répertoire texts/ dans HDFS.
$ hadoop fs -mkdir ./texts/
Uploader tous les fichiers .txt dans ce répertoire.
1
$ hadoop fs -put *.txt ./texts/
Générer un fichier sequence-file à partir de l’ensemble des documents .txt pour les rendre
utilisables par Mahout. Ce fichier consiste en un ensemble de clefs/valeurs où la clef se réfère
au nom du document .txt et la valeur à son contenu.
$ mahout seqdirectory -i ./texts/ -o ./seqTexts/ -c UTF-8 -chunk 5
# -c pour préciser l’encodage des fichiers textes en UTF-8 ici
# -chunk pour préciser la taille d’un chunk en MegaBytes
Vérifier le fichier généré
$ mahout seqdumper -i ./seqTexts/ | less
Générer un modèle vectoriel1du sequence-file (tf, tf-idf). Les documents seront décrits par
des vecteurs dans l’espace des mots.
$ mahout seq2sparse -i ./seqTexts/ -o ./vectTexts/ -ow -chunk 100 -nv
# -ow pour overwrite du répertoire de sortie
# -chunk pour préciser la taille d’un chunk en MegaBytes
# -nv pour préciser que l’on souhaite des vecteurs nommés (named vectors)
Regarder les fichiers/répertoire générés
$ hadoop fs -ls ./vectTexts/
Vérifier le fichier des vecteurs tf-idf
$ mahout seqdumper -i ./vectTexts/tfidf-vectors/ | less
Nous pouvons maintenant appliquer l’algorithme K-Means sur les vecteurs tf-idf pour obtenir des
clusters de documents.
1http://fr.wikipedia.org/wiki/Mod\%C3\%A8le\_vectoriel
2
$ mahout kmeans -i ./vectTexts/tfidf-vectors/ -o ./clusters
-c ./centers -k 3 -x 3 -ow -cl
# -k pour préciser le nombre de clusters désirés
# -x pour préciser le nombre d’itérations de l’algorithme
# -c pour préciser le répertoire de sortie des centroids
# -o pour préciser le répertoire de sortie des clusters
# -cl pour effectuer le clustering après les itérations
Générer un fichier résumant le clustering dans un fichier de sortie hors HDFS
$ mahout clusterdump -i ./clusters/clusters-*-final
-o ./cluster-output.txt -d ./vectTexts/dictionary.file-0
-dt sequencefile -n 20 -b 100 -p ./clusters/clusteredPoints/
# -d le fichier dictionnaire des mots
# -dt le type de fichier dictionnaire
# -n le nombre de mots les plus fréquents à afficher pour chaque cluster
# -p le répertoire des points de chaque cluster (pour connaître
quels sont les éléments de chaque cluster et leur vecteur tf-idf)
# -b pour n’afficher qu’un nombre limité de caractères du vecteur tf-idf
du centroid de chaque cluster.
Vérifier le fichier résumant le clustering.
$ cat ./cluster-output.txt | less
Vous trouverez une version plus détaillée de cette manipulation ici : https://mahout.apache.
org/users/basics/creating-vectors-from-text.html
3 A vous de jouer
Nous souhaitons classifier des documents. Nos documents sont des messages postés dans des
newsgroups. Il y a exactement 18846 messages dans le jeu de données que nous allons ana-
lyser : 20news-all.zip. Ces documents proviennent de 20 newsgroups différents. Certains
newsgroups sont très proches (e.g. comp.sys.ibm.pc.hardware /comp.sys.mac.hardware),
d’autres n’ont rien à voir les uns avec les autres (e.g misc.forsale /soc.religion.christian).
Le jeu de données est décrit ici : http://qwone.com/~jason/20Newsgroups/.
3
Tâche que nous souhaitons réaliser : prédire le groupe dans lequel classer un nouveau mes-
sage.
Ce genre de tâche n’est pas vraiment utile dans les newsgroups (d’ailleurs ça existe toujours ?).
Mais on peut imaginer que la gestion des listes de diffusion des projets Apache soit complexe.
Les utilisateurs ne postent pas toujours leurs emails dans les bonnes catégories. On trouve un
nombre considérable d’Apache projects (Lucene, Mahout, Tomcat,etc.), et chaque projet dispose
de plusieurs mailing lists (user, development, etc.). Un outil d’aiguillage des mails pourraît être
intéressant. Par exemple, est-ce qu’un message donné est destiné à la Lucene mailing list ou à
la Tomcat mailing list ?
Nous rappelons que pour toute tâche de classification, avec Mahout ou pas, un modèle (classi-
fieur) doit être entraîné pour représenter les motifs à identifier, puis testé sur un jeu de données
de test.
Pour générer un sous-ensemble de données de train et de test, utiliser la commande $mahout
split une fois la vectorisation de document réalisée.
La liste des algorithmes de Mahout sont ici : http://mahout.apache.org/users/basics/
algorithms.html. Les commandes Mahout installées sur notre machine virtuelle sont listée
dans la Table 1.
Activité à rendre
Proposez une chaîne de traitement Hadoop/Mahout pour estimer et tester un classifieur de
documents
Développez cette proposition
Proposez et développez une variante en termes d’algorithmes et comparer
Activité optionnelle
Vérifiez si un algorithme de clustering peut retrouver le classement approximatif mais intuitif ( !) en
6 catégories proposé sur le fournisseur de données sur son site http://qwone.com/~jason/
20Newsgroups/
4
arff.vector Generate Vectors from an ARFF file or directory
baumwelch Baum-Welch algorithm for unsupervised HMM training
canopy Canopy clustering
cat Print a file or resource as the logistic regression models would see it
cleansvd Cleanup and verification of SVD output
clusterdump Dump cluster output to text
clusterpp Groups Clustering Output In Clusters
cmdump Dump confusion matrix in HTML or text formats
cvb LDA via Collapsed Variation Bayes (0th deriv. approx)
cvb0_local LDA via Collapsed Variation Bayes, in memory locally.
dirichlet Dirichlet Clustering
eigencuts Eigencuts spectral clustering
evaluateFactorization compute RMSE and MAE of a rating matrix factorization against probes
fkmeans Fuzzy K-means clustering
fpg Frequent Pattern Growth
hmmpredict Generate random sequence of observations by given HMM
itemsimilarity Compute the item-item-similarities for item-based collaborative filtering
kmeans K-means clustering
lucene.vector Generate Vectors from a Lucene index
matrixdump Dump matrix in CSV format
matrixmult Take the product of two matrices
meanshift Mean Shift clustering
minhash Run Minhash clustering
parallelALS ALS-WR factorization of a rating matrix
recommendfactorized Compute recommendations using the factorization of a rating matrix
recommenditembased Compute recommendations using item-based collaborative filtering
regexconverter Convert text files on a per line basis based on regular expressions
rowid Map SequenceFile<Text,VectorWritable> to Sequence-
File<IntWritable,VectorWritable>, SequenceFile<IntWritable,Text>
rowsimilarity Compute the pairwise similarities of the rows of a matrix
runAdaptiveLogistic Score new production data using a probably trained and validated Adaptivelo-
gisticRegression model
runlogistic Run a logistic regression model against CSV data
seq2encoded Encoded Sparse Vector generation from Text sequence files
seq2sparse Sparse Vector generation from Text sequence files
seqdirectory Generate sequence files (of Text) from a directory
seqdumper Generic Sequence File dumper
seqmailarchives Creates SequenceFile from a directory containing gzipped mail archives
seqwiki Wikipedia xml dump to sequence file
spectralkmeans Spectral k-means clustering
split Split Input data into test and train sets
splitDataset split a rating dataset into training and probe parts
ssvd Stochastic SVD
svd Lanczos Singular Value Decomposition
testnb Test the Vector-based Bayes classifier
trainAdaptiveLogistic Train an AdaptivelogisticRegression model
trainlogistic Train a logistic regression using stochastic gradient descent
trainnb Train the Vector-based Bayes classifier
transpose Take the transpose of a matrix
validateAdaptiveLogistic Validate an AdaptivelogisticRegression model against hold-out data set
vecdist Compute the distances between a set of Vectors (or Cluster or Canopy, they
must fit in memory) and a list of Vectors
vectordump Dump vectors from a sequence file to text
viterbi Viterbi decoding of hidden states from given output states sequence
TABLE 1 – Programmes connus de notre version de mahout
5
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !