Mango 使用教程
mango Parallel Hyperparameter Tuning in Python 项目地址: https://gitcode.com/gh_mirrors/mango38/mango
1. 项目介绍
Mango 是一个用于寻找机器学习分类器最优超参数的 Python 库。它支持在连续、离散和分类值上并行优化复杂的搜索空间。Mango 的特点包括:
- 易于定义与 scikit-learn 兼容的复杂搜索空间。
- 一种新颖的无梯度优化器,适用于连续/离散/分类值。
- 模块化设计,可以在本地、集群或云基础架构上调度目标函数。
- 应用层故障检测,可在通用硬件上进行扩展。
- 由于在生产环境中的测试和使用,新功能持续添加。
2. 项目快速启动
以下是如何快速启动 Mango 项目的步骤:
首先,使用 pip 安装 Mango:
pip install arm-mango
或者从源代码安装:
git clone https://github.com/ARM-software/mango.git
cd mango
pip3 install .
接下来,通过以下示例代码最小化一个二次函数,其输入是一个介于 -10 和 10 之间的整数。
from mango import scheduler, Tuner
# 搜索空间
param_space = dict(
x=range(-10, 10)
)
# 二次目标函数
@scheduler.serial
def objective(x):
return x * x
# 初始化并运行 Tuner
tuner = Tuner(param_space, objective)
results = tuner.minimize()
print(f'最优参数值:{results["best_params"]},目标函数值:{results["best_objective"]}')
# 输出:最优参数值:{'x': 0},目标函数值:0
3. 应用案例和最佳实践
以下是一个使用 Mango 进行超参数调优的案例:
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
from mango import Tuner, scheduler
# KNN 分类器的超参数搜索空间
param_space = dict(
n_neighbors=range(1, 50),
algorithm=['auto', 'ball_tree', 'kd_tree', 'brute']
)
# 目标函数
@scheduler.serial
def objective(**params):
X, y = datasets.load_breast_cancer(return_X_y=True)
clf = KNeighborsClassifier(**params)
score = cross_val_score(clf, X, y, scoring='accuracy').mean()
return score
# 调用 Tuner 进行最大化
tuner = Tuner(param_space, objective)
results = tuner.maximize()
print('最佳参数:', results['best_params'])
print('最佳准确率:', results['best_objective'])
# 输出:最佳参数:{'algorithm': 'ball_tree', 'n_neighbors': 11}
# 输出:最佳准确率:0.9332401800962584
请注意,最佳参数可能会不同,但准确率应该接近 0.93。更多示例可在项目的 examples
目录中找到。
4. 典型生态项目
Mango 可以与多种机器学习框架和库一起使用,例如 scikit-learn、XGBoost 和 SVM。以下是一些典型的生态项目配置示例:
- 随机森林分类器:
param_space = dict(
max_features=['sqrt', 'log2', 0.1, 0.3, 0.5, 0.7, 0.9],
n_estimators=range(10, 1000, 50),
bootstrap=[True, False],
max_depth=range(1, 20),
min_samples_leaf=range(1, 10)
)
- XGBoost 分类器:
from scipy.stats import uniform
from mango.domain.distribution import loguniform
param_space = {
'n_estimators': range(10, 2001, 100),
'max_depth': range(1, 15),
'reg_alpha': loguniform(-3, 6),
'booster': ['gbtree', 'gblinear'],
'colsample_bylevel': uniform(0.05, 0.95),
'colsample_bytree': uniform(0.05, 0.95),
'learning_rate': loguniform(-3, 3),
'reg_lambda': loguniform(-3, 6),
'min_child_weight': loguniform(0, 2),
'subsample': uniform(0.1, 0.89)
}
- SVM:
param_dict = {
'kernel': ['rbf', 'sigmoid'],
'gamma': uniform(0.1, 4),
'C': loguniform(-7, 8)
}
以上代码块展示了如何定义不同模型的搜索空间。在实际应用中,可以根据具体的模型和需求调整搜索空间参数。
mango Parallel Hyperparameter Tuning in Python 项目地址: https://gitcode.com/gh_mirrors/mango38/mango
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考