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

本文涉及的产品
性能测试 PTS,5000VUM额度
应用实时监控服务-应用监控,每月50GB免费额度
可观测监控 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”的主要工作。该论文提出一种对文字实例敏感的自下而上的文字检测方法,解决了自然场景中密集文本和不规则文本的检测问题。
1954 0
论文推荐|[PR 2019]SegLink++:基于实例感知与组件组合的任意形状密集场景文本检测方法
|
1月前
|
前端开发 JavaScript UED
权重计算在实际开发中的应用
【10月更文挑战第28天】CSS权重计算在实际开发中的应用非常广泛,它贯穿于页面布局、组件开发、响应式设计以及JavaScript与CSS的交互等各个方面。合理地运用权重计算规则,能够更好地控制样式的应用和优先级,提高页面的可维护性和用户体验。
|
2月前
|
编解码 算法 数据可视化
lintsampler:高效从任意概率分布生成随机样本的新方法
在实际应用中,从复杂概率密度函数(PDF)中抽取随机样本的需求非常普遍,涉及统计估计、蒙特卡洛模拟和物理仿真等领域。`lintsampler` 是一个纯 Python 库,旨在高效地从任意概率分布中生成随机样本。它通过线性插值采样算法,简化了复杂分布的采样过程,提供了比传统方法如 MCMC 和拒绝采样更简便和高效的解决方案。`lintsampler` 的设计目标是让用户能够轻松生成高质量的样本,而无需复杂的参数调整。
37 1
lintsampler:高效从任意概率分布生成随机样本的新方法
|
5月前
修改预测函数
【7月更文挑战第22天】修改预测函数。
49 6
|
存储 算法 PyTorch
pytorch 给定概率分布的张量,如何利用这个概率进行重复\不重复采样?
在 PyTorch 中,可以使用 torch.distributions.Categorical 来基于给定的概率分布进行采样。
977 0
|
机器学习/深度学习 数据采集 算法
快速找到离群值的三种方法
本文将介绍3个在数据集中查找离群值的Python方法
422 0
快速找到离群值的三种方法
|
传感器 编解码 计算机视觉
使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)
使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)
152 0
使用星凸随机超曲面模型对扩展对象和分组目标进行形状跟踪(Matlab代码实现)
|
存储 芯片 异构计算
METSO IOP304 从lut中检索值来评估(lut)和函数
METSO IOP304 从lut中检索值来评估(lut)和函数
117 0
METSO  IOP304 从lut中检索值来评估(lut)和函数
|
机器学习/深度学习 算法
六、超参数调整, 批量正则化 和多元分类器
六、超参数调整, 批量正则化 和多元分类器
六、超参数调整, 批量正则化 和多元分类器
torch 如何在迭代训练中,只计算参数梯度,不更新参数。并且将参数的梯度保存到列表,这个列表的值不随着梯度清零而跟着变为零
在使用 torch.autograd.backward() 计算梯度后,可以通过设置参数的 requires_grad 属性为 False 来阻止参数更新。同时,通过将计算出的梯度值放入一个列表中来保存,这个列表的值不会随着梯度清零而清零
739 0