sklearn之k近邻算法——以鸢尾花分类为例

文章目录

    • k近邻算法
      • 算法原理
      • k值的选取
      • 特征数据的归一化
      • 距离的度量
      • 分类原则的制定
      • 鸢尾花分类

k近邻算法

k近邻算法是经典的监督学习算法,我们这里主要介绍k近邻算法的基本内容和如何应用

算法原理

k近邻算法的基本原理其实很简单

首先k近邻算法是一个分类算法,在我们进行分类之前,需要先定义“距离”,或者我们可以形象的理解为样本点之间的相似程度

训练集是已经准备好的,也已经完全分好了类别,接下来拿出每一个需要分类的测试点,找到训练集中和他最近的k个点,也就是最相似的k个点,如果这k个点都属于同一个类别,我们就有把握认为这个测试点也是这个类别的了

这个过程完成其实算法也就结束了,更加形象的说法可能是投票,比如说这个人有多少分像自己,然后取出最高的k个得分,如果这k个得分是同一类,就说明这个人是这一类的

k近邻算法是一种基于实例的学习,也是惰性学习的代表,没有显示的训练过程,因为我们一开始就没有对训练集做处理,而是直接使用,所以训练时间为0。与之对应的是急切学习,就是需要从训练集中建模

其次这个过程实际上是属于少数付出多数的,那么k值的选取和距离的定义就显得尤为重要

接下来我们会对这几个规则进行介绍

k值的选取

正如我们之前所说,k值的选取对分类的准确性有很大影响,当k比较小时,模型对于训练集就非常敏感了,一旦出现了扰动,模型很可能就不识别了,也就发生了过拟合

当k值比较大时,初期的时候分类错误率会有所下降,但是随着进一步增大,又会提升,因为样本逐渐趋向于全局的样本了

一般我们采用交叉验证的方式来选取最优的k值,也就是说对每一个k值都做若干次验证,计算他们各自的平均误差,然后选其中误差最小的

特征数据的归一化

如果读者学习过统计学相关的内容,就知道归一化的必要性之大

举个简单的例子,温度从10摄氏度到20摄氏度和分数从60到70,这是两个概念,虽然差距一样,一方面是因为单位不同,另一方面这两个10占所在区域的占比不同

一般情况下是会将所有特征值映射到0到1的范围内处理

归一化的方法有很多,假设一个值是x,他所在范围的最大值最小值已知,求他的归一化值可以用这个公式 x ′ = x − M I N M A X − M I N x^{'}=\frac{x-MIN}{MAX-MIN} x=MAXMINxMIN

我们可以用numpy或者sklearn进行数据的预处理,需要注意的是,无论如何处理数据,我们都需要将数据转换成对应框架所需要的形式

距离的度量

一般来说有欧氏距离,这种距离如果不做归一化处理会受到量纲的影响,马氏距离很方便的表示数据的协方差距离,如果是文字变量就是海明距离,他表示将一个字符串变成另一个字符串所需要替换的字符个数

无论使用何种距离,只要能反映两个变量的相似程度即可,需要注意的是,不同的距离选取标准也会影响到分类的效果

分类原则的制定

如果我们仅仅采用一人一票,来贴标签,是不够恰当的,我们认为距离会赋予这些票的权重,也就是距离越近,越相似,权重也就越大,类似于最开始的评分,如果是一人一票就是0和1,而有权重就是从0到100

鸢尾花分类

sklearn已经内置了这个数据集,我们首先给出代码,然后再对代码做解释

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

iris = load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,  random_state=100)

knn = KNeighborsClassifier(n_neighbors=3)

knn.fit(X,y)

y_predict_on_train = knn.predict(X_train)
y_predict_on_test = knn.predict(X_test)

print("训练集的准确率为:{:.2f}%".format(100*accuracy_score(y_train, y_predict_on_train)))
print("测试集的准确率为:{:.2f}%".format(100*accuracy_score(y_test, y_predict_on_test)))

其实整体分为了几个部分,载入数据集,初始化数据集,分割,训练,预测

image.png

最后我们可以给出最后预测的准确率,当然我们也可以自己手动调整一些参数,或者是knn的一些参数,查阅官方文档

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

x264 帧类型代价计算原理:slicetype_slice_cost 函数分析

x264 x264 是一个开源的视频编码库,它实现了H.264/AVC标准。H.264是一种广泛使用的压缩标准,用于视频流、视频下载、蓝光光盘以及许多其他形式的数字视频分发。x264 以其高压缩效率和良好的视频质量而著称,是许多视频编辑软件和视频播放器的默认编解码器。 以下是关于 x26…

软件工程期末复习(6)需求分析的任务

需求分析 需求分析的任务 “建造一个软件系统的最困难的部分是决定要建造什么……没有别的工作在做错时会如此影响最终系统,没有别的工作比以后矫正更困难。” —— Fred Brooks 需求难以建立的原因&#x…

半小时搞懂STM32面经知识——RCC

1. 时钟的概念 时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,要想使用单片机的外设必须开启时钟。 时钟对单片机有什么作用? 1. 驱动外设的本质是寄存器,而寄存器需要时钟触发才能改写值。 2. 时钟频率越高&#…

基于Docker的JMeter分布式压测

一个JMeter实例可能无法产生足够的负载来对你的应用程序进行压力测试。如本网站所示,一个JMeter实例将能够控制许多其他的远程JMeter实例,并对你的应用程序产生更大的负载。JMeter使用Java RMI[远程方法调用]来与分布式网络中的对象进行交互。JMeter主站…

前端已死? Bootstrap--JS-jQuery

目录 Bootstrap--JS-jQuery 1 jQuery基础 介绍 基础语法: $(selector).action() 1.1 安装jQuery 地址 基础语法: $(selector).action() 2 jQuery事件 事件处理程序指的是当 HTML 中发生某些事件时所调用的方法。 jQuery常用事件 2.1 鼠标事件…

栅格地图、障碍物地图与膨胀地图(障碍物地图(三)写一张障碍物地图)

花了不少时间看完了障碍物地图的大致思路,这里简单根据前面的思路来写一个简易版的障碍物地图。 1.订阅一张地图 首先,我们需要一张静态地图作为原始数据,这个我们可以订阅当前的map来获取: void map_test1::MapCallback(const…

软件库V1.5版本iApp源码V3

软件库V1.5版本iApp源码V3 配置教程在【mian.iyu】的【载入事件】 更新内容: 1、分类对接蓝奏(免费,付费,会员,广告),支持蓝奏文件描述设置为简介(改动:首页.iyu&#…

Kubernetes二进制(单master)部署

文章目录 Kubernetes二进制(单master)部署一、常见的K8S部署方式1. Minikube2. Kubeadmin3. 二进制安装部署4. 小结 二、K8S单(Master)节点二进制部署1. 环境准备1.1 服务器配置1.2 关闭防火墙1.3 修改主机名1.4 关闭swap1.5 在/e…

Linux常用指令集合

ls显示目录文件 选项: -a 所有文件(all所有) -l 详细信息(Information信息)(自动包含-1) 所以常用 ll -1 一行只输出一个文件。 -R 列出所有子目录下的文件。…

运维别卷系列 - 云原生监控平台 之 02.prometheus exporter 实践

文章目录 [toc]exporter 简介常用的 exporternode-exporter 实践创建 svc创建 daemonsetprometheus 配置服务发现 exporter 简介 随着 Prometheus 的流行,很多系统都已经自带了用于 Prometheus 监控的接口,例如 etcd、Kubernetes、CoreDNS 等&#xff0c…

基于Springboot的校园疫情防控信息管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的校园疫情防控信息管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层…

保研机试之【文件描述符】

A选项: 一个文件描述符对应着系统级文件表中的一项 B选项 C选项 D选项 E选项 F选项 综上,我认为这道题选择B、C、E、F~

内网工具之LDP的使用

LDP 是微软自带的一款活动目录信息查询工具,在域控的 cmd 窗口执行 ldp 命令即可打开 LDP 工具。普通域成员主机默认是没有 LDP 工具的,可以自行上传ldp.exe 工具上去查询活动目录信息。不在域内的机器,也可以通过上传 ldp.exe 工具上去执行。…

接口测试基础

1、接口测试 接口:系统之间数据交互的通道。 硬件接口软件接口 接口测试:基于不同的输入参数,校验接口响应数据与预期数据是否一致。 接口地址 接口参数 2. 为什么要学接口测试? 提前介入测试、尽早发现问题 3、接口测试学什…

网上有哪些赚钱的方法能一天赚二三十?盘点7个靠谱的搞钱副业和赚钱软件

想在家里躺着就能把钱赚?这不再是遥不可及的梦想!随着互联网的飞速发展,网上赚钱的方式层出不穷,总有一款适合你。 今天,就让我们一起揭开这些神秘面纱,看看哪些网上赚钱秘诀能让你轻松实现月入过万&#x…

OpenAI GPT-4

本文翻译整理自:https://openai.com/index/gpt-4-research/ (March 14, 2023) 文章目录 一、关于 GPT-4二、能力视觉输入Visual inputs: chart reasoningSample 2 of 7 操纵性Steerability: Socratic tutorSample 1 of 3 三、局限性四、风险与缓解措施五、训练流程…

运维别卷系列 - 云原生监控平台 之 01.prometheus 入门和部署

文章目录 [toc]什么是 PrometheusPrometheus 架构及其一些生态系统组件Prometheus 的工作模式Prometheus 的适用场景Prometheus 的不适用场景Prometheus 词汇表 Prometheus 启动参数Prometheus 配置文件通用占位符定义配置文件示例解释服务发现 Prometheus 部署创建 namespace创…

Vue入门到关门之Vue3学习

一、常用API 注意:本文项目均使用脚手架为 Vite 1、setup函数 (1)介绍 如果在项目中使用配置项API,那么写起来就和vue2的写法是一样的;但是如果在项目中写的是组合式API,那么组件中所用到的&#xff1a…

深度学习入门到放弃系列 - 阿里云人工智能平台PAI部署开源大模型chatglm3

通过深度学习入门到放弃系列 - 魔搭社区完成开源大模型部署调用 ,大概掌握了开源模型的部署调用,但是魔搭社区有一个弊端,关闭实例后数据基本上就丢了,本地的电脑无法满足大模型的配置,就需要去租用一些高性价比的GPU机…

宝兰德成为中国信通院政企信创促进中心成员 共谱信创产业新篇章

近日,中国信通院云计算标准和开源推进委员会2024年第一次全体工作会议圆满结束。会上,宝兰德获得由中国信通院和EDCC政企信息技术应用创新促进中心授予的荣誉证书,成为政企信创促进中心成员单位。 关于政企信创促进中心 中国信通院政企信创促…