{"id":14970667,"url":"https://github.com/thieu1995/reflame","last_synced_at":"2025-10-26T13:31:07.242Z","repository":{"id":194567933,"uuid":"679615656","full_name":"thieu1995/reflame","owner":"thieu1995","description":"reflame: Revolutionizing Functional Link Neural Network by Metaheuristic Optimization","archived":false,"fork":false,"pushed_at":"2023-11-26T04:34:18.000Z","size":133,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-09-28T13:22:32.478Z","etag":null,"topics":["classification","evolutionary-algorithms","feed-forward-neural-networks","flnn","functional-link-artificial-neural-network","functional-link-neural-network","genetic-algorithm","higher-order-functions","higher-order-neural-network","machine-learning","metaheuristic-algorithms","nature-inspired-algorithms","neural-network","optimization-algorithms","particle-swarm-optimization","pytorch-model","regression","scikit-learn","shade","whale-optimization-algorithm"],"latest_commit_sha":null,"homepage":"https://reflame.readthedocs.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thieu1995.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-17T08:31:27.000Z","updated_at":"2024-07-22T11:26:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"63720d91-b509-4fdf-8cc4-ddd5633e46e5","html_url":"https://github.com/thieu1995/reflame","commit_stats":{"total_commits":55,"total_committers":2,"mean_commits":27.5,"dds":"0.21818181818181814","last_synced_commit":"1de822f7b9984911dad5e610d2a490492e4b3027"},"previous_names":["thieu1995/reflame"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thieu1995%2Freflame","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thieu1995%2Freflame/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thieu1995%2Freflame/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thieu1995%2Freflame/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thieu1995","download_url":"https://codeload.github.com/thieu1995/reflame/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219862887,"owners_count":16555951,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["classification","evolutionary-algorithms","feed-forward-neural-networks","flnn","functional-link-artificial-neural-network","functional-link-neural-network","genetic-algorithm","higher-order-functions","higher-order-neural-network","machine-learning","metaheuristic-algorithms","nature-inspired-algorithms","neural-network","optimization-algorithms","particle-swarm-optimization","pytorch-model","regression","scikit-learn","shade","whale-optimization-algorithm"],"created_at":"2024-09-24T13:43:57.840Z","updated_at":"2025-10-26T13:31:06.852Z","avatar_url":"https://github.com/thieu1995.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cp align=\"center\"\u003e\n\u003cimg style=\"max-width:100%;\" src=\"https://thieu1995.github.io/post/2023-08/reflame.png\" alt=\"Reflame\"/\u003e\n\u003c/p\u003e\n\n\n---\n\n[![GitHub release](https://img.shields.io/badge/release-1.0.1-yellow.svg)](https://github.com/thieu1995/reflame/releases)\n[![Wheel](https://img.shields.io/pypi/wheel/gensim.svg)](https://pypi.python.org/pypi/reflame) \n[![PyPI version](https://badge.fury.io/py/reflame.svg)](https://badge.fury.io/py/reflame)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/reflame.svg)\n![PyPI - Status](https://img.shields.io/pypi/status/reflame.svg)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/reflame.svg)\n[![Downloads](https://pepy.tech/badge/reflame)](https://pepy.tech/project/reflame)\n[![Tests \u0026 Publishes to PyPI](https://github.com/thieu1995/reflame/actions/workflows/publish-package.yaml/badge.svg)](https://github.com/thieu1995/reflame/actions/workflows/publish-package.yaml)\n![GitHub Release Date](https://img.shields.io/github/release-date/thieu1995/reflame.svg)\n[![Documentation Status](https://readthedocs.org/projects/reflame/badge/?version=latest)](https://reflame.readthedocs.io/en/latest/?badge=latest)\n[![Chat](https://img.shields.io/badge/Chat-on%20Telegram-blue)](https://t.me/+fRVCJGuGJg1mNDg1)\n![GitHub contributors](https://img.shields.io/github/contributors/thieu1995/reflame.svg)\n[![GitTutorial](https://img.shields.io/badge/PR-Welcome-%23FF8300.svg?)](https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project)\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.10067995.svg)](https://doi.org/10.5281/zenodo.10067995)\n[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)\n\n\nReflame (REvolutionizing Functional Link Artificial neural networks by MEtaheuristic algorithms) is a Python library that \nimplements a framework for training Functional Link Neural Network (FLNN) networks using Metaheuristic Algorithms. It \nprovides a comparable alternative to the traditional FLNN network and is compatible with the Scikit-Learn library. \nWith Reflame, you can perform searches and hyperparameter tuning using the functionalities provided by the Scikit-Learn library.\n\n* **Free software:** GNU General Public License (GPL) V3 license\n* **Provided Estimator**: FlnnRegressor, FlnnClassifier, MhaFlnnRegressor, MhaFlnnClassifier\n* **Total Official Metaheuristic-based Flnn Regression**: \u003e 200 Models \n* **Total Official Metaheuristic-based Flnn Classification**: \u003e 200 Models\n* **Supported performance metrics**: \u003e= 67 (47 regressions and 20 classifications)\n* **Supported objective functions (as fitness functions or loss functions)**: \u003e= 67 (47 regressions and 20 classifications)\n* **Documentation:** https://reflame.readthedocs.io\n* **Python versions:** \u003e= 3.8.x\n* **Dependencies:** numpy, scipy, scikit-learn, pandas, mealpy, permetrics, torch, skorch\n\n\n# Citation Request \n\nIf you want to understand how Metaheuristic is applied to Functional Link Neural Network, you need to read the paper \ntitled \"A resource usage prediction system using functional-link and genetic algorithm neural network for multivariate cloud metrics\". \nThe paper can be accessed at the following [this link](https://doi.org/10.1109/SOCA.2018.00014)\n\n\nPlease include these citations if you plan to use this library:\n\n```code\n@software{nguyen_van_thieu_2023_8249046,\n  author       = {Nguyen Van Thieu},\n  title        = {Revolutionizing Functional Link Neural Network by Metaheuristic Algorithms: reflame - A Python Library},\n  month        = 11,\n  year         = 2023,\n  publisher    = {Zenodo},\n  doi          = {10.5281/zenodo.8249045},\n  url          = {https://github.com/thieu1995/reflame}\n}\n\n@article{van2023mealpy,\n  title={MEALPY: An open-source library for latest meta-heuristic algorithms in Python},\n  author={Van Thieu, Nguyen and Mirjalili, Seyedali},\n  journal={Journal of Systems Architecture},\n  year={2023},\n  publisher={Elsevier},\n  doi={10.1016/j.sysarc.2023.102871}\n}\n\n@inproceedings{nguyen2019building,\n\tauthor = {Thieu Nguyen and Binh Minh Nguyen and Giang Nguyen},\n\tbooktitle = {International Conference on Theory and Applications of Models of Computation},\n\torganization = {Springer},\n\tpages = {501--517},\n\ttitle = {Building Resource Auto-scaler with Functional-Link Neural Network and Adaptive Bacterial Foraging Optimization},\n\tyear = {2019},\n\turl={https://doi.org/10.1007/978-3-030-14812-6_31},\n\tdoi={10.1007/978-3-030-14812-6_31}\n}\n\n@inproceedings{nguyen2018resource,\n\tauthor = {Thieu Nguyen and Nhuan Tran and Binh Minh Nguyen and Giang Nguyen},\n\tbooktitle = {2018 IEEE 11th Conference on Service-Oriented Computing and Applications (SOCA)},\n\torganization = {IEEE},\n\tpages = {49--56},\n\ttitle = {A Resource Usage Prediction System Using Functional-Link and Genetic Algorithm Neural Network for Multivariate Cloud Metrics},\n\tyear = {2018},\n\turl={https://doi.org/10.1109/SOCA.2018.00014},\n\tdoi={10.1109/SOCA.2018.00014}\n}\n\n```\n\n# Installation\n\n* Install the [current PyPI release](https://pypi.python.org/pypi/reflame):\n```sh \n$ pip install reflame==1.0.1\n```\n\n* Install directly from source code\n```sh \n$ git clone https://github.com/thieu1995/reflame.git\n$ cd reflame\n$ python setup.py install\n```\n\n* In case, you want to install the development version from Github:\n```sh \n$ pip install git+https://github.com/thieu1995/reflame \n```\n\nAfter installation, you can import Reflame as any other Python module:\n\n```sh\n$ python\n\u003e\u003e\u003e import reflame\n\u003e\u003e\u003e reflame.__version__\n```\n\n### Examples\n\nIn this section, we will explore the usage of the Reflame model with the assistance of a dataset. While all the \npreprocessing steps mentioned below can be replicated using Scikit-Learn, we have implemented some utility functions \nto provide users with convenience and faster usage.  \n\n#### Combine Reflame library like a normal library with scikit-learn.\n\n```python\n### Step 1: Importing the libraries\nimport pandas as pd\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import MinMaxScaler, LabelEncoder\nfrom reflame import FlnnRegressor, FlnnClassifier, MhaFlnnRegressor, MhaFlnnClassifier\n\n#### Step 2: Reading the dataset\ndataset = pd.read_csv('Position_Salaries.csv')\nX = dataset.iloc[:, 1:2].values\ny = dataset.iloc[:, 2].values\n\n#### Step 3: Next, split dataset into train and test set\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=True, random_state=100)\n\n#### Step 4: Feature Scaling\nscaler_X = MinMaxScaler()\nscaler_X.fit(X_train)\nX_train = scaler_X.transform(X_train)\nX_test = scaler_X.transform(X_test)\n\nle_y = LabelEncoder()  # This is for classification problem only\nle_y.fit(y)\ny_train = le_y.transform(y_train)\ny_test = le_y.transform(y_test)\n\n#### Step 5: Fitting FLNN-based model to the dataset\n\n##### 5.1: Use standard FLNN model for regression problem\nregressor = FlnnRegressor(expand_name=\"chebyshev\", n_funcs=4, act_name=\"elu\",\n                      obj_name=\"MSE\", max_epochs=100, batch_size=32, optimizer=\"SGD\", verbose=True)\nregressor.fit(X_train, y_train)\n\n##### 5.2: Use standard FLNN model for classification problem \nclassifer = FlnnClassifier(expand_name=\"chebyshev\", n_funcs=4, act_name=\"sigmoid\",\n                      obj_name=\"BCEL\", max_epochs=100, batch_size=32, optimizer=\"SGD\", verbose=True)\nclassifer.fit(X_train, y_train)\n\n##### 5.3: Use Metaheuristic-based FLNN model for regression problem\nprint(MhaFlnnClassifier.SUPPORTED_OPTIMIZERS)\nprint(MhaFlnnClassifier.SUPPORTED_REG_OBJECTIVES)\nopt_paras = {\"name\": \"GA\", \"epoch\": 10, \"pop_size\": 30}\nmodel = MhaFlnnRegressor(expand_name=\"chebyshev\", n_funcs=3, act_name=\"elu\", \n                         obj_name=\"RMSE\", optimizer=\"BaseGA\", optimizer_paras=opt_paras, verbose=True)\nregressor.fit(X_train, y_train)\n\n##### 5.4: Use Metaheuristic-based FLNN model for classification problem\nprint(MhaFlnnClassifier.SUPPORTED_OPTIMIZERS)\nprint(MhaFlnnClassifier.SUPPORTED_CLS_OBJECTIVES)\nopt_paras = {\"name\": \"GA\", \"epoch\": 10, \"pop_size\": 30}\nclassifier = MhaFlnnClassifier(expand_name=\"chebyshev\", n_funcs=4, act_name=\"sigmoid\",\n                          obj_name=\"NPV\", optimizer=\"BaseGA\", optimizer_paras=opt_paras, verbose=True)\nclassifier.fit(X_train, y_train)\n\n#### Step 6: Predicting a new result\ny_pred = regressor.predict(X_test)\n\ny_pred_cls = classifier.predict(X_test)\ny_pred_label = le_y.inverse_transform(y_pred_cls)\n\n#### Step 7: Calculate metrics using score or scores functions.\nprint(\"Try my AS metric with score function\")\nprint(regressor.score(X_test, y_test, method=\"AS\"))\n\nprint(\"Try my multiple metrics with scores function\")\nprint(classifier.scores(X_test, y_test, list_methods=[\"AS\", \"PS\", \"F1S\", \"CEL\", \"BSL\"]))\n```\n\n#### Utilities everything that Reflame provided\n\n```python\n### Step 1: Importing the libraries\nfrom reflame import Data, FlnnRegressor, FlnnClassifier, MhaFlnnRegressor, MhaFlnnClassifier\nfrom sklearn.datasets import load_digits\n\n#### Step 2: Reading the dataset\nX, y = load_digits(return_X_y=True)\ndata = Data(X, y)\n\n#### Step 3: Next, split dataset into train and test set\ndata.split_train_test(test_size=0.2, shuffle=True, random_state=100)\n\n#### Step 4: Feature Scaling\ndata.X_train, scaler_X = data.scale(data.X_train, scaling_methods=(\"minmax\"))\ndata.X_test = scaler_X.transform(data.X_test)\n\ndata.y_train, scaler_y = data.encode_label(data.y_train)  # This is for classification problem only\ndata.y_test = scaler_y.transform(data.y_test)\n\n#### Step 5: Fitting FLNN-based model to the dataset\n\n##### 5.1: Use standard FLNN model for regression problem\nregressor = FlnnRegressor(expand_name=\"chebyshev\", n_funcs=4, act_name=\"tanh\",\n                      obj_name=\"MSE\", max_epochs=100, batch_size=32, optimizer=\"SGD\", verbose=True)\nregressor.fit(data.X_train, data.y_train)\n\n##### 5.2: Use standard FLNN model for classification problem \nclassifer = FlnnClassifier(expand_name=\"chebyshev\", n_funcs=4, act_name=\"tanh\",\n                      obj_name=\"BCEL\", max_epochs=100, batch_size=32, optimizer=\"SGD\", verbose=True)\nclassifer.fit(data.X_train, data.y_train)\n\n##### 5.3: Use Metaheuristic-based FLNN model for regression problem\nprint(MhaFlnnClassifier.SUPPORTED_OPTIMIZERS)\nprint(MhaFlnnClassifier.SUPPORTED_REG_OBJECTIVES)\nopt_paras = {\"name\": \"GA\", \"epoch\": 10, \"pop_size\": 30}\nmodel = MhaFlnnRegressor(expand_name=\"chebyshev\", n_funcs=3, act_name=\"elu\", \n                         obj_name=\"RMSE\", optimizer=\"BaseGA\", optimizer_paras=opt_paras, verbose=True)\nregressor.fit(data.X_train, data.y_train)\n\n##### 5.4: Use Metaheuristic-based FLNN model for classification problem\nprint(MhaFlnnClassifier.SUPPORTED_OPTIMIZERS)\nprint(MhaFlnnClassifier.SUPPORTED_CLS_OBJECTIVES)\nopt_paras = {\"name\": \"GA\", \"epoch\": 10, \"pop_size\": 30}\nclassifier = MhaFlnnClassifier(expand_name=\"chebyshev\", n_funcs=4, act_name=\"sigmoid\",\n                          obj_name=\"NPV\", optimizer=\"BaseGA\", optimizer_paras=opt_paras, verbose=True)\nclassifier.fit(data.X_train, data.y_train)\n\n#### Step 6: Predicting a new result\ny_pred = regressor.predict(data.X_test)\n\ny_pred_cls = classifier.predict(data.X_test)\ny_pred_label = scaler_y.inverse_transform(y_pred_cls)\n\n#### Step 7: Calculate metrics using score or scores functions.\nprint(\"Try my AS metric with score function\")\nprint(regressor.score(data.X_test, data.y_test, method=\"AS\"))\n\nprint(\"Try my multiple metrics with scores function\")\nprint(classifier.scores(data.X_test, data.y_test, list_methods=[\"AS\", \"PS\", \"F1S\", \"CEL\", \"BSL\"]))\n```\n\nA real-world dataset contains features that vary in magnitudes, units, and range. We would suggest performing \nnormalization when the scale of a feature is irrelevant or misleading. Feature Scaling basically helps to normalize \nthe data within a particular range.\n\n\n\n1) Where do I find the supported metrics like above [\"AS\", \"PS\", \"RS\"]. What is that?\nYou can find it here: https://github.com/thieu1995/permetrics or use this\n\n```python\nfrom reflame import MhaFlnnClassifier, MhaFlnnRegressor\n\nprint(MhaFlnnRegressor.SUPPORTED_REG_OBJECTIVES)\nprint(MhaFlnnClassifier.SUPPORTED_CLS_OBJECTIVES)\n```\n\n2) I got this type of error\n```python\nraise ValueError(\"Existed at least one new label in y_pred.\")\nValueError: Existed at least one new label in y_pred.\n``` \nHow to solve this?\n\n+ This occurs only when you are working on a classification problem with a small dataset that has many classes. For \n  instance, the \"Zoo\" dataset contains only 101 samples, but it has 7 classes. If you split the dataset into a \n  training and testing set with a ratio of around 80% - 20%, there is a chance that one or more classes may appear \n  in the testing set but not in the training set. As a result, when you calculate the performance metrics, you may \n  encounter this error. You cannot predict or assign new data to a new label because you have no knowledge about the \n  new label. There are several solutions to this problem.\n\n+ 1st: Use the SMOTE method to address imbalanced data and ensure that all classes have the same number of samples.\n\n```python\nimport pandas as pd\nfrom imblearn.over_sampling import SMOTE\nfrom reflame import Data\n\ndataset = pd.read_csv('examples/dataset.csv', index_col=0).values\nX, y = dataset[:, 0:-1], dataset[:, -1]\n\nX_new, y_new = SMOTE().fit_resample(X, y)\ndata = Data(X_new, y_new)\n```\n\n+ 2nd: Use different random_state numbers in split_train_test() function.\n\n```python\nimport pandas as pd\nfrom reflame import Data\n\ndataset = pd.read_csv('examples/dataset.csv', index_col=0).values\nX, y = dataset[:, 0:-1], dataset[:, -1]\ndata = Data(X, y)\ndata.split_train_test(test_size=0.2, random_state=10)  # Try different random_state value \n```\n\n\n# Support (questions, problems)\n\n### Official Links \n\n* Official source code repo: https://github.com/thieu1995/reflame\n* Official document: https://reflame.readthedocs.io/\n* Download releases: https://pypi.org/project/reflame/\n* Issue tracker: https://github.com/thieu1995/reflame/issues\n* Notable changes log: https://github.com/thieu1995/reflame/blob/master/ChangeLog.md\n* Official chat group: https://t.me/+fRVCJGuGJg1mNDg1\n\n* This project also related to our another projects which are \"optimization\" and \"machine learning\", check it here:\n    * https://github.com/thieu1995/mealpy\n    * https://github.com/thieu1995/metaheuristics\n    * https://github.com/thieu1995/opfunu\n    * https://github.com/thieu1995/enoppy\n    * https://github.com/thieu1995/permetrics\n    * https://github.com/thieu1995/MetaCluster\n    * https://github.com/thieu1995/pfevaluator\n    * https://github.com/thieu1995/intelelm\n    * https://github.com/aiir-team\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthieu1995%2Freflame","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthieu1995%2Freflame","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthieu1995%2Freflame/lists"}