`GridSearchCV` 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: `GridSearchCV` 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。

1. GridSearchCV

GridSearchCV 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。这种方法在参数空间较小时非常有效,但当参数空间较大时,计算成本会非常高。

示例代码

from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris

# 加载数据
iris = load_iris()
X = iris.data
y = iris.target

# 定义参数网格
param_grid = {
   
    'C': [0.1, 1, 10, 100],
    'gamma': [1, 0.1, 0.01, 0.001],
    'kernel': ['rbf', 'linear']
}

# 初始化SVM分类器
svm = SVC()

# 使用GridSearchCV进行参数搜索
grid_search = GridSearchCV(svm, param_grid, cv=5)

# 拟合数据
grid_search.fit(X, y)

# 输出最佳参数
print("Best parameters set found on development set:")
print()
print(grid_search.best_params_)

# 输出最佳模型在验证集上的分数
print("Grid scores on development set:")
print()
means = grid_search.cv_results_['mean_test_score']
stds = grid_search.cv_results_['std_test_score']
for mean, std, params in zip(means, stds, grid_search.cv_results_['params']):
    print("%0.3f (+/-%0.03f) for %r"
          % (mean, std * 2, params))

# 使用最佳参数进行预测
best_svm = grid_search.best_estimator_
y_pred = best_svm.predict(X)

代码解释

  • 首先,我们从 sklearn.datasets 加载了鸢尾花数据集(Iris dataset),这是一个常用的多类分类问题的数据集。
  • 然后,我们定义了一个参数网格 param_grid,其中包含了我们想要搜索的SVM分类器的超参数。在这个例子中,我们搜索了 C(错误项的惩罚系数)、gamma('rbf'、'poly' 和 'sigmoid' 的核函数系数)和 kernel(核函数类型)这三个参数。
  • 接着,我们初始化了一个SVM分类器 svm,并使用 GridSearchCV 对其进行参数搜索。在 GridSearchCV 的初始化中,我们传入了SVM分类器、参数网格和交叉验证的折数(cv=5 表示5折交叉验证)。
  • 然后,我们使用 fit 方法拟合数据。在这个过程中,GridSearchCV 会对参数网格中的每一个参数组合进行交叉验证,并计算其在验证集上的分数。
  • 拟合完成后,我们可以使用 best_params_ 属性查看最佳参数组合,使用 cv_results_ 属性查看每个参数组合在验证集上的分数。
  • 最后,我们使用最佳参数组合训练了一个SVM分类器 best_svm,并使用它进行了预测。

2. RandomizedSearchCV

RandomizedSearchCV 是一种随机搜索方法,它会在指定的参数分布中随机采样参数组合进行交叉验证。与 GridSearchCV 相比,RandomizedSearchCV 在参数空间较大时更加高效,因为它不需要穷举搜索所有的参数组合。

示例代码

```python
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint as sp_randint
from sklearn.svm import SVC
from sklearn.datasets import load_iris

加载数据

iris = load_iris()
X = iris.data
y = iris.target

定义参数分布

param_dist = {
'C': sp_randint(1, 100),
'gamma': sp_randint(0, 10) * 0.01,
'kernel': ['rbf', 'linear'],
'class_weight': [None, 'balanced
处理结果:

1. GridSearchCV

GridSearchCV 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。这种方法在参数空间较小时非常有效,但当参数空间较大时,计算成本会非常高。

示例代码

```python

加载数据

定义参数网格

'C' [0.1, 1, 10, 100],
'gamma'
[1, 0.1, 0.01, 0.001],
'kernel'_ ['rbf', 'linear']

初始化SVM分类器

使用GridSearchCV进行参数搜索

拟合数据

输出最佳参数

输出最佳模型在验证集上的分数

print("%0.3f (+_-%0.03f) for %r"
% (mean, std * 2, params))

使用最佳参数进行预测

  • 首先,我们从 sklearn.datasets 加载了鸢尾花数据集(Iris dataset),这是一个常用的多类分类问题的数据集。

    2. RandomizedSearchCV

    RandomizedSearchCV 是一种随机搜索方法,它会在指定的参数分布中随机采样参数组合进行交叉验证。与 GridSearchCV 相比,RandomizedSearchCV 在参数空间较大时更加高效,因为它不需要穷举搜索所有的参数组合。

    示例代码

    ```python

    加载数据

    定义参数分布

    'C'_ sprandint(1, 100),
    'gamma'
    sprandint(0, 10) * 0.01,
    'kernel'
    ['rbf', 'linear'],
    'classweight' [None, 'balanced
相关文章
|
移动开发 文字识别 算法
论文推荐|[PR 2019]SegLink++:基于实例感知与组件组合的任意形状密集场景文本检测方法
本文简要介绍Pattern Recognition 2019论文“SegLink++: Detecting Dense and Arbitrary-shaped Scene Text by Instance-aware Component Grouping”的主要工作。该论文提出一种对文字实例敏感的自下而上的文字检测方法,解决了自然场景中密集文本和不规则文本的检测问题。
1947 0
论文推荐|[PR 2019]SegLink++:基于实例感知与组件组合的任意形状密集场景文本检测方法
|
1月前
|
编解码 算法 数据可视化
lintsampler:高效从任意概率分布生成随机样本的新方法
在实际应用中,从复杂概率密度函数(PDF)中抽取随机样本的需求非常普遍,涉及统计估计、蒙特卡洛模拟和物理仿真等领域。`lintsampler` 是一个纯 Python 库,旨在高效地从任意概率分布中生成随机样本。它通过线性插值采样算法,简化了复杂分布的采样过程,提供了比传统方法如 MCMC 和拒绝采样更简便和高效的解决方案。`lintsampler` 的设计目标是让用户能够轻松生成高质量的样本,而无需复杂的参数调整。
23 1
lintsampler:高效从任意概率分布生成随机样本的新方法
|
4月前
修改预测函数
【7月更文挑战第22天】修改预测函数。
46 6
YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)
YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)
|
机器学习/深度学习 PyTorch 算法框架/工具
base model初始化large model,造成的参数矩阵对不上权重不匹配问题+修改预训练权重形状和上采样
base model初始化large model,造成的参数矩阵对不上权重不匹配问题+修改预训练权重形状和上采样
216 0
|
数据格式
重写transformers.Trainer的compute_metrics方法计算评价指标时,形参如何包含自定义的数据
  这个问题苦恼我几个月,之前一直用替代方案。这次实在没替代方案了,transformers源码和文档看了一整天,终于在晚上12点找到了。。。
542 0
|
机器学习/深度学习 存储
取出网络里面的所有参数,并计算所有参数的二范数
以上代码定义了一个名为calculate_l2_norm的函数,该函数接受一个神经网络模型作为参数,并返回该模型中所有参数的二范数。在函数体内,我们首先创建一个空张量l2_norm_squared,用于存储所有参数的平方和。 然后,通过遍历模型中的所有参数并将它们的平方和累加到l2_norm_squared中来计算所有参数的平方和。最后,我们返回所有参数的二范数。 在主程序中,首先实例化你自己定义的神经网络对象,然后调用calculate_l2_norm函数来计算所有参数的二范数。
217 0
torch 如何在迭代训练中,只计算参数梯度,不更新参数。并且将参数的梯度保存到列表,这个列表的值不随着梯度清零而跟着变为零
在使用 torch.autograd.backward() 计算梯度后,可以通过设置参数的 requires_grad 属性为 False 来阻止参数更新。同时,通过将计算出的梯度值放入一个列表中来保存,这个列表的值不会随着梯度清零而清零
724 0
|
PyTorch 算法框架/工具
已经定义好了一个张量,如何增加代码要求计算梯度?
在 PyTorch 中,可以使用 requires_grad_() 方法来动态设置张量的 requires_grad 属性为 True,从而要求计算梯度。具体来说,对于已经创建的张量 x,可以通过调用 x.requires_grad_() 来将其设置为需要计算梯度的张量。
349 0