超参数选择:网格搜索GridSearchCV

2023-11-19

.Grid Search

  • 网格搜索,在所有候选的参数选择中,通过循环遍历,对每一种可能的参数在训练集上训练一个模型,在测试集上表现最好的参数就是最优的参数。
  • 模型最终的表现好坏与初始数据训练集和测试集的划分有很大的关系(测试集数据没有被训练,可能有偏差)。
  • Grid Search 调参方法存在的共性弊端就是:耗时;参数越多,候选值越多,耗费时间越长!所以,一般情况下,先定一个大范围,然后再细化。

.GridSearchCV

scikit-learn库中的GridSearchCV

class sklearn.model_selection.GridSearchCV

穷举搜索指定的参数值的估计。

参数

estimatorestimator object

  • scikit-learn估计器接口。估计器需要提供一个评分函数,或者必须通过评分。

param_griddict or list of dictionaries

  • 以参数名(str)作为键、以尝试的参数设置列表作为值的字典,或这类字典的列表,在这种情况下,研究列表中每个字典所跨越的网格,这允许搜索任何参数设置序列。

scoringstr, callable, list/tuple or dict, default=None

  • 一个单独的 str 或一个callable来评估测试集上的预测。
  • 为了评估多个指标,可以给出一个(唯一的)字符串列表或一个dict,其中名称作为键,可调用项作为值。
  • 注意,在使用自定义得分器时,每个得分器应该返回一个值。返回值列表/数组的度量函数可以包装到多个打分器中,每个打分器返回一个值。
  • 如果为None,则使用估计器自带的评分方法。
    在这里插入图片描述
    在这里插入图片描述

n_jobsint, default=None

  • 要并行运行的作业数量。None表示一个,除非在joblib.parallel_backend环境下。-1表示使用所有处理器。更多细节请参见 Glossary

pre_dispatchint, or str, default=n_jobs

  • 控制并行执行期间分派的作业的数量。当分配的作业多于cpu能够处理的任务时,减少这个数量有助于避免内存消耗激增。该参数可以为:
    • None:在这种情况下,将立即创建并派生所有作业。将此用于轻量级和快速运行的作业,以避免由于随需生成作业而造成的延迟;
    • int:给出生成的作业总数的确切数目;
    • str:给定一个n_jobs的函数,如’ 2*n_jobs ’

iidbool, default=False

  • 如果为True,则返回跨folds的平均得分,以每个测试集的样本数为权重。在这种情况下,假设数据跨folds分布相同,最小的损失是每个样本的总损失,而不是跨folds的平均损失。

自版本0.22以来已弃用:参数iid在0.22中已弃用,将在0.24中删除

cvint, cross-validation generator or an iterable, default=None

  • 确定交叉验证分割策略。cv可能的输入有:
    • None:使用默认的5折交叉验证;
    • integer:指定(分层的)KFold中的折叠数;
    • CV splitter
    • 可迭代生成(训练、测试)分割为索引数组。
  • 对于None或integer,如果估计器是一个分类器,并且y是二分类的或多类的,则使用StratifiedKFold,在所有其他情况下,使用KFold。参考用户指南,了解这里可以使用的各种交叉验证策略。

refitbool, str, or callable, default=True

  • 使用找到的最佳参数在整个数据集上重新构造一个估计器。
  • 对于多指标评估,这需要是一个str,表示用于在最后重新构建评估器的最佳参数的记分员。
  • 在选择最佳估计器时除了考虑最大得分之外,可以将refit设置为一个函数,该函数返回所选的best_index_给定cv_results_。在这种情况下,best_estimator_和best_params_将根据返回的best_index_设置,而best_score_属性将不可用。
  • 修改后的估计器可以在best_estimator_属性处使用,并允许在这个GridSearchCV实例上直接使用predict。
  • 同样,对于多重度量评估,属性best_index_、best_score_和best_params_只有在refit被设置并且它们都将被确定为w.r时才可用。就是这个特定的得分手。

verboseinteger

  • 控制冗长:越高,消息越多。

error_score‘raise’ or numeric, default=np.nan

  • 在估计量拟合中出现错误时分配给分数的值。如果设置为“raise”,则会引发错误。如果给定数值,则会发出FitFailedWarning。此参数不会影响refit步骤,因为它总是会引发错误。

return_train_scorebool, default=False

  • 如果为False,则cv_results_属性将不包含训练分数。计算训练分数是用来了解不同的参数设置如何影响过拟合/不拟合的权衡。然而,计算训练集上的分数可能会有很高的计算成本,并且不需要严格地选择能产生最佳泛化性能的参数。

属性

cv_results_dict of numpy (masked) ndarrays

  • 一种dict,以键作为列标题,以值作为列元素,可以导入到pandas DataFrame中。
    在这里插入图片描述
    在这里插入图片描述

  • 键值“params”用于存储所有候选参数的参数设置列表。

  • mean_fit_time、std_fit_time、mean_score_time和std_score_time的单位都是秒。

    • 对于多度量评估,所有记分者的分数都在cv_results_ dict中以记分者名字结尾的键处可用(’_<scorer_name>’),而不是上面显示的’_score’。(“split0_test_precision”,“mean_train_precision”等等)。

best_estimator_estimator

  • 最优模型。由搜索选择的估计量,即对left out数据给出最高分数(或指定的最小损失)的估计量。如果refit=False,则不可用。

best_score_float

  • best_estimator的交叉验证平均得分。对于多度量评价,这只有在refit被指定时才会出现。
  • 如果refit是一个函数,则此属性不可用。

best_params_dict

  • 给出hand out 数据集上最好的结果的参数。
  • 对于多度量评价,这只有在refit被指定时才会出现。

best_index_int

  • 对应于最佳候选参数设置的(cv_results_数组的)索引。在search.cv_results_[‘params’][search.best_index_]给出最佳模型的参数设置,从而给出最高的平均分数(search.best_score_)。
  • 对于多度量评价,这只有在refit被指定时才会出现。

scorer_function or a dict

  • 记分器函数用于为模型选择最佳的参数。
  • 对于多度量评估,此属性持有已验证的评分dict,该dict将得分者键映射到得分者可调用。

n_splits_:int

  • 交叉验证拆分(折叠/迭代)的次数。

方法

decision_function(self, X)

  • 在最佳参数估计器上调用decision_function。

fit(self, X[, y, groups])

  • 使用所有参数集运行fit。

get_params(self[, deep])

  • 获取这个估计器的参数。

inverse_transform(self, Xt)

  • 对找到最佳参数的估计器调用inverse_transform。

predict(self, X)

  • 使用找到的最佳参数调用预估器。

predict_log_proba(self, X)

  • 使用找到的最佳参数对估计器调用predict_log_proba。

predict_proba(self, X)

  • 使用找到的最佳参数对估计器调用predict_proba。

score(self, X[, y])

  • 返回给定数据上的分数,如果评估器已经被重新配置。

set_params(self, \*\*params)
-设置这个估计器的参数。

transform(self, X)

  • 对具有最佳找到参数的估计器调用变换。

示例1

# 导入库
from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import train_test_split
from sklearn import metrics
# 数据集
iris = datasets.load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data,iris.target, test_size=0.3, random_state=42)
# 训练模型
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svc = svm.SVC()
clf = GridSearchCV(svc, parameters,cv=10, scoring="f1_micro")
clf.fit(X_train, y_train)
# 查看最佳分数、最佳参数
clf.best_score_
clf.best_params_
# 获取最佳模型
best_model=clf.best_estimator_
# 利用最佳模型进行预测
y_predict=best_model.predict(X_test)
metrics.f1_score(y_test, y_predict,average='micro')

示例2(pipline)

代码原文

import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model.logistic import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn.pipeline import Pipeline
from sklearn.metrics import precision_score, recall_score, accuracy_score

pipeline = Pipeline([
    ('vect', TfidfVectorizer(stop_words='english')),
    ('clf', LogisticRegression())
])
parameters = {
    'vect__max_df': (0.25, 0.5, 0.75),
    'vect__stop_words': ('english', None),
    'vect__max_features': (2500, 5000, None),
    'vect__ngram_range': ((1, 1), (1, 2)),
    'vect__use_idf': (True, False),
    'clf__penalty': ('l1', 'l2'),
    'clf__C': (0.01, 0.1, 1, 10),
}


df = pd.read_csv('./sms.csv')
X = df['message']
y = df['label']
label_encoder = LabelEncoder()
y = label_encoder.fit_transform(y)
X_train, X_test, y_train, y_test = train_test_split(X, y)

grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1, verbose=1, scoring='accuracy', cv=3)
grid_search.fit(X_train, y_train)

print('Best score: %0.3f' % grid_search.best_score_)
print('Best parameters set:')
best_parameters = grid_search.best_estimator_.get_params()
for param_name in sorted(parameters.keys()):
    print('\t%s: %r' % (param_name, best_parameters[param_name]))

predictions = grid_search.predict(X_test)
print('Accuracy: %s' % accuracy_score(y_test, predictions))
print('Precision: %s' % precision_score(y_test, predictions))
print('Recall: %s' % recall_score(y_test, predictions))

df = pd.read_csv('./sms.csv')
X_train_raw, X_test_raw, y_train, y_test = train_test_split(df['message'], df['label'], random_state=11)
vectorizer = TfidfVectorizer()
X_train = vectorizer.fit_transform(X_train_raw)
X_test = vectorizer.transform(X_test_raw)
classifier = LogisticRegression()
classifier.fit(X_train, y_train)
scores = cross_val_score(classifier, X_train, y_train, cv=5)
print('Accuracies: %s' % scores)
print('Mean accuracy: %s' % np.mean(scores))
precisions = cross_val_score(classifier, X_train, y_train, cv=5, scoring='precision')
print('Precision: %s' % np.mean(precisions))
recalls = cross_val_score(classifier, X_train, y_train, cv=5, scoring='recall')
print('Recall: %s' % np.mean(recalls))
f1s = cross_val_score(classifier, X_train, y_train, cv=5, scoring='f1')
print('F1 score: %s' % np.mean(f1s))

Python机器学习笔记:Grid SearchCV(网格搜索)
调参必备—GridSearch网格搜索
GridSearchCV官方文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

超参数选择:网格搜索GridSearchCV 的相关文章

随机推荐

  • Shell变量的设置规则

    1 变量设置规则 变量与变量内容以一个等号 myname LSX 等号两边不能直接接空格 myname LSX 或 myname L SX 都是错误 变量名称只能是英文字母与数字 但是开头字符不能是数字 2myname LSX 错误 2 双
  • 华为od机考真题-数据分类

    while 1 try c b nums list map int input split dp
  • C++11 新特性:模板别名

    C 11 新特性 模板别名 豆子 2012年5月22日 C 没有评论 参考文章 https blogs oracle com pcarlini entry template aliases 2002 年 ISO C 标准化组织就已经提出了模
  • Jmeter Springboot Redisson分布式锁并发订单操作(下单、取消单、完成单、加库存)

    Jmeter Springboot Redisson分布式锁并发订单操作 下单 取消单 完成单 加库存 涉及知识点 java springboot mybatis开发 redis分布式锁 Redisson客户端 Jmeter各种骚操作 用户
  • 多元线性回归&梯度下降法——多元线性回归

    多特征 当Y值的影响因素不是唯一时 采用多元线性回归模型 例子 梯度下降法 多元线性回归 import numpy as np from numpy import genfromtxt import matplotlib pyplot as
  • 时序预测

    时序预测 MATLAB实现DNN深度神经网络时间序列预测未来 多指标 多图输出 目录 时序预测 MATLAB实现DNN深度神经网络时间序列预测未来 多指标 多图输出 预测效果 基本介绍 模型结构 程序设计 学习总结 预测效果 lt
  • CentOS7.3下载,CentOS7.3 iso下载

    原网站 http man linuxde net download CentOS 7 3 当前位置 首页 CentOS CentOS7 3下载 CentOS7 3 iso下载 CentOS 7 3 是CentOS 7系列的第四个发行版本 官
  • linux设置pg库开机自启

    要在Linux系统上设置PostgreSQL数据库开机自启 可以按照以下步骤操作 打开终端并使用root权限登录系统 编辑 etc rc local 文件 sudo vi etc rc local 在文件的最后一行添加以下内容 su pos
  • Ubuntu 安装 Tensorflow-gpu 与 Keras

    为深度学习所用 博主预想在Ubuntu16 04上安装 显卡驱动 CUDA cuDNN Tensorflow gpu Keras PyCharm 参考了众多资料 最终成功将所有软件安装完毕 且能成功运行使用 该篇博客介绍了Tensorflo
  • matlab求二元函数极值算法_高等数学下册(部分)复习——知识点:多元函数微分方法及其应用...

    空间解析几何与向量代数的部分就不说了 比较简单 以几道例题练一练就差不多了 首先从第九章 多元函数微分方法及其应用说起 01 多元微分 理论 要学习多元 我们首先要从一元开始 一元的学会了 就能够类比得到多元的结论 在理论部分 首先要介绍一
  • WIN10系统MYSQL的下载与安装详细教程

    前两天ubuntu下安装mysql遇到了一些依赖问题 结果解决了半天 没解决好 还把我的系统搞坏了 小白破坏力好强 到现在我的ubuntu也没装好 电脑驱动的问题 联想小新310一装ubuntu 进去就卡 原来禁用原先的显卡驱动 可是 第二
  • win10 Enable developer Mode

    经过漫长的安装过程 win10终于装上了vs2015 rc 写个小程序试试 结果提示 根据提示打开 设置 更新 for developer 据说应该有这么个界面 但是这个界面根本出不来 直接闪退的说 翻 MSDN 终于翻出了解决方法 htt
  • ChatGPT启示录: 智能、推理的本质是什么?神经网络既是推理机,也是知识规则库?

    多种因素让人类对自身的智力产生了一种自信 毕竟这个世界上其他生物没有我们大脑发达 智力似乎是上天给人类的独有礼物 作为孩子的父母 老师说孩子不努力似乎是可以接受的 但是说自己娃娃笨是极其羞辱的 类似的 让很多人不能接受的是 机器人可以算得比
  • 学习笔记(三):Java中的List集合——ArrayList、LinkedList、Vector、Stack、CopyOnWriteArrayList

    目录 引言 一 List简介 二 常用List实现类 一 ArrayList 二 LinkedList 三 LinkedList和ArrayList的比较 三 其他List实现类 一 Vector 二 Stack 三 CopyOnWrite
  • Java安装、Java环境配置,以及我的第一个Java程序(win11)

    Java环境配置 下载OpenJDK Windows11 1 进入Oracle Java Downloads 2 下载 ZIP文件 3 解压到适合的位置 注意 路径最好是英文字母 配置环境变量 1 Win I打开系统设置 2 下拉到最底下选
  • vuejs 制作摄像头_VueJs的网络摄像头组件

    vuejs 制作摄像头 网络摄像头 vue web cam Webcam component for VueJs VueJs的网络摄像头组件 安装 Installation npm install vue web cam save yarn
  • 【Python】python logging模块打印log到指定文件

    可能我们经常会使用print来输出信息到窗口 但当我们有很多个py文件需要运行 项目比 较庞大的到时候 print简直就是太low了点了 那么我们可以使用强大的logging模块 把 输出到指定的本地pc某个路径的文件中 一 logging
  • 把字符串转换成整数(字符串)

    题目描述 将一个字符串转换成一个整数 要求不能使用字符串转换整数的库函数 数值为0或者字符串不是一个合法的数值则返回0 输入描述 输入一个字符串 包括数字字母符号 可以为空 输出描述 如果是合法的数值表达则返回该数字 否则返回0 思路一 p
  • 什么是体素(Voxel)

    复制粘贴的知乎 题图中是3D数据的不同表示类型 a 点云 Point clouds b 体素网格 Voxel grids 多边形网格 Polygon meshes d 多视图表示 Multi view representations 其中
  • 超参数选择:网格搜索GridSearchCV

    Grid Search 网格搜索 在所有候选的参数选择中 通过循环遍历 对每一种可能的参数在训练集上训练一个模型 在测试集上表现最好的参数就是最优的参数 模型最终的表现好坏与初始数据训练集和测试集的划分有很大的关系 测试集数据没有被训练 可