欢迎访问宙启技术站
智能推送

使用Hyperopt进行机器学习模型优化的Python示例

发布时间:2024-01-06 12:10:24

Hyperopt是一个用于优化机器学习模型的Python库。它提供了一种使用贝叶斯优化算法进行模型调优的简单方法。在本文中,我们将介绍如何使用Hyperopt来优化一个分类模型的超参数。

首先,我们需要安装Hyperopt库。可以通过在命令行中运行以下命令来完成安装:

pip install hyperopt

有了Hyperopt库,我们现在可以开始使用了。下面是一个使用Hyperopt进行分类模型优化的示例:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.neighbors import KNeighborsClassifier
from hyperopt import fmin, tpe, hp, STATUS_OK, Trials

# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target

# 将数据集划分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义超参数搜索空间
space = {
    'n_neighbors': hp.choice('n_neighbors', range(1, 11)),
    'weights': hp.choice('weights', ['uniform', 'distance']),
    'p': hp.choice('p', [1, 2])
}

# 定义目标函数,即分类模型的性能评估指标
def objective(params):
    model = KNeighborsClassifier(**params)
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    return {'loss': -accuracy, 'status': STATUS_OK}

# 创建Trials对象,并指定要运行的最大迭代次数
trials = Trials()
max_evals = 100

# 使用TPE算法进行贝叶斯优化
best = fmin(fn=objective, space=space, algo=tpe.suggest, max_evals=max_evals, trials=trials)

# 输出最佳超参数组合
print(best)

在上面的示例中,我们首先加载鸢尾花数据集,并将其划分为训练集和测试集。然后,我们定义了一个超参数搜索空间,其中包含了三个超参数:邻居数量(n_neighbors)、权重模式(weights)和距离度量方式(p)。

接下来,我们定义了一个目标函数,其参数为超参数组合,并返回一个包含模型性能指标的字典。这里,我们使用K最近邻分类器作为模型,并计算在测试集上的预测准确率作为性能指标。

然后,我们创建了一个Trials对象,并指定了最大迭代次数。然后,我们使用TPE算法进行贝叶斯优化,使用fmin函数来找到最佳超参数组合。

最后,我们打印出了找到的最佳超参数组合。

在运行上述代码之后,将会输出找到的最佳超参数组合。具体的运行结果可能因为数据集的划分和随机性而略有不同,但输出的结果应该类似于:

{'n_neighbors': 4, 'p': 0, 'weights': 0}

在这个示例中,最佳超参数组合是n_neighbors=4、p=1和weights='uniform'。你可以根据自己的数据和模型来修改搜索空间和目标函数,并使用Hyperopt来优化你的机器学习模型。