如何选择KNN的最合适的K值
使用K折交叉验证评估最合适的K值
交叉验证是一个调参的过程,需要对提前给定的K值逐个去尝试,所以花费时间较长
交叉验证的第一步:把训练数据进一步分成训练集和验证集。
问:为什么不用测试集对模型进行验证和评估,而要拆分训练集呢?
答:测试数据是用来一次性测试的,一般用于项目上线时测试使用,而不能用于指导模型训练
工作流程:
- 将数据集分成K(折)段,并将每段拆分成训练集和验证集
- 遍历所有指定的K(KNN)值对每段进行KNN模型训练
- 将每段评估的准确率进行相加,并除以K(折),得出KNN模型为某K值时的最终准确率
- 最终比较所有K(KNN)值的最终准确率,最高说明是这几个K(KNN)值中最合适的
现在开始使用K折交叉验证来挑选最合适的K值
导入相关库或模块
from sklearn import datasets
from sklearn.model_selection import KFold
from sklearn.neighbors import KNeighborsClassifier
导入iris数据集
iris = datasets.load_iris()
# X 为特征集,y 为标签集
X = iris['data']
y = iris['target']
然后开始写重要部分
# 这里定义6个候选值
fs =[1,3,5,7,9,11]
# 进行4折交叉验证,返回的是训练集和验证集的下标
fk = KFsold(n_splits=4, random_state=2001, shuffle=True)# 先默认当前最好的k值
best_k = fs[0]
# 先默认最好的准确率值
best_score = 0# 遍历所有的候选值
for k in fs:# 记录五段的准确率之和 curr_score = 0# 遍历五段的数据集for train_index,valid_index in fk.split(X):# 实例化KNN模型clf = KNeighborsClassifier(n_neighbors=k)# 训练模型clf.fit(X[train_index], y[train_index])# 计算当前的准确率curr_score = curr_score + clf.score(X[valid_index], y[valid_index])# 计算KNN模型的K值为k时的平均准确率值avg_score = curr_score/4print('平均准确率为:%.2f' % avg_score)# 判断平均准确率值是否大于目前最好的准确率值if avg_score > best_score:# 将平均准确率值替代原先最好的准确率值best_score = avg_score# 将目前的K值替换原先最好的K值best_k = kprint('目前最好的K值为:%d'%best_k,"目前最好的准确率值为:%.2f"%best_score)print("*"*50)
print('评估最合适的K值为:%d'%best_k,"其准确率为:%.2f"%best_score)
结果如下
还有一种更简单的方式:直接使用sklearn来实现
# 使用网格来搜索候选值
from sklearn.model_selection import GridSearchCV
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifieriris = datasets.load_iris()
X = iris['data']
y = iris['target']parameter = {'n_neighbors':[1,3,5,7,9,11]}
knn = KNeighborsClassifier()clf = GridSearchCV(knn,parameter,cv=5)
clf.fit(X,y)print(f'评估最合适的K值为:{(clf.best_params_)["n_neighbors"]}',"其准确率为:%.2f"%clf.best_score_)
效果如下
你学会了吗?
如何选择KNN的最合适的K值相关推荐
- knn算法,最优k值求解
需求测试knn算法精度,并选出精度最高的k值 文件如下:在test.和train文件夹里分别有如下文件,文件名_左侧是每个txt文件里1组成的数字,每个txt文件都是32行.32列共计1024个字符 ...
- 机器学习算法(7)——K近邻(KNN)、K-means、模糊c-均值聚类、DBSCAN与层次与谱聚类算法
1.K-近邻算法(KNN)概述 (有监督算法,分类算法) 最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类.但是怎么可能 ...
- Python机器学习-- KNN学习曲线、K值、交叉验证
文章目录 1.breast_cancer 数据集准确度计算 2.学习曲线 2.1 选择最优K值 2.2 不同K取值对模型的影响 2.3 神器之一:学习曲线 2.3.1 选取最优的K值 2.4交叉验证 ...
- knn算法的最佳k值_KNN(k-NearestNeighbor)算法笔记
本博文主要参考来源: 忆臻:一文搞懂k近邻(k-NN)算法(一)zhuanlan.zhihu.com 一.KNN算法的核心思想: 算法的核心思想是,即是给定一个训练数据集,对新的输入实例,在训练数据 ...
- 【机器学习】KNN算法及K值的选取
KNN算法是有监督学习中的分类算法,它看起来和另一个机器学习算法K-means有点像(K-means是无监督学习算法),但却是有本质区别的. KNN的原理就是:当预测一个新的值x的时候,根据它距离最近 ...
- K-means聚类K值的选择、Calinski-Harabasz准则
K-means聚类K值的选择.Calinski-Harabasz准则 目录 K-means聚类K值的选择.Calinski-Harabasz准则 K-means聚类K值的选择 Calinski-Har ...
- KNN(K Nearest Neighbors)分类是什么学习方法?如何或者最佳的K值?RadiusneighborsClassifer分类器又是什么?KNN进行分类详解及实践
KNN(K Nearest Neighbors)分类是什么学习方法?如何或者最佳的K值?RadiusneighborsClassifer分类器又是什么?KNN进行分类详解及实践 如何使用GridSea ...
- 【机器学习】交叉验证筛选参数K值和weight
交叉验证 导包 import numpy as npfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn import data ...
- 机器学习里如何确定K-Means算法的K值?
[问题] Kmeans算法中,K值所决定的是在该聚类算法中,所要分配聚类的簇的多少.Kmeans算法对初始值是比较敏感的,对于同样的k值,选取的点不同,会影响算法的聚类效果和迭代的次数. [解决方案] ...
最新文章
- docker 鱼龙混杂之基础操作篇
- HTC与酷派 不是冤家不聚头
- 成功解决采用ax.bar进行三维绘图绘制柱状图的时候,横坐标只显示三列而不是数据中的四列
- 《江南百景图》游戏设计小思考:留边占角“小烦恼”
- 新开两场构建服务治理框架的直播分享
- 2017年最流行的15个数据科学Python库
- C++11系列学习之二-----lambda表达式
- Error:fatal: Not a git repository (or any of the parent directories): .git
- 论文浅尝 | 基于知识库的自然语言理解 01#
- python中排序从小到大_Python实现对特定列表进行从小到大排序操作示例
- Elsevier LaTeX 模板中参考文献没有序号,且文章引用不是序号引用
- magisk安装失败_俄罗斯官改MIUI MiRoom安装刷入教程
- 大鱼吃小鱼小游戏完整版
- java正则在线转换_java正则表达式(转)
- android studio 读取网络图片
- solidworks的openGL选项是灰色的处理方法
- Echart柱状图中数据显示在图上方
- LeetCode题库:并查集问题(Python语言实现)
- private(学习心得)
- 面试问到你对加班有什么看法,该怎么回答
热门文章
- DM365的UBL源码分析
- tf.Variable()函数
- 全球最牛白帽黑客汇聚全民黑客盛会GeekPwn2017
- DASCTFBJDCTF 3rd 部分writeup
- python colors后面_Python colors.BASE_COLORS属性代码示例
- 微信抢红包C语言版-线段切割法
- Moco接口框架的应用实战
- SQL Server数据库第十二课:事务处理
- 计算机运行内存和内存条吗,运行内存和内存有什么区别?运行内存大手机性能一定好吗?...
- python 将html文件转化为txt文件