Source code for mafese.utils.estimator

#!/usr/bin/env python
# Created by "Thieu" at 15:43, 24/05/2023 ----------%                                                                               
#       Email: nguyenthieu2102@gmail.com            %                                                    
#       Github: https://github.com/thieu1995        %                         
# --------------------------------------------------%

from sklearn.svm import SVC, SVR, LinearSVC
from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor
from sklearn.neural_network import MLPRegressor, MLPClassifier
from sklearn.linear_model import Lasso, LogisticRegression, LinearRegression, BayesianRidge, Perceptron
from sklearn.ensemble import ExtraTreesRegressor, RandomForestRegressor, AdaBoostRegressor, GradientBoostingRegressor
from sklearn.ensemble import ExtraTreesClassifier, RandomForestClassifier, AdaBoostClassifier, GradientBoostingClassifier


[docs]def get_general_estimator(problem, name, paras=None): if paras is None: paras = {} name = name.lower() if problem == "regression": if name == "knn": return KNeighborsRegressor(**paras) elif name == "svm": return SVR(**paras) elif name == "rf": return RandomForestRegressor(**paras) elif name == "adaboost": return AdaBoostRegressor(**paras) elif name == "xgb": return GradientBoostingRegressor(**paras) elif name == "tree": return ExtraTreesRegressor(**paras) elif name == "ann": return MLPRegressor(**paras) else: raise ValueError(f"For Regression problem, we don't support: {name} regressor as string. \n" f"You can define your own scikit-learn model.") else: if name == 'knn': return KNeighborsClassifier(**paras) elif name == 'svm': return SVC(**paras) elif name == 'rf': return RandomForestClassifier(**paras) elif name == "adaboost": return AdaBoostClassifier(**paras) elif name == "xgb": return GradientBoostingClassifier(**paras) elif name == "tree": return ExtraTreesClassifier(**paras) elif name == "ann": return MLPClassifier(**paras) else: raise ValueError(f"For Classification problem, we don't support: {name} classifier as string. \n" f"You can define your own scikit-learn model.")
[docs]def get_recursive_estimator(problem, name, paras=None): if paras is None: paras = {} name = name.lower() if problem == "regression": if name == "rf": return RandomForestRegressor(**paras) elif name == "svm": return SVR(**paras, kernel="linear") elif name == "adaboost": return AdaBoostRegressor(**paras) elif name == "xgb": return GradientBoostingRegressor(**paras) elif name == "tree": return ExtraTreesRegressor(**paras) else: raise ValueError(f"For Regression problem, with Recursive method, you can't use: {name} regressor as base estimator.") else: if name == 'rf': return RandomForestClassifier(**paras) elif name == 'svm': est = SVC(**paras) est.set_params(**{"kernel": "linear"}) return est elif name == "adaboost": return AdaBoostClassifier(**paras) elif name == "xgb": return GradientBoostingClassifier(**paras) elif name == "tree": return ExtraTreesClassifier(**paras) else: raise ValueError(f"For Classification problem, with Recursive method, you can't use: {name} classifier as base estimator.")
[docs]def get_lasso_based_estimator(problem, name, paras=None): if paras is None: paras = {} name = name.lower() if problem == "regression": if name == "lasso": return Lasso(**paras) else: raise ValueError(f"For Regression problem, lasso-based method only supports 'lasso' estimator.") else: if name == "lasso": return Lasso(**paras) elif name == "lr": est = LogisticRegression(**paras) est.set_params(**{"penalty": "l1", "solver": "liblinear"}) return est elif name == "svm": return LinearSVC(**paras) else: raise ValueError(f"For Classification problem, lasso-based method supports: 'lasso', 'lr', and 'svm' estimator.")
[docs]def get_tree_based_estimator(problem, name, paras=None): if paras is None: paras = {} name = name.lower() if problem == "regression": if name == "rf": return RandomForestRegressor(**paras) elif name == "adaboost": return AdaBoostRegressor(**paras) elif name == "xgb": return GradientBoostingRegressor(**paras) elif name == "tree": return ExtraTreesRegressor(**paras) else: raise ValueError(f"For Regression problem, we don't support {name} estimator.") else: if name == "rf": return RandomForestClassifier(**paras) elif name == "adaboost": return AdaBoostClassifier(**paras) elif name == "xgb": return GradientBoostingClassifier(**paras) elif name == "tree": return ExtraTreesClassifier(**paras) else: raise ValueError(f"For Classification problem, we don't support {name} estimator.")