Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Large coclusterings #36

Closed
stephanebouget opened this issue Sep 7, 2022 · 6 comments
Closed

Large coclusterings #36

stephanebouget opened this issue Sep 7, 2022 · 6 comments
Milestone

Comments

@stephanebouget
Copy link
Member

Il s’agit de 2 jeux de données dont aucun ne s’ouvrait avec l’ancienne version.
Le message affiché était : « The application will use more than 1 Go of memory. The data can’t be loaded”.

Les fichiers de données sont en effet volumineux et quasiment identiques
mais dans le 1er cas le coclustering est de dimensions faibles (5 et 6)
alors que dans le 2nd cas le coclustering est de dimensions élevées (1045 et 594).

Avec la nouvelle version de KCV, le 1er coclustering s’affiche bien mais pas le second.
Il doit donc y avoir une limite à fixer qui porte plus sur la taille du coclustering que sur le volume des données à afficher
(ou peut être les deux).

Voici les lien de téléchargement :

Url 1 : taille importante du fichier de données mais taille réduite des dimensions du coclustering (5 et 6)
Dimensions 2
Name Type Parts Initial parts Values Typicality Description
id_cookie Symbol 5 5 1475486 1
url Symbol 6 6 1819466 1

https://tf.orange.com/f/329ad051b46e4d3f9a80/?dl=1

URL 8 : taille importante du fichier de données et taille élevée des dimensions du coclustering (1045 et 594)
Dimensions 2
Name Type Parts Initial parts Values Typicality Description
id_cookie Symbol 1045 1045 1475486 1
url Symbol 594 594 1819466 1

https://tf.orange.com/f/d39a613af83e404d898f/?dl=1

Il faudrait pour cela avoir une taille limite de coclustering que l’on peut afficher et afficher un coclustering replié sinon.
On pourrait partir sur une valeur limite du produit des dimensions.
Tu disais que jusqu’à 100 par 100 tout était OK. Cela pourrait déjà être un seuil ?

@stephanebouget
Copy link
Member Author

Par rapport à l’affichage des coclustering volumineux, j’ai mieux identifié comment fonctionnait l’ancien outil.
Le principe qu’il s’agirait de reprendre est le suivant :

  •      Si le fichier json est issu d’une sauvegarde explicite d’un repliement, on affiche la matrice du coclustering correspondant à ce repliement (ce qui est déjà le cas dans la nouvelle version)
    
  •      Sinon, il y a une condition sur le nombre total de clusters affiché (somme du nombre de clusters par dimension) :
    

o Si ce nombre total de clusters est < à 15 * le nombre de dimensions, on affiche le coclustering le plus fin
o Sinon, on affiche le coclustering le plus fin ayant un nombre total de clusters inférieur ou égal à ce seuil de 15 * le nombre de dimensions
Cela permet d’afficher un coclustering analysable par l’œil humain.
Tous les repliements de coclustering restent disponibles via la fonctionnalité UnfoldHierarchy, jusqu’à un seuil limite de cellules que l’on pourrait fixer à 1 million de cellules (ou avant si l’on voit que c’est bcp trop long à charger)

Pour l’algorithme que tu souhaiterais pour coder la fonctionnalité Unfold hierarchy, je vais te préparer cela.
Pour bien comprendre, ce serait l’algorithme qui permet d’afficher tout ce qu’il y a dans l’onglet Axis (et Context éventuellement), une fois que l’on a sélectionné un niveau de repliement dans la fenêtre qui s’ouvre quand on choisit Unfold hierarchy ?
OU
est ce qu’il s’agit des deux étapes : l’étape 1/ qui permet d’afficher les courbes dans la fenêtre UnfoldHierarchy (courbe du taux d’information et du nombre de clusters)

  • l’étape 2/ qui permet l’affichage d’un coclustering pour un niveau de repliement donné, à partir des données du fichier json.

@stephanebouget
Copy link
Member Author

J’ai tenté de reproduire le comportement de l’ancienne version de Khiops CO dans le cas de très gros fichier,
à savoir simuler un unfold hierarchy à un certain niveau (par exemple 200) et reconstruire un json simplifié,
puis ensuite afficher cette simplification

ça fonctionne plutôt bien pour des fichiers pas trop gros, par exemple 4Mo,
par contre, j’ai trouvé dans le dossier de samples des fichiers de 18Mo et 21Mo et +,
et là, la reconstruction des tableaux cellPartIndex et cellFrequencies via l’algo qu’on a écrit ensemble plante car trop nombreux calculs

Je suis un peu coincé là car à mon avis on arrive aux limites du javascript qui n’est pas un langage optimisé pour faire tant de calculs.

@stephanebouget
Copy link
Member Author

branch in progress : unfold-at-start

@carinehue
Copy link

Les jeux de données que je t'ai fournis Url1 , Url8, LargeCoclustering n'étaient pas adaptés car ils étaient générés à partir d'une ancienne version de Khiops sans le champ "hierarchicalRank". La valeur de ce champ était toujours à 0 ce qui perturbe le repliement. Je te propose de clore cet issue et je vais en ouvrir une autre avec des jeux de données synthétiques pour travailler sur le temps de l'algo dans le cas de fichiers volumineux en fonction de la variation du nombre de modalités, ou de la taille des modalités.

@stephanebouget
Copy link
Member Author

ok, n'hésite pas à me fournir d'autres jeux de données que je teste ce que j'avais commencé à optimiser

@stephanebouget
Copy link
Member Author

stephanebouget commented Jun 13, 2023

mis en place

  • optimisation sur le redraw de la matrice qui pouvait être redessiné petits plusieurs fois au lieu d'une seule
  • modification de la façon de dessiner les cellules. Beginpath endpath

@stephanebouget stephanebouget added this to the 11.0.3 milestone Nov 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants