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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: `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”的主要工作。该论文提出一种对文字实例敏感的自下而上的文字检测方法,解决了自然场景中密集文本和不规则文本的检测问题。
1916 0
论文推荐|[PR 2019]SegLink++:基于实例感知与组件组合的任意形状密集场景文本检测方法
YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)
YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)
|
传感器 编解码 计算机视觉
使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)
使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)
105 0
使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)
|
机器学习/深度学习
将迭代次数问题几何化的一个计算例子
神经网络调参,设置迭代次数
101 0
将迭代次数问题几何化的一个计算例子
|
测试技术
参数与非参数检验:理解差异并正确使用
数据科学是一个快速发展的领域,它在很大程度上依赖于统计技术来分析和理解复杂的数据集。这个过程的一个关键部分是假设检验,它有助于确定从样本中获得的结果是否可以推广到总体。
267 0
torch 如何在迭代训练中,只计算参数梯度,不更新参数。并且将参数的梯度保存到列表,这个列表的值不随着梯度清零而跟着变为零
在使用 torch.autograd.backward() 计算梯度后,可以通过设置参数的 requires_grad 属性为 False 来阻止参数更新。同时,通过将计算出的梯度值放入一个列表中来保存,这个列表的值不会随着梯度清零而清零
649 0
|
机器学习/深度学习 存储
取出网络里面的所有参数,并计算所有参数的二范数
以上代码定义了一个名为calculate_l2_norm的函数,该函数接受一个神经网络模型作为参数,并返回该模型中所有参数的二范数。在函数体内,我们首先创建一个空张量l2_norm_squared,用于存储所有参数的平方和。 然后,通过遍历模型中的所有参数并将它们的平方和累加到l2_norm_squared中来计算所有参数的平方和。最后,我们返回所有参数的二范数。 在主程序中,首先实例化你自己定义的神经网络对象,然后调用calculate_l2_norm函数来计算所有参数的二范数。
185 0
|
索引
在训练模型每次迭代中,打印参数的梯度
要打印出每个迭代中的所有样本梯度,您需要在代码中进行相应的更改。以下是一个示例过程,可以帮助您实现此目标: 1. 在训练循环中,使用 enumerate() 函数迭代数据集中的每个批次,并获取每个批次的索引和数据。
713 0
|
PyTorch 算法框架/工具
已经定义好了一个张量,如何增加代码要求计算梯度?
在 PyTorch 中,可以使用 requires_grad_() 方法来动态设置张量的 requires_grad 属性为 True,从而要求计算梯度。具体来说,对于已经创建的张量 x,可以通过调用 x.requires_grad_() 来将其设置为需要计算梯度的张量。
295 0
torch中对一个行向量使用sigmoid函数转换成概率,如果这个行向量包含的元素有几千上万个,这可能会导致转换成的概率再抽样效果不好,应该怎么解决这个问题
可以尝试使用softmax函数进行转换,它可以处理具有多个值的行向量,并将其转换为概率分布。另外,可以考虑使用截断技术(如Top-K),减少概率中过小的部分,以提高采样效果。
119 0