KNN算法 搜索最优超参数:n_neighbors/weights/p

news2024/11/24 16:10:40

目录

一:遍历参数 超参调优测试

二:网格模型 超参调优测试

三:模型保存

四:模型使用 


一:遍历参数 超参调优测试

1.1 超参调试,找到模型最优解[仅做测试,得出最优:n_neighbors, weights, p,即可删除此测试代码]

# 超参调试 -- 找出对这个模型最优秀的解:k weight p
best_k = -1  # 区间 数据集长度开平方
best_w = 0  # list['uniform','distance']
best_p = -1  # 表示求和的次方数  8
Weight = ['uniform', 'distance']
best_score = 0  # 模型最高评分
for k in range(1, 13):  # 1-12
    for p in range(1, 7):  # 1-6
        for w in Weight:  # 2
            knn_model = KNeighborsClassifier(n_neighbors=k, p=p, weights=w)
            knn_model.fit(X_train, y_train)
            score = knn_model.score(X_test, y_test)
            if score > best_score:
                best_score = score
                best_k = k
                best_w = w
                best_p = p
print("best_score", best_score, "best_k", best_k, "best_w", best_w, "best_p", best_p)

输出结果如下 

best_score 1.0 best_k 5 best_w uniform best_p 4

1.2 KNeighborsClassifier,参数最优:n_neighbors=5, weights='uniform', p=4

如下代入

# 创建算法
knn_model = KNeighborsClassifier(n_neighbors=5, weights='uniform', p=4)

由最优参数,输出的模型预测结果,也是最优结果,如下

1.0
[ True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True]

1.3 完整源码分享,鸢尾花模型预测

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 加载数据  鸢尾花load_iris
iris_datasets = load_iris()
# 特征数据
iris_data = iris_datasets['data']
# 标签数据
iris_target = iris_datasets['target']
# 数据集划分
X_train, X_test, y_train, y_test = train_test_split(iris_data, iris_target, test_size=0.3, random_state=6)
# 选择算法 -- 有监督的分类问题
# KNN K近邻算法(近朱者赤近墨者黑)
# 创建算法
knn_model = KNeighborsClassifier(n_neighbors=5, weights='uniform', p=4)
# 构建基于训练集的模型
knn_model.fit(X_train, y_train)
# 模型评分
score = knn_model.score(X_test, y_test)
print(score)
# 模型预测
predict_y = knn_model.predict(X_test)
print(predict_y == y_test)
1.0
[ True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True  True  True  True
  True  True  True  True  True  True  True  True  True]

二:网格模型 超参调优测试

模型调优-交叉验证

将数据训练数据分为多个数据模块,然后循环地从这些数据块中取出训练集和测试集,来进行模型测试/验证

网格模型,超参调优测试

from sklearn.model_selection import train_test_split, GridSearchCV
# 网格模型 参数测试--求最优解 k weight p
knn_model = KNeighborsClassifier()
param_list = [
    {
        "n_neighbors": list(range(1, 13)),
        "p": [i for i in range(1, 9)],
        "weights": ['uniform', 'distance']
    }
]
# 网格化 超参调试
grid = GridSearchCV(knn_model, param_list, cv=4)
grid.fit(X_train, y_train)
print(grid.best_score_)
print(grid.best_params_)
print(grid.best_estimator_)

输出结果如下,

参数最优:n_neighbors=12, weights='uniform', p=2

注:KNeighborsClassifier输出结果中 参数少了p,为默认p值2,因此没有输出

0.9807692307692308
{'n_neighbors': 12, 'p': 2, 'weights': 'distance'}
KNeighborsClassifier(n_neighbors=12, weights='distance')

三:模型保存

import joblib
# 模型保存
joblib.dump(value=best_model, filename="knnModelIris.model")

四:模型使用 

再新建一个.py编写程序,使用模型

import numpy as np
from sklearn.datasets import load_iris
# 使用已经保存好的模型来进行预测
import joblib

# 1 加载模型
model = joblib.load("knnModelIris.model")
# 2 测试集准备
feature = np.array([
    [4.6, 3.1, 1.5, 0.2],  # 0
    [5.1, 3.6, 1.4, 0.3],  # 0
    [6., 2.9, 5.5, 1.5],  # 2
    [6.6, 3.1, 4.4, 1.4],  # 1
    [6.7, 2.8, 4.5, 1.4]  # 1
])
y_predict = model.predict(feature)
print(y_predict)

0、1、2分别表示鸢尾花的3个不同类别,通过测试集准备、模型使用能正确预测出鸢尾花类型 输出结果如下

[0 0 2 1 1]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/99481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PowerDesigner导入SQL脚本生成带中文注释(comment)的ER图并保存为图片格式(含通用可执行vb脚本文件)

目录 1、安装数据库建模工具PowerDesigner 16.5 2、打开 PowerDesigner,选择反向工程 3、选择数据库类型 4、导入SQL脚本文件并生成数据库表模型 5、去掉Diagram画板黑色网格线(选做) 6、ER图常规显示(包含是否为Null及表名…

D. Same Count One(模拟 + 思维转换(行不行,从列入手))

Problem - D - Codeforces ChthollyNotaSeniorious收到了AquaMoon的一份特殊礼物:n个长度为m的二进制数组。AquaMoon告诉他,在一次操作中,他可以选择任何两个数组和1到m中的任何位置,并交换这些数组中位置的元素。 他对这个游戏很…

RabbitMQ知识总结一

更多知识在我的语雀平台: https://www.yuque.com/ambition-bcpii/muziteng RabbitMQ 1. RabbitMQ引言 1.1 什么是MQ MQ(Message Queue)消息队列,是基础数据结构中“先进先出”的一种数据结构。一般用来解决应用解耦&#xff0…

带token的登陆页面爆破方法(burp宏+爬虫脚本分享)

文章目录前言一、token参数分析二、burp设置宏操作三、爬虫脚本四、小结前言 在工作中,会遇到很多登陆页面有token保护,如果用Burpsuite直接抓取数据包并使用爆破模块,则会因token过期导致无法爆破。此时至少可以采用三种办法: 第…

Java诊断工具——arthas,实时监控,了解一下

文章目录1、arthas 简介官方文档2、arthas 的使用场景3、安装&启动3.1 安装3.2 启动4、常用命令5、使用示例5.1 stack5.2 jad5.3 sc5.4 watch5.5 trace5.6 jobs5.7 logger5.8 dashboard5.9 redefine6、其它1、arthas 简介 arthas是由阿里巴巴中间件团队开源的Java诊断工具。…

kubernetes对外服务之Ingress

目录 ​​​​​​​一、Ingress 是什么 1.1Service的作用 1.2Ingress简介 二、Ingress 安装 三、Ingress 代理访问 3.1Ingress HTTP 代理访问 3.2 Ingress: HTTPS 代理访问 3.3Ingress Contronler怎么工作的? ​​​​​​​​​​​​​​一、Ingress 是什…

Java核心实操:内存溢出 实战、内存泄漏实战

文章很长,而且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新 史上最全 面试必备 2000页 面试必备 大厂必备 涨薪必备 免费赠送 经典…

ARM系列之MMU TLB和ASID基础概念介绍。

目录1、为什么要设计TLB?TLB中不包含我们需要的映射关系怎么办?2、TLB中都包含了啥?3、那什么是ASIDAddress Space ID(ASID)4、小结内存寻址简要过程如下:VA以页表大小取余,得到PA的低位&#x…

Go sync.Pool池化的学习

一句话总结:保存和复用临时对象,减少内存分配,降低 GC 压力。 一.前言 Go 语言标准库也大量使用了 sync.Pool,例如 fmt 和 encoding/json。 1.1 要解决的问题 一个新技术亦或是一个新名词,总是为了解决一些问题才出…

数据挖掘课程设计报告总结

一、实验题目 实验一 Apriori算法设计与应用 二、背景介绍 Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和向下封闭检测两个阶段来挖掘频繁项集。 三、实验内容 1.3.1 运用的理论知识 关联规则挖掘是数据挖掘中最活跃的研究方法之…

数控恒流源电路简单讲解

(1)最近课设是做一个可步进的恒流源,所以查查找了很多资料之后。说一下自己对于恒流源电路的简单理解。 (2)我只是会将怎么使用和调整数据进行讲解,至于为什么这样只会讲我懂的部分。本人知道的也不是很多&…

【RPA前置知识】 整理并总结ForEach Activity类

🐋作者简介:博主是一位.Net开发者,同时也是RPA和低代码平台的践行者。 🐬个人主页:会敲键盘的肘子 🐰系列专栏:.Net实用方法总结 🦀专栏简介:本专栏介绍如何编写 Windows…

Biopython教程

Biopython教程 参考: https://biopython-cn.readthedocs.io/zh_CN/latest/index.html 蛋白质文件获取 Entrez方法 from Bio import Entrez Entrez.email邮箱名 #如123456789qq.com handleEntrez.esearch(dbprotein,term2rbg) recordEntrez.read(handle) idrecor…

C++PrimerPlus 第八章 函数探幽-8.2 引用变量

目录 8.2 引用变量 8.2.1 创建引用变量 8.2.2 将引用用作函数参数 8.2.3 引用的属性和特别之处 8.2.3.1 临时变量、引用参数和const 8.2.4 将引用用于结构 8.2.4.1 程序说明 8.2.4.2 为何要返回引用 8.2.4.3 返回引用时需要注意的问题 8.2.4.4 为何将const用于引用返…

纳米柱阵列超颖表面构建模块的严格分析

摘要 利用先进的制造技术,人们成功实现了具有高数值孔径的可见波长的超透镜。通常使用空间变化的纳米结构作为模块来构建超透镜。在这个例子中分析了用于组成偏振不敏感超透镜的纳米柱状结构。利用傅立叶模态方法(FMM,也称为RCWA)…

Windows配置开机自启jar包,不显示黑窗口,并输出日志

背景 如果是在 Linux 下开机自启一个服务相对比较简单,这次遇到一个需求是关于 Windows 开机自启的: 在 Windows 环境下开机自动运行一个 SpringBoot 服务;而且由于是一个后台服务,要求对终端用户无感知;为后期维护方…

AC自动机的实现思想与原理

1. 基本介绍 本文最先发布于博客园,原地址:AC自动机的实现与思想原理 - yelanyanyu - 博客园 (cnblogs.com) 1.1案例引入 有一个字典有若干的敏感词 String[] str;,有一个大文章 string,我们要找到大文章中出现的所有的敏感词&…

物联网ARM开发- 6协议 FSMC模拟8080时序驱动LCD(上)

目录 一、常见显示器介绍 1、显示器分类 2、显示器的基本参数 二、TFT-LCD控制原理 1、TFT-LCD结构 2、TFT-LCD控制框图 3、控制原理 LCD数据传输时序 LCD数据传输时序参数 三、SSD1963液晶控制器 1、SSD1963液晶控制器 2、SSD1963内部框图分析 3、8080写时序…

RK3568平台开发系列讲解(音视频篇)FFmpeg公共基础参数

🚀返回专栏总目录 文章目录 一、公共操作部分二、每个文件主要操作部分三、视频操作部分四、音频操作部分沉淀、分享、成长,让自己和他人都能有所收获!😄 📢当我们使用 FFmpeg 时,有一些贯穿 FFmpeg 各个组件的核心参数,在我们查看帮助信息时就可以看到,help 不带参…

基于 Tensorflow 2.x 实现多层卷积神经网络,实践 Fashion MNIST 服装图像识别

一、 Fashion MNIST 服装数据集 Fashion MNIST 数据集,该数据集包含 10 个类别的 70000 个灰度图像。大小统一是 28x28的长宽,其中 60000 张作为训练数据,10000张作为测试数据,该数据集已被封装在了 tf.keras.datasets 工具包下&…