当前位置: 首页 > news >正文

(分类)KNN算法- 参数调优

在此专栏的上一篇文章的基础上,进行交叉实验获取最佳的K值
上一篇文章:KNN算法案例-鸢尾花分类
数据拆分的过程:
数据拆分的过程

交叉验证(Cross Validation) 是一种在机器学习中广泛使用的模型评估参数调优方法。在训练模型时,我们通常将数据集测试集,其中训练集用于训练模型,测试集用于评估模型的性能,但是这种方法可能会受到数据集划分方式的影响,导致苹果结果的不稳定交叉实验通过对数据集进行多次划分和评估,可以更可靠的评估模型的性能。

交叉验证的常见方法是k折交叉验证(k-Fold Cross Validation)
步骤如下:
1、将数据集随机分成k个互不重叠的自己每个子集称为一个‘折’。
2、对于每个折,执行以下操作:
a.将当前折作为验证集,其余的折作为训练集
b.使用训练集训练模型
c.使用验证集评估模型性能(如计算分类准确率,均方误差等指标)
3.计算K次迭代中模型性能指标的平均值作为模型最终的苹果结果。

交叉验证的优点如下:

1.降低模型评估结果的方差:通过多次评估模型,交叉验证可以提供更稳定、更可靠的性能评估。
2.更充分的利用数据:交叉验证可以确保每个样本都被用于训练和验证,使得模型学习和评估更为全面

在算法调优中,交叉验证可以帮助我们找到最佳的超参数(如KNN中的K值)。我们可以尝试不同的的超参数组合。这种方法可以有效地防止过拟合,提高模型在新数据上的泛化性能。
前期导入包和加载数据以及切分数据

import numpy as np
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
X, y = datasets.load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2,random_state=42)

对超参数进行交叉验证筛选

scores = []
params_k = np.arange(1, 31)
for k in params_k:knn = KNeighborsClassifier(n_neighbors=k)score = cross_val_score(knn,  # 选择模型X_train,  # 数据y_train,   # 目标值cv=2,   # 将数据切分为多少份scoring='accuracy' # 验证方式).mean()scores.append(score)
print(scores)

验证方式的具体如下:
验证方式对应表
选择最佳的超参数

# 使用numpy argmax() 找出最佳的超参数 
k_best = np.argmax(scores) + 1
print("得分最高的超参数K值为:", k_best)

使用最佳的超参数进行模型的训练

estimator = KNeighborsClassifier(n_neighbors=k_best)
estimator.fit(X_train, y_train)
y_ = estimator.predict(X_test)
print('真实的',y_test)
print('预测值',y_)

对模型进行评分

estimator.score(X_test,y_test)

坚持学习,整理复盘

相关文章:

  • TimeGPT:时间序列预测模型实例
  • 「Swift」取消UITableView起始位置在状态栏下方开始
  • 10、外观模式(Facade Pattern,不常用)
  • Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
  • 网站提示不安全?
  • vue.js el-table 动态单元格列合并
  • 【改进YOLOv8】融合高效网络架构 CloAtt的焊缝识别系统
  • Linux下Redis安装及配置
  • 好用免费的AI换脸5个工具
  • form表单的数据校验可以自定义规则,定义验证器(validator)
  • 【USRP】5G / 6G 原型系统 5g / 6G prototype system
  • Large Language Models areVisual Reasoning Coordinators
  • CSS新手入门笔记整理:CSS列表样式
  • 如何判断数据库慢 SQL 查询?
  • Windows+WSL开发环境下微服务注册(Consul)指定IP
  • iOS编译提示和导航提示
  • PAT A1017 优先队列
  • Redux系列x:源码分析
  • spring + angular 实现导出excel
  • SpriteKit 技巧之添加背景图片
  • Vue2 SSR 的优化之旅
  • 那些年我们用过的显示性能指标
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 一天一个设计模式之JS实现——适配器模式
  • 找一份好的前端工作,起点很重要
  • 最近的计划
  • 交换综合实验一
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ###STL(标准模板库)
  • $(function(){})与(function($){....})(jQuery)的区别
  • $jQuery 重写Alert样式方法
  • (+4)2.2UML建模图
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (C)一些题4
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (ZT)一个美国文科博士的YardLife
  • (笔试题)合法字符串
  • (二)linux使用docker容器运行mysql
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (剑指Offer)面试题34:丑数
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (利用IDEA+Maven)定制属于自己的jar包
  • (四)linux文件内容查看
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)大型网站的系统架构
  • (转)拼包函数及网络封包的异常处理(含代码)
  • ***检测工具之RKHunter AIDE
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .axf 转化 .bin文件 的方法
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET CLR基本术语
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .Net(C#)常用转换byte转uint32、byte转float等