文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

超强!机器学习超参数调优指南

2024-11-29 21:08

关注

超参数是那些在训练模型之前需要设置的参数,而不是在训练过程中自动学习的参数。

常见的超参数包括学习率、批大小、正则化参数、神经网络的层数和每层的神经元数等。

常见的超参数调优技术

1.网格搜索

网格搜索是一种穷举搜索技术,用于系统地遍历多种参数组合,以找到最佳的模型参数。

这种方法简单直接,但计算成本可能较高,尤其是当参数空间较大时。

优点:

缺点:

代码示例

from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
import numpy as np

# 定义模型
model = RandomForestClassifier()

# 定义参数网格
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_features': ['auto', 'sqrt', 'log2'],
    'max_depth': [None, 10, 20, 30]
}

# 创建网格搜索对象
grid_search = GridSearchCV(estimator=model, param_grid=param_grid, cv=3, scoring='accuracy')

# 拟合网格搜索
grid_search.fit(X_train, y_train)

# 最优参数和最优得分
print("最优参数:", grid_search.best_params_)
print("最高得分:", grid_search.best_score_)

2.随机搜索

随机搜索不像网格搜索那样尝试所有可能的组合,而是在参数空间中随机选取参数组合。

这种方法可以在更大的参数空间内更快地找到不错的解。

优点:

缺点:

代码示例

from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestClassifier

# 定义模型
model = RandomForestClassifier()

# 定义参数分布
param_dist = {
    'n_estimators': [50, 100, 200, 300],
    'max_features': ['auto', 'sqrt', 'log2'],
    'max_depth': [None, 10, 20, 30, 40]
}

# 创建随机搜索对象
random_search = RandomizedSearchCV(estimator=model, param_distributinotallow=param_dist, n_iter=100, cv=3, scoring='accuracy')

# 拟合随机搜索
random_search.fit(X_train, y_train)

# 最优参数和最优得分
print("最优参数:", random_search.best_params_)
print("最高得分:", random_search.best_score_)

3.贝叶斯优化

贝叶斯优化是一种高效的全局优化技术,广泛用于机器学习领域中模型超参数的调优。

这种方法利用贝叶斯统计理论,通过构建一个代理模型(通常是高斯过程)来预测目标函数的表现,并基于这个模型进行决策,以选择新的参数值来测试。

优点:

缺点:

代码示例

from bayes_opt import BayesianOptimization
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

# 定义目标函数
def rf_cv(n_estimators, max_features, max_depth):
    estimator = RandomForestClassifier(
        n_estimators=int(n_estimators),
        max_features=min(max_features, 0.999),  # 浮点类型
        max_depth=int(max_depth),
        random_state=2
    )
    cval = cross_val_score(estimator, X_train, y_train, scoring='accuracy', cv=5)
    return cval.mean()

# 定义参数范围
pbounds = {
    'n_estimators': (50, 300),
    'max_features': (0.1, 0.999),
    'max_depth': (5, 50)
}
# 初始化贝叶斯优化
optimizer = BayesianOptimization(f=rf_cv, pbounds=pbounds, random_state=1)

# 执行优化
optimizer.maximize(init_points=2, n_iter=10)

# 输出最优参数
print("最优参数:", optimizer.max['params'])

4.Hyperband

Hyperband 是一种基于多武装赌博机的优化技术,利用资源分配和早期停止策略来快速找到最优参数。

这种方法主要适用于需要大量计算资源的情况,如大规模深度学习模型训练。

优点:

缺点:

代码示例

在这个例子中,我们定义了一个简单的神经网络,并用 Hyperband 算法来调整网络中的隐藏层单元数和学习率。

此外,我们使用了 Fashion MNIST 数据集来训练和验证模型。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from kerastuner.tuners import Hyperband
def build_model(hp):
    model = keras.Sequential()
    model.add(layers.Flatten(input_shape=(28, 28)))
    # 使用hp.Int()来定义学习的参数
    model.add(layers.Dense(units=hp.Int('units', min_value=32, max_value=512, step=32), activatinotallow='relu'))
    model.add(layers.Dense(10, activatinotallow='softmax'))
    model.compile(
        optimizer=keras.optimizers.Adam(
            hp.Choice('learning_rate', [1e-2, 1e-3, 1e-4])),
        loss='sparse_categorical_crossentropy',
        metrics=['accuracy'])
    return model

# 加载数据
(x_train, y_train), (x_test, y_test) = keras.datasets.fashion_mnist.load_data()
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255

# 初始化Hyperband调优器
tuner = Hyperband(
    build_model,
    objective='val_accuracy',
    max_epochs=40,
    directory='my_dir',
    project_name='hyperband_tuning'
)

# 执行超参数搜索
tuner.search(x_train, y_train, epochs=10, validation_split=0.2)

# 获取最优模型
best_model = tuner.get_best_models(num_models=1)[0]
best_model.evaluate(x_test, y_test)


来源:程序员学长内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯