【机器学习】分类算法 - KNN算法(K-近邻算法)KNeighborsClassifier

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:零基础快速入门人工智能《机器学习入门到精通》

K-近邻算法

  • 1、什么是K-近邻算法?
  • 2、K-近邻算法API
  • 3、K-近邻算法实际应用
    • 3.1、获取数据集
    • 3.2、划分数据集
    • 3.3、特征标准化
    • 3.4、KNN处理并评估

1、什么是K-近邻算法?

K-近邻算法的核心思想是根据「邻居」「推断」你的类别。

K-近邻算法的思路其实很简单,比如我在北京市,想知道自己在北京的哪个区。K-近邻算法就会找到和我距离最近的‘邻居’,邻居在朝阳区,就认为我大概率也在朝阳区。

在这里插入图片描述

其中 K 是邻居个数的意思

  • 邻居个数「太少」,容易受到异常值的影响
  • 邻居个数「太多」,容易受到样本不均衡的影响。

2、K-近邻算法API

sklearn.neighbors.KNeighborsClassifier( n_neighbors=5, algorithm=‘auto’ ) 是实现K-近邻算法的API

  • n_neighbors:(可选,int)指定邻居(K)数量,默认值 5
  • algorithm:(可选,{ ‘auto’,‘ball_tree’,‘kd_tree’,‘brute’})计算最近邻居的算法,默认值 ‘auto’。

算法解析

  • brute:蛮力搜索,也就是线性扫描,训练集越大,消耗的时间越多。
  • kd_tree:构造kd树(也就是二叉树)存储数据以便对其进行快速检索,以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高
  • ball_tree:用来解决kd树高维失效的问题,以质心C和半径r分割样本空间,每个节点是一个超球体。
  • auto:自动决定最合适的算法

函数

  • KNeighborsClassifier.fit( x_train, y_train):接收训练集特征 和 训练集目标
  • KNeighborsClassifier.predict(x_test):接收测试集特征,返回数据的类标签。
  • KNeighborsClassifier.score(x_test, y_test):接收测试集特征 和 测试集目标,返回准确率。
  • KNeighborsClassifier.get_params():获取接收的参数(就是 n_neighbors 和 algorithm 这种参数)
  • KNeighborsClassifier.set_params():设置参数
  • KNeighborsClassifier.kneighbors():返回每个相邻点的索引和距离
  • KNeighborsClassifier.kneighbors_graph():返回每个相邻点的权重

3、K-近邻算法实际应用

3.1、获取数据集

这里使用sklearn自带的鸢尾花「数据集」,它是分类最常用的分类试验数据集。

from sklearn import datasets# 1、获取数据集(实例化)
iris = datasets.load_iris()print(iris.data)

输出:

[[5.1 3.5 1.4 0.2][4.9 3.  1.4 0.2][4.7 3.2 1.3 0.2]

从打印的数据集可以看到,鸢尾花数据集有4个「属性」,这里解释一下属性的含义

  • sepal length:萼片长度(厘米)
  • sepal width:萼片宽度(厘米)
  • petal length:花瓣长度(厘米)
  • petal width:花瓣宽度(厘米)

3.2、划分数据集

接下来对鸢尾花的特征值(iris.data)和目标值(iris.target)进行「划分」,测试集为60%,训练集为40%。

from sklearn import datasets
from sklearn import model_selection# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target, random_state=6)
print('训练集特征值:', len(x_train))
print('测试集特征值:',len(x_test))
print('训练集目标值:',len(y_train))
print('测试集目标值:',len(y_test))

输出:

训练集特征值: 112
测试集特征值: 38
训练集目标值: 112
测试集目标值: 38

从打印结果可以看到,测试集的样本数是38,训练集的样本数是112,划分比例符合预期。


3.3、特征标准化

接下来,对训练集和测试集的特征值进行「标准化」处理(训练集和测试集所做的处理必须完全「相同」)。

from sklearn import datasets
from sklearn import model_selection
from sklearn import preprocessing# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
# x_train:训练集特征,x_test:测试集特征,y_train:训练集目标,y_test:测试集目标
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target, random_state=6)
# 3、特征标准化
ss = preprocessing.StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.fit_transform(x_test)
print(x_train)

输出:

[[-0.18295405 -0.192639    0.25280554 -0.00578113][-1.02176094  0.51091214 -1.32647368 -1.30075363][-0.90193138  0.97994624 -1.32647368 -1.17125638]

从打印结果可以看到,特征值发生了相应的变化。


3.4、KNN处理并评估

接下来,将训练集特征 和 训练集目标 传给 KNN,然后评估处理结果的「准确率」

from sklearn import datasets
from sklearn import model_selection
from sklearn import preprocessing
from sklearn import neighbors# 1、获取数据集
iris = datasets.load_iris()
# 2、划分数据集
# x_train:训练集特征,x_test:测试集特征,y_train:训练集目标,y_test:测试集目标
x_train, x_test, y_train, y_test = model_selection.train_test_split(iris.data, iris.target, random_state=6)
# 3、特征标准化
ss = preprocessing.StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.fit_transform(x_test)
# 4、KNN算法处理
knn = neighbors.KNeighborsClassifier(n_neighbors=2)
knn.fit(x_train, y_train)
# 5、评估结果
y_predict = knn.predict(x_test)
print('真实值和预测值对比:', y_predict == y_test)
score = knn.score(x_test, y_test)
print('准确率:', score)

输出:

真实值和预测值对比: [ True  True  True  True  True  True False  True  True  True False  TrueTrue  True  True False  True  True  True  True  True  True  True  TrueTrue  True  True  True  True  True  True  True  True  True False  TrueTrue  True]
准确率: 0.8947368421052632

从输出结果可以很容易看出,准确率是89%;真实值和预测值对比的结果中,True越多,表示准确率越高。

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

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

相关文章

最强自动化框架,Pytest自动化测试-动态切换环境实战(超细整理)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在开始前&#xf…

LangChain大型语言模型(LLM)应用开发(五):评估

LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

ceph应用

资源池 Pool 管理 上面我们已经完成了 Ceph 集群的部署,但是我们如何向 Ceph 中存储数据呢?首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概念。我们可以将其理解为 Ceph 存储上划分的逻辑分区,Pool 由多…

Qt6 Qt Quick UI Prototype学习QML第一篇

Qt6 Qt Quick UI原型学习QML第一篇 开始创建项目Qt Quick UI原型简介.qmlproject文件举例Window平台小例子运行效果QML语法 了解语法 开始创建项目 创建一个具有QML入口点的Qt Quick 2 UI项目。要使用它,您需要设置一个QML运行时环境,例如gmlscene。 仅当…

消息队列——rabbitmq的不同工作模式

目录 Work queues 工作队列模式 Pub/Sub 订阅模式 Routing路由模式 Topics通配符模式 工作模式总结 Work queues 工作队列模式 C1和C2属于竞争关系,一个消息只有一个消费者可以取到。 代码部分只需要用两个消费者进程监听同一个队里即可。 两个消费者呈现竞争关…

安全防御 --- DDOS攻击(01)

DOS攻击(deny of service)--- 拒绝式服务攻击 例:2016年10月21日,美国提供动态DNS服务的DynDNS遭到DDOS攻击,攻击导致许多使用DynDNS服务的网站遭遇访问问题,此事件中,黑客人就是运用了DNS洪水…

golang waitgroup

案例 WaitGroup 可以解决一个 goroutine 等待多个 goroutine 同时结束的场景,这个比较常见的场景就是例如 后端 worker 启动了多个消费者干活,还有爬虫并发爬取数据,多线程下载等等。 我们这里模拟一个 worker 的例子 package mainimport (…

ChatGPT与Claude对比分析

一 简介 1、ChatGPT: 访问地址:https://chat.openai.com/ 由OpenAI研发,2022年11月发布。基于 transformer 结构的大规模语言模型,包含1750亿参数。训练数据集主要是网页文本,聚焦于流畅的对话交互。对话风格友好,回复通顺灵活,富有创造性。存在一定的安全性问题,可…

【深度学习】基于BRET的高级主题检测

一、说明 使用BERT,UMAP和HDBSCAN捕获文档主题,紧随最先进的BERTopic架构(transformer编码器)。 主题检测是一项 NLP 任务,旨在从文本文档语料库中提取全局“主题”。例如,如果正在查看书籍描述的数据集,主题检测将使我们能够将书籍分类,例如:“浪漫”、“科幻”、“旅…

Springboot+Flask+Neo4j+Vue2+Vuex+Uniapp+Mybatis+Echarts+Swagger综合项目学习笔记

文章目录 Neo4j教程:Neo4j高性能图数据库从入门到实战 医疗问答系统算法教程:医学知识图谱问答系统项目示例:neo4j知识图谱 Vueflask 中药中医方剂大数据可视化系统可视化技术:ECharts、D.jsflask教程:速成教程Flask w…

list模拟实现

一、结点的定义 有三个成员&#xff0c;2个指向前面和后面的指针&#xff0c;一个表示结点存储T类型的值。 对于_prev和_next&#xff0c;类型是 list_node<T>*&#xff0c;不是list_node*&#xff0c;加上类型参数T之后&#xff0c;才是模板类的类型。 构造函数中&am…

【MySQL】MySQL8.1.0版本正式发布带来哪些新特性?

文章目录 前言一、畅谈新版本二、8.1.0版本部署2.1、环境准备2.2、配置yum安装依赖2.3、用户及目录创建2.4、创建用户及组2.5、解压缩包2.6、环境变量配置2.7、创建参数文件2.8、数据库初始化2.9、启动Mysql2.10、登陆MySQL 8.1 三、新特性3.1、密码参数3.2、错误日志加强3.3、…

Spring Security OAuth2.0(6):自定义认证自定义登录页

文章目录 自定义登录界面配置自定义登录页面 自定义登录界面 \qquad 你可能想知道登录页面从哪里来&#xff1f;因为我们并没有提供任何的HTML或JSP文件。Spring Security 的默认配置没有明确设定一个登录页面的URL&#xff0c;因此Spring Security 会根据启用的功能自动生成一…

Godot实用代码-存取存档的程序设计

1. Settings.gd 全局变量 用于保存玩家设置 对应Settings.json 2. Data.gd 全局变量 用于保存玩具数据 对应Data.json 实践逻辑指南 1.在游戏开始的时候&#xff08;游戏场景入口的_ready()处&#xff0c; Settings.gd

Linux内核结构与特性简介

系统调用接口&#xff1a;位于最上层&#xff0c;实现了一些基本的功能&#xff0c;如read和write等系统调用。这是用户空间程序与内核交互的接口&#xff0c;提供了对内核功能的访问。 内核代码&#xff1a;位于系统调用接口之下&#xff0c;可以看作是独立于体系结构的通用内…

qt和vue交互

1、首先在vue项目中引入qwebchannel /******************************************************************************** Copyright (C) 2016 The Qt Company Ltd.** Copyright (C) 2016 Klarlvdalens Datakonsult AB, a KDAB Group company, infokdab.com, author Milian …

13_Linux无设备树Platform设备驱动

目录 Linux驱动的分离与分层 驱动的分隔与分离 驱动的分层 platform平台驱动模型简介 platform总线 platform驱动 platform设备 platform设备程序编写 platform驱动程序编写 测试APP编写 运行测试 Linux驱动的分离与分层 像I2C、SPI、LCD 等这些复杂外设的驱动就不…

Fortinet Accelerate 2023·中国区巡展收官丨让安全成就未来

7月18日&#xff0c;2023 Fortinet Accelerate Summit在上海成功举办&#xff01;这亦象征着“Fortinet Accelerate2023中国区巡展”圆满收官。Fortinet携手来自多个典型行业的百余位代表客户&#xff0c;以及Telstra - PBS 太平洋电信、Tenable等多家生态合作伙伴&#xff0c;…

利用数据分析告警机制,实现鸿鹄与飞书双向集成

需求描述 实现鸿鹄与飞书的双向集成&#xff0c;依赖鸿鹄的告警机制&#xff0c;可以发送用户关心的信息到飞书。同时依赖飞书强大的卡片消息功能&#xff0c;在飞书消息里面能够通过链接&#xff08;如下图&#xff09;返回到鸿鹄以方便用户进一步排查和分析问题。 解决方案 1…

CGT Asia嘉年华|2023第四届亚洲细胞与基因治疗 创新峰会(广州站)10月升级启航

近年来&#xff0c;全球CGT发展突飞猛进&#xff0c;为遗传罕见病、难治性慢性病和肿瘤患者带来了新的希望&#xff0c;也成为整个国际领域科技竞争的未来焦点。国家发改委发布的《“十四五”生物经济发展规划》明确指出要重点发展基因诊疗、干细胞治疗、免疫细胞治疗等新技术&…