当前位置: 首页 > 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
  • 【css3】浏览器内核及其兼容性
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ComponentOne 2017 V2版本正式发布
  • Computed property XXX was assigned to but it has no setter
  • cookie和session
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Java 内存分配及垃圾回收机制初探
  • Java多线程(4):使用线程池执行定时任务
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL数据库运维之数据恢复
  • PHP的Ev教程三(Periodic watcher)
  • Spring核心 Bean的高级装配
  • 对超线程几个不同角度的解释
  • 聊聊redis的数据结构的应用
  • 面试总结JavaScript篇
  • 赢得Docker挑战最佳实践
  • #define,static,const,三种常量的区别
  • #mysql 8.0 踩坑日记
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $.ajax()参数及用法
  • (12)Linux 常见的三种进程状态
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (十六)一篇文章学会Java的常用API
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (一)Dubbo快速入门、介绍、使用
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)关于多人操作数据的处理策略
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .chm格式文件如何阅读
  • .md即markdown文件的基本常用编写语法
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net framework4与其client profile版本的区别
  • .netcore如何运行环境安装到Linux服务器
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思