Package: graforvfl
GrafoRVFL (GRAdient Free Optimized Random Vector Functional Link)GrafoRVFL is an open-source library in Python that employs gradient-free optimization ((GA, PSO, WOA, TLO, DE, ...) to
optimize Random Vector Functional Link Networks. It is entirely implemented based on Numpy and fully compatible
with the interfaces of the Scikit-Learn library. With GrafoRVFL, you can fine-tune the hyper-parameters of network
or optimize weights in the network using gradient-free optimizers.Free software:GNU General Public License (GPL) V3 licenseProvided Estimator: RvflRegressor, RvflClassifier, MhaTuneRvflTotal Gradient Free based RVFL Regressor: > 200 ModelsTotal Gradient Free based RVFL Classifier: > 200 ModelsSupported performance metrics: >= 67 (47 regressions and 20 classifications)Supported objective functions (as fitness functions or loss functions): >= 67 (47 regressions and 20 classifications)Documentation:https://graforvfl.readthedocs.ioPython versions:>= 3.8.xDependencies:numpy, scipy, scikit-learn, pandas, mealpy, permetricsCitation RequestLearn more about Random Vector Functional Link fromthis paperLearn more about on how to use Gradient Free Optimization to fine-tune the hyper-parameter of RVFL networks fromthis paperLearn more about on how to use Gradient Free Optimization to optimize the weights of RVFL netweorks fromthis paperPlease include these citations if you plan to use this library:@software{nguyen_van_thieu_2023_10258280,
  author       = {Nguyen Van Thieu},
  title        = {GrafoRVFL: A Python Library for Maximizing Performance of Random Vector Functional Link Network with Gradient-Free Optimization},
  month        = dec,
  year         = 2023,
  publisher    = {Zenodo},
  doi          = {10.5281/zenodo.10258280},
  url          = {https://github.com/thieu1995/GrafoRVFL}
}

@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}
}

@inproceedings{nguyen2019building,
  title={Building resource auto-scaler with functional-link neural network and adaptive bacterial foraging optimization},
  author={Nguyen, Thieu and Nguyen, Binh Minh and Nguyen, Giang},
  booktitle={International Conference on Theory and Applications of Models of Computation},
  pages={501--517},
  year={2019},
  organization={Springer}
}

@inproceedings{nguyen2018resource,
  title={A resource usage prediction system using functional-link and genetic algorithm neural network for multivariate cloud metrics},
  author={Nguyen, Thieu and Tran, Nhuan and Nguyen, Binh Minh and Nguyen, Giang},
  booktitle={2018 IEEE 11th conference on service-oriented computing and applications (SOCA)},
  pages={49--56},
  year={2018},
  organization={IEEE},
  doi={10.1109/SOCA.2018.00014}
}InstallationInstall thecurrent PyPI release:$pipinstallgraforvfl==1.0.0Install directly from source code$gitclonehttps://github.com/thieu1995/GrafoRVFL.git
$cdGrafoRVFL
$pythonsetup.pyinstallIn case, you want to install the development version from Github:$pipinstallgit+https://github.com/thieu1995/GrafoRVFLAfter installation, you can import GrafoRVFL as any other Python module:$python
>>>importgraforvfl
>>>graforvfl.__version__ExamplesPlease check all use cases and examples in folderexamples.Current provided classes:fromgraforvflimportDataTransformer,DatafromgraforvflimportRvflRegressor,RvflClassifier,MhaTuneRvflDataTransformerclassWe provide many scaler classes that you can select and make a combination of transforming your data via
DataTransformer class. For example: scale data byLogeand thenSqrtand thenMinMax:fromgraforvflimportDataTransformerimportpandasaspdfromsklearn.model_selectionimporttrain_test_splitdataset=pd.read_csv('Position_Salaries.csv')X=dataset.iloc[:,1:5].valuesy=dataset.iloc[:,5].valuesX_train,y_train,X_test,y_test=train_test_split(X,y,test_size=0.2)dt=DataTransformer(scaling_methods=("loge","sqrt","minmax"))X_train_scaled=dt.fit_transform(X_train)X_test_scaled=dt.transform(X_test)DataclassYou can load your dataset into Data classYou can split dataset to train and test setYou can scale dataset without using DataTransformer classYou can scale labels using LabelEncoderfromgraforvflimportDataimportpandasaspddataset=pd.read_csv('Position_Salaries.csv')X=dataset.iloc[:,1:5].valuesy=dataset.iloc[:,5].valuesdata=Data(X,y,name="position_salaries")#### Split dataset into train and test setdata.split_train_test(test_size=0.2,shuffle=True,random_state=100,inplace=True)#### Feature Scalingdata.X_train,scaler_X=data.scale(data.X_train,scaling_methods=("standard","sqrt","minmax"))data.X_test=scaler_X.transform(data.X_test)data.y_train,scaler_y=data.encode_label(data.y_train)# This is for classification problem onlydata.y_test=scaler_y.transform(data.y_test)Neural NetworkclassfromgraforvflimportRvflRegressor,RvflClassifier,MhaTuneRvflfrommealpyimportIntegerVar,StringVar## 1. Use standard RVFL model for regression problemmodel=RvflRegressor(size_hidden=10,act_name='sigmoid',weight_initializer="random_uniform",trainer="OLS",alpha=0.5)## 2. Use standard RVFL model for classification problemmodel=RvflClassifier(size_hidden=10,act_name='sigmoid',weight_initializer="random_normal",trainer="OLS",alpha=0.5)## 3. Use Gradient Free Optimization to fine-tune the hyper-parameter of RVFL network for regression problem# Design the boundary (parameters)my_bounds=[IntegerVar(lb=2,ub=1000,name="size_hidden"),StringVar(valid_sets=("none","relu","leaky_relu","celu","prelu","gelu","elu","selu","rrelu","tanh","sigmoid"),name="act_name"),StringVar(valid_sets=("orthogonal","he_uniform","he_normal","glorot_uniform","glorot_normal","lecun_uniform","lecun_normal","random_uniform","random_normal"),name="weight_initializer")]opt_paras={"name":"WOA","epoch":10,"pop_size":20}model=MhaTuneRvfl(problem_type="regression",bounds=my_bounds,cv=3,scoring="MSE",optimizer="OriginalWOA",optimizer_paras=opt_paras,verbose=True)Supported functions inmodelobjectfromgraforvflimportRvflRegressor,Datadata=Data()# Assumption that you have provided this object like abovemodel=RvflRegressor(size_hidden=10,act_name='sigmoid',weight_initializer="random_uniform",trainer="OLS",alpha=0.5)## Train the modelmodel.fit(data.X_train,data.y_train)## Predicting a new resulty_pred=model.predict(data.X_test)## Calculate metrics using score or scores functions.print(model.score(data.X_test,data.y_test,method="MAE"))print(model.scores(data.X_test,data.y_test,list_methods=["MAPE","NNSE","KGE","MASE","R2","R","R2S"]))## Calculate metrics using evaluate functionprint(model.evaluate(data.y_test,y_pred,list_metrics=("MSE","RMSE","MAPE","NSE")))## Save performance metrics to csv filemodel.save_metrics(data.y_test,y_pred,list_metrics=("RMSE","MAE"),save_path="history",filename="metrics.csv")## Save training loss to csv filemodel.save_loss_train(save_path="history",filename="loss.csv")## Save predicted labelmodel.save_y_predicted(X=data.X_test,y_true=data.y_test,save_path="history",filename="y_predicted.csv")## Save modelmodel.save_model(save_path="history",filename="traditional_mlp.pkl")## Load modeltrained_model=RvflRegressor.load_model(load_path="history",filename="traditional_mlp.pkl")Support (questions, problems)Official LinksOfficial source code repo:https://github.com/thieu1995/GrafoRVFLOfficial document:https://graforvfl.readthedocs.io/Download releases:https://pypi.org/project/graforvfl/Issue tracker:https://github.com/thieu1995/GrafoRVFL/issuesNotable changes log:https://github.com/thieu1995/GrafoRVFL/blob/main/ChangeLog.mdOfficial chat group:https://t.me/+fRVCJGuGJg1mNDg1This project also related to our another projects which are "optimization" and "machine learning", check it here:https://github.com/thieu1995/mealpyhttps://github.com/thieu1995/metaheuristicshttps://github.com/thieu1995/opfunuhttps://github.com/thieu1995/enoppyhttps://github.com/thieu1995/permetricshttps://github.com/thieu1995/MetaClusterhttps://github.com/thieu1995/pfevaluatorhttps://github.com/thieu1995/IntelELMhttps://github.com/thieu1995/reflamehttps://github.com/thieu1995/MetaPerceptronhttps://github.com/aiir-team