clus
Clustering and fuzzy-clustering library with integrated CLI
Science Score: 23.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
○codemeta.json file
-
○.zenodo.json file
-
✓DOI references
Found 4 DOI reference(s) in README -
✓Academic publication links
Links to: sciencedirect.com -
○Committers with academic emails
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (10.6%) to scientific vocabulary
Keywords
Repository
Clustering and fuzzy-clustering library with integrated CLI
Basic Info
Statistics
- Stars: 9
- Watchers: 1
- Forks: 4
- Open Issues: 0
- Releases: 0
Topics
Metadata Files
README.md
clustering
Clustering and fuzzy-clustering library with integrated CLI.
Installation
shell
$ python3 setup.py install
Running the setup.py script will download all required packages and install the following commands either in your ~/.local/bin/ for local installation or in the /usr/lib/pythonX.X directories :
* clus : Main command for partition-based clustering.
* dclus : density-based clustering.
* hclus : Hierarchical clustering.
* eclus : Evaluate clustering. Implementing diferents way to evaluate clustering results by comparing two partitions.
Usage
```shell
Simple clustering with 500-components kmeans algorithm
$ clus dataset.csv kmeans -k 500 --max-iter 100 --eps 0.001 --header --save-clus
Clustering with a weighted euclidean distance + matplotlib visualisation
$ clus dataset.npy kmeans --pairwise-distance weighted_euclidean --weights 1 0 1 1 --visualise
Clustering from a .npz file with a 3D matplotlib visualisation
$ clus dataset.npz fcm --array-name clusters_center --visualise-3d
Clustering with automatic dataset filetype guessing and with a normalization beforehand
$ clus dataset kmeans --file-type guess --normalization rescaling --save-clus
DBSCAN clustering with a custom clustering results saving path
$ dclus dataset.csv dbscan --save-clus --seed 1 --format-filename-dest-results dbased{clusteringalgorithm}{dataset}{seed} ```
TODO
- Complete paradigm rewrite :
- Move away from CLI support into a more clean Python class interface
- Design easy-to-use and abstract base clustering classes
- Take inspiration from river
- "New" algorithm family : Streaming/One-Pass algorithms.
- Pour les fcm, plusieurs copies de données sont faites plusieurs fois. Optimisable, voir : https://pythonhosted.org/scikit-fuzzy/modules/skfuzzy/cluster/cmeans.html#cmeans
- Rendre les opérations de clustering inplace (ne pas dupliquer les données)
- Méthodes de Clustering à implémenter :
- https://github.com/scikit-learn/scikit-learn/blob/7b136e9/sklearn/cluster/kmeans.py#L1318
- OPTICS
- Mean-Shift
- Vérifier le hardcmedoids
- Implementer une detection automatique de header si le flag --header n'est pas passé. Voir : https://stackoverflow.com/questions/32312309/check-if-header-exists-with-python-pandas
- Permettre au HC de prendre plusieurs paramètres pour fcluster values. Si plusieurs, alors on applique ces params. Ajouter option fcluster_value dans le filename.
- Les opérations sur medoids sont lentes. S'inspirer d'autres codes pour les ameliorer :
- https://github.com/vitordeatorreao/amproj/blob/844842a532524d5f514e7534da65c7a64ab7ef57/amproj/distance/kmedoids.py
- https://github.com/agartland/utils/blob/e200d7e41039ca0053bd817c1d1857aab33bd503/kmedoids.py#L172
- https://github.com/Brain-Mapper/BrainMapperV2/blob/63075bdca2428197fc18a1cf6c7403c2764e0664/ourLib/clustering.py#L293
- Application du decorateur "memoryerrorfallback", d'un parametre de taille de chunk, puis utiliser sklearn.metrics.pairwisedistances_chunked
- Au lieu de fixer un nom de fichier par défaut, mettre tous les paramètres par défaut à None (et fixer en dur leurs valeus par défaut dans la doc, ou formater selon un fichier), et ajouter les parametres NON None passés par l'utilisateur au nom de fichier selon un ordre prédéfini. L'utilisateur peut aussi très bien passer son nom de fichier prédéfini.
- Implémenter un algo d'appariemment (de comparaison) d'affectations. Peut être utiliser https://fr.wikipedia.org/wiki/Algorithme_hongrois
- Revoir les séparations en sous-commandes. Peut être faire : "clus evaluate" ou "clus visualise".
- S'inspirer de l'API d'autres clustering softwares : ** https://elki-project.github.io ** https://www.cs.waikato.ac.nz/ml/weka ** https://www.knime.com/nodeguide/analytics/clustering
- Implémenter la lecture de fichiers : ** memmap : https://docs.scipy.org/doc/numpy/reference/generated/numpy.memmap.html
- S'inspirer des codes suivants : ** https://github.com/overshiki/kmeans_pytorch/blob/master/kmeans.py
- Etudier mesures : ** https://scikit-learn.org/stable/modules/generated/sklearn.metrics.adjustedmutualinfoscore.html ** https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.multivariatenormal.html ** https://davetang.org/muse/2017/09/21/adjusted-rand-index/
- Trouver meilleure coupe HC : ** https://www.sciencedirect.com/science/article/pii/S0031320310001974
- Etudier d'autres méthodes de normalisation, leurs effets et leurs buts ** https://en.wikipedia.org/wiki/Normalization(statistics) ** https://en.wikipedia.org/wiki/Featurescaling ** https://sebastianraschka.com/Articles/2014aboutfeature_scaling.html
- Refactoring de l'architecture du code: ** clus.methods, qui offre toutes les méthodes depuis ce module. ** clus.preprocessing, qui offre les méthodes de normalisation, et de pondération ** clus.visualisation ** clus.evaluation ** clus.loading, toutes les méthodes de chargement des données
- Changer la façon dont les paramètres du clustering sont stockés et dont les résultats sont sauvegardés. ** Virer tous les params liés au nom de fichier. Ne garder que "file-name-prefix", et ajouter un UUID comme nom de fichier. ** Stocker tous les paramètres de clustering dans le dictionnaire résultats. clef "params". ** Maintenant que j'écris ça, je me rends compte que sacred serait peut etre plus approprié pour la gestion des résultats.
- Virer silhouette, ne garder que silhouette-samples, puis retourner la moyenne (qui correspond à silhouette-score), on lapelle silhouettemean, et l'écart type silhouettestd.
- Etudier l'utilisation de : https://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwisedistanceschunked.html
- Remettre les références dans la doc de chaque module. Les retirer des références ci-dessous.
- Essayer de proposer une implémentation de k-means utilisant CUDA : http://alexminnaar.com/2019/03/05/cuda-kmeans.html
- Ajouter param UUID : ajouter un param possible, {uuid4}, {uuid6}, etc dans le futur nom de fichier peut etre ? Regarder si on peut l'initialiser avec le temps, sinon faudra faire gaffe à l'initialisation avec graine aléatoire, sinon c'est possiblkz que je retourne les mêmes uuid à chaque fois.
- Ajouter des mesures d'evaluation : Papier pour mesures d'eval clustering : https://amstat.tandfonline.com/doi/abs/10.1080/01621459.1971.10482356#.XXZYe6WxXRY
- Etudier d'autres normalisations et leurs effets : https://scikit-learn.org/stable/autoexamples/preprocessing/plotall_scaling.html#results
References
- [1] R. Krishnapuram ; A. Joshi ; O. Nasraoui ; L. Yi, Low-complexity fuzzy relational clustering algorithms for Web mining, IEEE Transactions on Fuzzy Systems (Volume: 9, Issue: 4, Aug 2001), p595-607, DOI: 10.1109/91.940971
- [2] Tolga Can, K-Means Empty Cluster Example, http://user.ceng.metu.edu.tr/~tcan/ceng465f1314/Schedule/KMeansEmpty.html (archive: https://web.archive.org/web/20180626092955/http://user.ceng.metu.edu.tr/~tcan/ceng465f1314/Schedule/KMeansEmpty.html)
- [3] Ross, Timothy J., Fuzzy Logic With Engineering Applications, 3rd ed. Wiley. 2010. ISBN 978-0-470-74376-8 pp 352-353
- [4] Joe Marino, statistical whitening, http://joelouismarino.github.io/blogposts/blogwhitening.html (archive: https://web.archive.org/web/20180813034201/http://joelouismarino.github.io/blogposts/blogwhitening.html)
- [5] TODO: Applying weighted euclidean distance is equivalent to applying traditional euclidean distance into data weighted by the square root of the weights
- [6] James C.Bezdek, Robert Ehrlich, William Full, FCM: The fuzzy c-means clustering algorithm, https://doi.org/10.1016/0098-3004(84)90020-7, 1983
Owner
- Name: Bizzozzéro Nicolas
- Login: NicolasBizzozzero
- Kind: user
- Website: bizzozzero.me
- Repositories: 3
- Profile: https://github.com/NicolasBizzozzero
Si c'est marrant, faut qu'on essaye.
GitHub Events
Total
Last Year
Committers
Last synced: about 2 years ago
Top Committers
| Name | Commits | |
|---|---|---|
| NicolasBizzozzero | n****o@g****m | 223 |
| Bizzozzéro Nicolas | n****o@p****m | 3 |
| Nicolas BIZZOZZERO | b****o@p****r | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 7 months ago
All Time
- Total issues: 0
- Total pull requests: 2
- Average time to close issues: N/A
- Average time to close pull requests: 7 minutes
- Total issue authors: 0
- Total pull request authors: 1
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 2
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 0
- Pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
- NicolasBizzozzero (2)
Top Labels
Issue Labels
Pull Request Labels
Packages
- Total packages: 1
-
Total downloads:
- pypi 21 last-month
- Total dependent packages: 0
- Total dependent repositories: 1
- Total versions: 2
- Total maintainers: 1
pypi.org: clus
A complete fuzzy clus framework
- Homepage: https://github.com/NicolasBizzozzero/clus
- Documentation: https://clus.readthedocs.io/
- License: gpl-v3
-
Latest release: 0.0.2
published over 6 years ago
Rankings
Maintainers (1)
Dependencies
- click *
- matplotlib *
- memory-profiler *
- numpy *
- pandas *
- scikit-learn *
- scipy *
- tqdm *
- wheel *