终于把机器学习中的超参数调优搞懂了!!

今天给大家分享机器学习中一个重要的知识点,超参数调优超参数调优(Hyperparameter Tuning)是机器学习模型开发过程中一个关键步骤,旨在通过调整模型的超参数来优化模型的性能。 超参数不同于模型参数,后者是在训练过程中通过数据学习得到的,而超参数是在训练之前设定的,通常需要通过试验和优化来确定。 什么是超参数超参数是指在训练机器学习模型之前需要人为设定的参数。

今天给大家分享机器学习中一个重要的知识点,超参数调优

超参数调优(Hyperparameter Tuning)是机器学习模型开发过程中一个关键步骤,旨在通过调整模型的超参数来优化模型的性能。

超参数不同于模型参数,后者是在训练过程中通过数据学习得到的,而超参数是在训练之前设定的,通常需要通过试验和优化来确定。

什么是超参数

超参数是指在训练机器学习模型之前需要人为设定的参数。

常见的超参数包括

  • 学习率:控制模型在每一步梯度下降中权重更新的幅度。
  • 正则化参数:如 L1、L2 正则化系数,用于防止模型过拟合。
  • 网络结构参数:如神经网络的层数、每层的神经元数量、激活函数类型等。
  • 优化算法的选择:如SGD、Adam、RMSprop等。

选择合适的超参数对于模型的性能有着显著的影响,因此超参数调优是模型开发过程中不可或缺的一部分。

超参数调优的重要性

  1. 提升模型性能合适的超参数组合可以显著提高模型的准确性、泛化能力和稳定性。
  2. 防止过拟合或欠拟合通过调整超参数,可以平衡模型的复杂度,避免模型在训练数据上表现过好但在测试数据上表现差(过拟合),或在训练数据和测试数据上都表现不佳(欠拟合)。
  3. 提高计算效率合理的批量大小、学习率等设置可以显著加快模型训练的速度。

常见的超参数调优方法

以下是几种常用的超参数调优方法,每种方法都有其优缺点和适用场景。

网格搜索

网格搜索是最简单直观的超参数调优方法。

它通过在预定义的超参数空间中,系统地遍历所有可能的参数组合,并在每个组合上训练和评估模型,最后选择表现最佳的参数组合。

终于把机器学习中的超参数调优搞懂了!!

工作流程

  1. 定义超参数搜索空间:为每个超参数指定离散的取值范围。
  2. 遍历搜索空间的所有组合。
  3. 在验证集上评估每个组合的性能。
  4. 返回验证性能最好的超参数组合。

示例

假设有两个超参数:

  • 学习率:[0.01, 0.1, 1]
  • 正则化系数:[0.001, 0.01]

网格搜索会评估以下 6 组组合

  • (0.01, 0.001), (0.01, 0.01)
  • (0.1, 0.001), (0.1, 0.01)
  • (1, 0.001), (1, 0.01)
优缺点

优点

  1. 简单直观:易于理解和实现
  2. 全面性:对所有可能组合逐一尝试,保证找到最佳超参数(在搜索空间内)。

缺点

  1. 计算开销高:当搜索空间较大或超参数维度较高时,计算成本会指数级增长。
  2. 效率低下:即使某些超参数对模型性能影响较小,网格搜索仍会穷举所有可能的组合,浪费计算资源。

适用场景

  • 适用于超参数数量少且每个超参数的取值范围有限的情况。
  • 对模型性能要求高,且计算资源充足时。

以下是使用 Scikit-learn 进行网格搜索的示例代码。

复制
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV

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

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义模型
model = RandomForestClassifier(random_state=42)

# 定义超参数搜索范围
param_grid = {
    'n_estimators': [10, 50, 100],
    'max_depth': [3, 5, 10],
    'min_samples_split': [2, 5]
}

# 网格搜索
grid_search = GridSearchCV(model, param_grid, cv=3, scoring='accuracy', verbose=1)
grid_search.fit(X_train, y_train)

# 输出最佳参数和准确率
print("Grid Search Best Parameters:", grid_search.best_params_)
print("Grid Search Best Score:", grid_search.best_score_)

随机搜索

随机搜索通过随机采样超参数搜索空间中的点来评估模型性能,而不是遍历所有组合。

其核心思想是:在高维搜索空间中,随机采样往往比均匀搜索更有效,尤其是当部分超参数对性能影响较大时。

终于把机器学习中的超参数调优搞懂了!!

工作流程

  1. 定义超参数搜索空间:为每个超参数指定取值范围,可以是离散集合或连续分布。
  2. 随机采样固定数量的超参数组合。
  3. 在验证集上评估每组采样的性能。
  4. 返回性能最好的超参数组合。

示例

假设有两个超参数

  • 学习率:[0.01, 0.1, 1]
  • 正则化系数:[0.001, 0.01]

如果设置采样次数为 4,则随机搜索可能得到如下结果

(0.01, 0.001), (0.1, 0.01), (1, 0.01), (0.1, 0.001)

优缺点

优点

  1. 计算效率高:不需要遍历所有组合,显著减少计算成本。
  2. 高维搜索空间适用性强:能够有效探索大范围的高维空间。
  3. 灵活性:允许搜索空间是连续的分布,避免离散化的局限。

缺点

  1. 可能遗漏最佳参数:采样次数不足时,可能错过全局最优的参数组合。
  2. 不确定性:由于随机性,不同运行结果可能不一致。

适用场景

  • 适用于超参数数量较多或每个超参数的取值范围较大的情况。
  • 在计算资源有限的情况下,通过合理设置采样次数,快速找到较优的超参数组合。

以下是使用 Scikit-learn 进行随机搜索的示例代码。

复制
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint

# 定义模型
model = RandomForestClassifier(random_state=42)

# 定义超参数分布
param_distributions = {
    'n_estimators': randint(10, 100),
    'max_depth': randint(3, 10),
    'min_samples_split': randint(2, 6)
}

# 随机搜索
random_search = RandomizedSearchCV(
    model, param_distributions, n_iter=20, cv=3, scoring='accuracy', random_state=42, verbose=1
)
random_search.fit(X_train, y_train)

# 输出最佳参数和准确率
print("Random Search Best Parameters:", random_search.best_params_)
print("Random Search Best Score:", random_search.best_score_)

贝叶斯优化

贝叶斯优化是一种基于概率模型的优化方法,通过构建目标函数的代理模型(通常是高斯过程),并结合采集函数(Acquisition Function),在每一步迭代中选择最有潜力的超参数组合进行评估,从而高效地探索和利用超参数空间,找到最优的超参数组合。

终于把机器学习中的超参数调优搞懂了!!

工作原理

贝叶斯优化的过程包括以下几个步骤。

  1. 初始化随机采样几组超参数,训练模型并记录性能。
  2. 构建代理模型基于当前已采样的点,构建超参数与性能的近似关系。
  3. 优化采集函数基于代理模型,利用采集函数选择下一个最有潜力的超参数组合。
  4. 更新模型对选定的超参数组合进行模型训练和评估,并更新代理模型。
  5. 重复迭代:重复步骤2-4,直到达到预设的迭代次数或计算资源限制。
  6. 选择最优组合从所有评估过的超参数组合中选择最佳的。

优缺点优点

  1. 高效性:相比网格搜索和随机搜索,贝叶斯优化在较少的评估次数下能够找到更优的超参数组合。
  2. 适用复杂目标函数:可以处理非线性、非凸的目标函数。

缺点

  1. 实现复杂:相较于网格搜索和随机搜索,贝叶斯优化的实现更加复杂,需要选择合适的代理模型和采集函数。
  2. 计算复杂度高:构建和更新代理模型(如高斯过程)在高维空间中计算成本较高。

适用场景

  • 搜索空间复杂,评估单次超参数成本较高时(如深度学习)。
  • 对调优效率要求高且资源有限时。

以下是使用 optuna 库进行贝叶斯优化的示例代码。

复制
import optuna
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

# 定义目标函数
def objective(trial):
    # 定义超参数的搜索空间
    n_estimators = trial.suggest_int('n_estimators', 10, 100)
    max_depth = trial.suggest_int('max_depth', 3, 10)
    min_samples_split = trial.suggest_int('min_samples_split', 2, 6)
    
    # 创建模型
    model = RandomForestClassifier(
        n_estimators=n_estimators,
        max_depth=max_depth,
        min_samples_split=min_samples_split,
        random_state=42
    )
    
    # 交叉验证评估
    score = cross_val_score(model, X_train, y_train, cv=3, scoring='accuracy').mean()
    return score

# 开始贝叶斯优化
study = optuna.create_study(directinotallow='maximize')
study.optimize(objective, n_trials=20)

# 输出最佳参数和准确率
print("Bayesian Optimization Best Parameters:", study.best_params)
print("Bayesian Optimization Best Score:", study.best_value)

相关资讯

稳健且准确,AlphaFold 结合两种 AI 方法,实现蛋白质化学位移自动分配

编辑 | 绿萝化学位移分配对于基于核磁共振 (NMR) 的蛋白质结构、动力学和相互作用研究至关重要,可提供重要的原子级见解。然而,获得化学位移分配是劳动密集型的并且需要大量的测量时间。为了解决这一限制,苏黎世联邦理工学院(ETH Zurich)的研究人员之前提出了 ARTINA——一种用于自动分配二维 (2D)–4D NMR 谱的深度学习方法。近日,研究人员提出了一种将 ARTINA 与 AlphaFold 和 UCBShift 相结合的综合方法,能够减少实验数据、提高准确性并增强大型系统的稳健性,从而实现化学位移

发现38万种新材料、17天自主合成41种新化合物,DeepMind一日两篇论文登上Nature

编辑 | 萝卜皮从计算机芯片、电池到太阳能电池板等现代技术都依赖于无机晶体。开发这些新技术,所需的晶体必须稳定,否则材料就会分解,而每个新的、稳定的晶体背后可能需要研究人员数月或者更久的艰苦实验。Google DeepMind 材料团队分享了 220 万颗新晶体的发现,相当于近 800 年的知识。该团队推出了新的深度学习工具,用于材料探索的图网络 (GNoME),可通过预测新材料的稳定性来显著提高发现的速度和效率。论文链接: GNoME,科学家可以使人类已知的技术上可行的材料数量成倍增加。在其 220 万个预测中,

可直接比较潜在新药的性能,杜克大学团队开发新的药物AI模型

编辑 | 白菜叶目前的分子机器学习模型往往将单个分子作为输入,来预测其生物、化学或物理特性。然而,此类算法需要大型数据集,并且尚未针对预测分子之间的性质差异进行优化,限制了它们从较小数据集学习的能力,也限制了直接比较两个分子预期性质的能力。杜克大学(Duke University)的研究人员开发了 DeepDelta,这是一种成对深度学习方法,可以同时处理两个分子,并学习从小数据集中预测两个分子之间的属性差异。在 10 个 ADMET 基准任务中,DeepDelta 方法显著优于两种已建立的分子机器学习算法:定向消