MetaCluster is the largest open-source nature-inspired optimization (Metaheuristic Algorithms) library for
clustering problem in Python
- Free software: GNU General Public License (GPL) V3 license
- Provided 3 classes:
MetaCluster
, MhaKCentersClustering
, and MhaKMeansTuner
- Total nature-inspired metaheuristic optimizers (Metaheuristic Algorithms): > 200 optimizers
- Total objective functions (as fitness): > 40 objectives
- Total supported datasets: 48 datasets from Scikit learn, UCI, ELKI, KEEL...
- Total performance metrics: > 40 metrics
- Total different way of detecting the K value: >= 10 methods
- Documentation: https://metacluster.readthedocs.io/en/latest/
- Python versions: >= 3.7.x
- Dependencies: numpy, scipy, scikit-learn, pandas, mealpy, permetrics, plotly, kaleido
Installation
$ pip install metacluster==1.2.0
- Install directly from source code
$ git clone https://github.com/thieu1995/metacluster.git
$ cd metacluster
$ python setup.py install
- In case, you want to install the development version from Github:
$ pip install git+https://github.com/thieu1995/permetrics
After installation, you can import MetaCluster as any other Python module:
$ python
>>> import metacluster
>>> metacluster.__version__
Examples
Let's go through some examples.
1. First, load dataset. You can use the available datasets from MetaCluster:
from metacluster import get_dataset
get_dataset("unknown")
data = get_dataset("Arrhythmia")
- Or you can load your own dataset
import pandas as pd
from metacluster import Data
dataset = pd.read_csv('examples/dataset.csv', index_col=0).values
X, y = dataset[:, 0:-1], dataset[:, -1]
data = Data(X, y, name="my-dataset")
2. Next, scale your features
You should confirm that your dataset is scaled and normalized
data.X, scaler = data.scale(data.X, method="MinMaxScaler", feature_range=(0, 1))
data.X, scaler = data.scale(data.X, method="StandardScaler")
data.X, scaler = data.scale(data.X, method="MaxAbsScaler")
data.X, scaler = data.scale(data.X, method="RobustScaler")
data.X, scaler = data.scale(data.X, method="Normalizer", norm="l2")
3. Next, select Metaheuristic Algorithm, Its parameters, list of objectives, and list of performance metrics
list_optimizer = ["BaseFBIO", "OriginalGWO", "OriginalSMA"]
list_paras = [
{"name": "FBIO", "epoch": 10, "pop_size": 30},
{"name": "GWO", "epoch": 10, "pop_size": 30},
{"name": "SMA", "epoch": 10, "pop_size": 30}
]
list_obj = ["SI", "RSI"]
list_metric = ["BHI", "DBI", "DI", "CHI", "SSEI", "NMIS", "HS", "CS", "VMS", "HGS"]
You can check all supported metaheuristic algorithms from: https://github.com/thieu1995/mealpy.
All supported clustering objectives and metrics from: https://github.com/thieu1995/permetrics.
If you don't want to read the documents, you can print out all supported information by:
from metacluster import MetaCluster
MetaCluster.get_support(name="all")
4. Next, create an instance of MetaCluster class and run it.
model = MetaCluster(list_optimizer=list_optimizer, list_paras=list_paras, list_obj=list_obj, n_trials=3, seed=10)
model.execute(data=data, cluster_finder="elbow", list_metric=list_metric, save_path="history", verbose=False)
model.save_boxplots()
model.save_convergences()
As you can see, you can define different datasets and using the same model to run it.
Remember to set the name to your dataset, because the folder that hold your results is the name of your dataset.
More examples can be found here
Support
Official links (questions, problems)
Citation Request
Please include these citations if you plan to use this library:
@software{van_thieu_nguyen_2023_8220709,
author = {Nguyen Van Thieu},
title = {MetaCluster: An Open-Source Python Library for Metaheuristic-based Clustering Problems},
month = aug,
year = 2023,
publisher = {Zenodo},
doi = {10.5281/zenodo.8214539},
url = {https://github.com/thieu1995/metacluster}
}
@article{van2023mealpy,
title={MEALPY: An open-source library for latest meta-heuristic algorithms in Python},
author={Van Thieu, Nguyen and Mirjalili, Seyedali},
journal={Journal of Systems Architecture},
year={2023},
publisher={Elsevier},
doi={10.1016/j.sysarc.2023.102871}
}
Supported links
1. https://jtemporal.com/kmeans-and-elbow-method/
2. https://medium.com/@masarudheena/4-best-ways-to-find-optimal-number-of-clusters-for-clustering-with-python-code-706199fa957c
3. https://github.com/minddrummer/gap/blob/master/gap/gap.py
4. https://www.tandfonline.com/doi/pdf/10.1080/03610927408827101
5. https://doi.org/10.1016/j.engappai.2018.03.013
6. https://github.com/tirthajyoti/Machine-Learning-with-Python/blob/master/Clustering-Dimensionality-Reduction/Clustering_metrics.ipynb
7. https://elki-project.github.io/
8. https://sci2s.ugr.es/keel/index.php
9. https://archive.ics.uci.edu/datasets
10. https://python-charts.com/distribution/box-plot-plotly/
11. https://plotly.com/python/box-plots/?_ga=2.50659434.2126348639.1688086416-114197406.1688086416#box-plot-styling-mean--standard-deviation