17mar. 2011
Visualiser un espace à plusieurs dimensions en 3D
00:03 - Par Fabien Poulard - Sciences & Recherche - 2 commentaires
L'analyse en composantes principales (ACP) permet de calculer les hyperplans d'un espace vectoriel tel qu'une projection sur ces plans conserve un maximum d'entropie. Cette approche permet entre autres choses de projeter des espaces ayant un très grand nombre de dimensions dans des espaces de dimensions réduites tout en limitant la perte d'information.
L'utilisation combinée de scikit-learn et de matplotlib permet de produire très rapidement des réductions de dimension et de les visualiser. J'utilise ces bibliothèques pour visualiser dans un espace à 2 ou 3 dimensions des espaces vectoriels correspondant à des représentations de documents à l'aide de traits particuliers.
Je travaille actuellement sur le projet TTC au sein de mon équipe. Je suis chargé de développer un classifieur de pages Web selon leurs intentions de communication. S'il existe bon nombre de travaux sur la classification des documents Web, dans notre cas nous cherchons une approche indépendante de la langue. Nous travaillons en effet sur sept langues différentes plus ou moins éloignées (français, anglais, allemand, espagnol, letton, russe et chinois). Voilà le contexte et le problème posé.
J'explore un certain nombre de traits qui pourraient s'avérer pertinent pour ladite tâche (URL, structure HTML, n-grammes caractères...). Il est cependant compliqué d'évaluer qualitativement si les traits retenus permettent de différencier les "intentions de communication" auxquelles nous nous intéressons. Une manière très subjective, mais également très efficace, de mesurer cette capacité est de visualiser les clusters formés par les documents dans l'espace vectoriel défini par nos traits. Chaque document est représenté par un vecteur des valeurs correspondant aux différents traits sélectionnés. Ces traits sont cependant très nombreux et l'espace vectoriel correspondant ne peut pas être directement représenté sous forme graphique.
Afin d'aisément visualiser les documents dans ces espaces vectoriels j'effectue une projection sur seulement trois dimensions et je visualise le résultat sous forme d'un graphique de type "nuage de points". Les trois combinaisons sont en réalité des combinaisons algébriques de l'ensemble des dimensions de mon espace vectoriel obtenues par une approche en composantes principales.
Il est assez aisé de mettre en œuvre une telle approche avec scikit-learn :
# Importation de l'approche par composantes principales from scikits.learn.pca import PCA # On utilise un ensemble de données exemple classique : Iris from scikits.learn import datasets iris = datasets.load_iris() # Préparation de la méthode PCA pour une projection sur 3 dimensions pca = PCA(n_components=3) # Calcul de la projection à partir des données exemples pca.fit(iris.data) # Application de la projection aux données newdata = pca.transform(iris.data)
La variable newdata contient alors une projection de nos données sur le nouvel espace vectoriel en 3 dimensions. Je peux ainsi visualiser les documents dans ce nouvel espace en utilisant Pylab issue de matplotlib :
# Utilisation de Pylab et de mplot3d intégré à matplotlib import pylab as pl import mpl_toolkits.mplot3d.axes3d as p3 # Création de la figure dans laquelle nous allons représenté notre nuage de points # qui sera composée de 3 dimensions (Axes3D) fig=pl.figure() ax = p3.Axes3D(fig) # Les données Iris se répartissent entre 3 classes (0, 1 et 2), nous allons coloré chacune de # ces classes différemment afin de les visualiser # Nous utilisons également le nom réel (iris.target_names) des classes dans la légende for color, classe, nom_classe in zip("rgb", [0, 1, 2], iris.target_names): # newdata[iris.target==classe,0] permet de récupérer la première colonne (0) de la # sous-matrice correspondant aux instances de la classe "classe" ax.scatter3D(newdata[iris.target==classe,0], newdata[iris.target==classe,1], newdata[iris.target==classe,2], c=color, label=nom_classe) # On ajoute les données à la figure et on dessine le tout fig.add_axes(ax) pl.show()
Et voici le résultat :
La projection en 3D permet très facilement (et très subjectivement) d'identifier les trois clusters correspondant aux trois classes et d'ainsi valider les traits retenus pour représenter les instances.

2 commentaires
Hello,
à toutes fins utiles, un papier "survey" sur le sujet :
http://www.cs.helsinki.fi/u/ahyvari...
pour balayer les idées sur :
- PCA vs . ICA, matrice de covariance vs. toute la distribution de proba
- entropie / negentropie / gaussianité, et conséquences/applications
pour la visualisation
- voir par ex. fig 9. pour la différence entre ICA et PCA (et où on voit justement que l'entropie est notre ennemie et non notre amie...)
Marc G.
équipe GRIM
time you at any time have each day such as this.p Concerning the Writer Michael Russell Your Impartial guidebook to Weddingsp How lengthy does it just take to program a marriage ceremony? Medium fifty company to massive one hundred company dimension weddings consider a couple of yr to strategy http://www.ratdresses.org . http://www.ratdresses.org/prom-dres... http://www.ratdresses.org/informal-... The bigger churches, well-known reception web-sites , and caterers commonly have to be booked a yr upfront http://www.ratdresses.org/evening-d... http://www.ratdresses.org/prom-dres... . Bridal exhibits are an excellent method to locate a reception corridor and several with the suppliers you might will need. Most bridal exhibits are detailed in neighborhood newspapers or could be identified around the internet. Just kind bridal exhibits along with your city in google lookup and you ought to discover a lot of superior outcomes. http://www.ratdresses.org/cocktail-... The extended you wait around the much less the opportunity you'll be able to come across the location which you