GridSearchCV网格搜索得到最佳超参数, 在K近邻算法中的应用
最近在学习机器学习中的K近邻算法, KNeighborsClassifier 看似简单实则里面有很多的参数配置, 这些参数直接影响到预测的准确率. 很自然的问题就是如何找到最优参数配置? 这就需要用到GridSearchCV 网格搜索模型.
在没有学习到GridSearchCV 网格搜索模型之前, 寻找最优参数配置是通过人为改变参数, 来观察预测结果准确率的. 具体步骤如下:
- 修改参数配置
- fit 训练集
- 预测测试集
- 预测结果与真实结果对比
- 重复上述步骤
GridSearchCV 网格搜索模型寻找最优参数的步骤如下:
- 将各种参数配置封装为列表
- 实例化分类器
- 使用GridSearchCV 为分类器和参数建模
- 实例化模型, 并用新的模型对象fit训练集
- 得到最好的参数配置
- 用最优参数去预测数据
于是我的疑问就来了, GridSearchCV 并没有去预测测试集,进而得到预测结果,并在与真实结果的对比中找到最优的参数配置, 没有这个步骤,它是怎么得到最优参数的? 搜索了很多,终于在这个网页中得到了想要的信息: python – GridSearchCV是否执行交叉验证? http://www.cocoachina.com/articles/67515
简单说就是我们把训练集传递给GridSearchCV, 它会进一步将训练集分为训练集和测试集, 然后通过不断调整超参数, 进行交叉验证, 最后获得最优参数.
GridSearchCV会主动将数据分为训练集和测试集,这就是原因所在了.
代码实现:
1 from sklearn import datasets
2 from sklearn.model_selection import train_test_split
3 from sklearn.neighbors import KNeighborsClassifier
4 from sklearn.metrics import accuracy_score
5 from sklearn.model_selection import GridSearchCV
6
7
8 # 1/获取数据
9 digits = datasets.load_digits()
10 X = digits.data
11 y = digits.target
12
13 # 2/分割数据,得到训练集和测试集
14 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
15
16
17 # 3/超参数配置
18 param_grid = [
19 {
20 "weights":["uniform"],
21 "n_neighbors":[i for i in range(1,11)]
22 },
23 {
24 "weights":["distance"],
25 "n_neighbors":[i for i in range(1,11)],
26 "p":[i for i in range(1,6)]
27 }
28 ]
29
30
31 # 4/为分类器和超参数搭建模型
32 knn_clf = KNeighborsClassifier()
33 grid_search = GridSearchCV(knn_clf, param_grid, n_jobs=-1, verbose=2)
34
35 # 5/实例化模型(多种参数配置的分类器)fit训练集,
36 # 本质上是将训练集进一步分为训练集和测试集,得到最好的参数配置
37 # 因为要不断尝试各种参数交叉验证,所以非常耗时
38 grid_search.fit(X_train, y_train)
39
40 # 6/
41 # 最终拿到最佳参数配置分类器 best_estimator_
42 knn_clf = grid_search.best_estimator_
43
44 # 7/使用最佳分类器对测试集预测
45 y_predict = knn_clf.predict(X_test)
46
47 # 8/得到准确率
48 accuracy_score(y_test, y_predict))
GridSearchCV网格搜索得到最佳超参数, 在K近邻算法中的应用的更多相关文章
- 【笔记】KNN之网格搜索与k近邻算法中更多超参数
网格搜索与k近邻算法中更多超参数 网格搜索与k近邻算法中更多超参数 网络搜索 前笔记中使用的for循环进行的网格搜索的方式,我们可以发现不同的超参数之间是存在一种依赖关系的,像是p这个超参数,只有在 ...
- 机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明
GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数.但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果.这个时候就是需要动脑筋了.数据量比较大 ...
- 机器学习算法中的网格搜索GridSearch实现(以k-近邻算法参数寻最优为例)
机器学习算法参数的网格搜索实现: //2019.08.031.scikitlearn库中调用网格搜索的方法为:Grid search,它的搜索方式比较统一简单,其对于算法批判的标准比较复杂,是一种复合 ...
- [DeeplearningAI笔记]02_3.1-3.2超参数搜索技巧与对数标尺
Hyperparameter search 超参数搜索 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.1 调试处理 需要调节的参数 级别一:\(\alpha\)学习率是最重要的需要调节的 ...
- Python之网格搜索与检查验证-5.2
一.网格搜索,在我们不确定超参数的时候,需要通过不断验证超参数,来确定最优的参数值.这个过程就是在不断,搜索最优的参数值,这个过程也就称为网格搜索. 二.检查验证,将准备好的训练数据进行平均拆分,分为 ...
- CNN超参数优化和可视化技巧详解
https://zhuanlan.zhihu.com/p/27905191 在深度学习中,有许多不同的深度网络结构,包括卷积神经网络(CNN或convnet).长短期记忆网络(LSTM)和生成对抗网络 ...
- 【笔记】KNN之超参数
超参数 超参数 很多时候,对于算法来说,关于这个传入的参数,传什么样的值是最好的? 这就涉及到了机器学习领域的超参数 超参数简单来说就是在我们运行机器学习之前用来指定的那个参数,就是在算法运行前需要决 ...
- 机器学习-kNN-寻找最好的超参数
一 .超参数和模型参数 超参数:在算法运行前需要决定的参数 模型参数:算法运行过程中学习的参数 - kNN算法没有模型参数- kNN算法中的k是典型的超参数 寻找好的超参数 领域知识 经验数值 实验搜 ...
- Python机器学习笔记 Grid SearchCV(网格搜索)
在机器学习模型中,需要人工选择的参数称为超参数.比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定.超参数选择不恰当,就会出现欠拟合或者 ...
随机推荐
- Scala中使用fastJson 解析json字符串
Scala中使用fastJson 解析json字符串 添加依赖 2.解析json字符 2.1可以通过JSON中的parseObject方法,把json字符转转换为一个JSONObject对象 2.2然 ...
- 【疑】接入交换机lacp port-channel连接核心突然中断
现状: 职场网络架构为接入交换机2个端口通过lacp协议的active模式组成port-channel上联到核心. 具体配置如下 接入: 核心: 故障现象: zabbix监控到核心交换机对应该接入交换 ...
- Effective Java读书笔记--对所有对象都通用的方法
1.覆盖equals请遵守通用规定.不需要覆写equals的场景:a.类的每个实例都是唯一的.b.类不需要提供"逻辑相等"的测试功能.c.超类已经覆盖了equals的方法.d.类是 ...
- linux(10)linux vi/vim
前言 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是vim编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的 ...
- 如何安装Python 3.9.1?
首先打开浏览器输入网址:https://www.python.org或者通过百度搜索python进入Python官网. 选择Downloads,弹出最新版本下载链接,当前版本为3.9.1,如图所示: ...
- 【noi 2.7_7219】复杂的整数划分问题(算法效率)
题意:若干组数据,分别问 N划分成K个正整数之和的划分数目.N划分成若干个不同正整数之和的划分数目.N划分成若干个奇正整数之和的划分数目. 解法:请见我之前的一篇博文内的Article 2--[noi ...
- Codeforces Round #479 (Div. 3) E. Cyclic Components (思维,DFS)
题意:给你\(n\)个顶点和\(m\)条边,问它们有多少个单环(无杂环),例如图中第二个就是一个杂环. 题解:不难发现,如果某几个点能够构成单环,那么每个点一定只能连两条边.所以我们先构建邻接表,然后 ...
- enumerate() -- Python
#!usr/bin/env python #coding:utf-8 ''' enumerate()说明: 1.enumerate()是Python的内置函数: 2.enumerate字面上是枚举.列 ...
- TCP Wrappers原理及简单实验
1.TCP Wrappers(简易防火墙)简介TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接(TCP)的特定服务进行安全检测并实现访问控制,界定方式是凡是调用libwr ...
- codeforces 858A
A. k-rounding time limit per test 1 second memory limit per test 256 megabytes input standard input ...