Python21 k-近邻算法

图片

k-近邻算法(k-Nearest Neighbors, k-NN)是一种基本且广泛使用的分类与回归算法。它的工作原理非常直观:通过测量不同特征点之间的距离,来进行分类或回归分析。

1.K-NN算法

基本概念

1.基于实例的学习:k-NN是一种基于实例的学习,意味着它直接记忆训练数据集,并通过这些数据进行预测,而不需要明确地学习一个模型。

2.懒惰学习(Lazy Learning):k-NN属于懒惰学习算法,因为它基本上不在训练阶段进行计算,而是将所有的计算推迟到分类阶段。

3.非参数方法:k-NN是一种非参数方法,这意味着它不对数据的分布做任何假设。这是一个优点,因为它不需要先验知识关于数据分布的形式。

工作原理

1.选择邻居数目(k值):算法运行时,首先需要指定“k”,即最近邻居的数目。k是一个预先选定的常数,通常是一个较小的整数。k的选择会影响算法的结果。

2.计算距离:计算查询点(即测试点)与每个训练数据点之间的距离。常用的距离度量包括欧氏距离、曼哈顿距离或余弦距离等。

3.识别最近的k个邻居:选择距离最近的k个训练数据点作为最近邻。

4.进行投票或平均

  • 分类:在k个最近邻中,根据多数投票原则来决定新数据点的类别。即在这k个邻居中,哪个类别的元素最多,新数据点就被标记为那个类别。

  • 回归:如果用于回归,通常是计算这k个邻居的输出变量的平均值,来预测新数据点的输出。

应用
  • k-NN可以用在许多类型的数据场景中,包括政治科学、手写识别、图像识别和视频识别等领域。

  • 在金融行业中,k-NN可用于信用评分和预测公司破产。

  • 在医疗领域,k-NN被用来预测疾病的发展和分类疾病类型。

优缺点
  • 优点:简单易懂;理论成熟;易于实现;不需要假设数据分布,适用于复杂或真实的数据集。

  • 缺点:计算量大,尤其是在有大量训练数据的情况下;对不相关的功能或噪音敏感;k值的选择和距离度量的选择可能会显著影响性能。

因此,k-NN虽然是一个简单有效的算法,但在使用时需要仔细选择参数,并考虑其对大数据集的计算和存储影响。

2.k-NN 算法的简单理解:水果分类

假设有一篮子水果,水果可以是苹果、梨或橙子。每种水果我们都测量了两个属性:重量和颜色深浅(这里简化颜色深浅为一个从 0 到 1 的数值,0 是最浅,1 是最深)。现在有一些标记好的水果数据(即知道每个数据点是哪种水果),你想用这些数据来帮助你分类一些新的水果。

已知的标记数据示例:
重量(克)颜色深浅类型
1500.8苹果
1700.5
1400.9苹果
1300.4橙子
1600.7
新的水果数据:
重量(克)颜色深浅
1450.6
k-NN 算法操作步骤:

1.选择 k 的值:在这个例子中,选择 k = 3,意味着将查找三个最近的邻居。

2.计算距离:使用欧氏距离来计算新水果与已知标记数据之间的距离。例如,计算新水果与第一个苹果的距离:

类似地,计算与所有水果的距离。

3.找到最近的 k 个邻居:根据计算出的距离,找出最近的三个水果。

4.进行投票:看这三个最近的水果中哪种类型最多。假设最近的三个水果是两个梨和一个苹果,那么新的水果将被分类为“梨”。

可视化解释:

可以把这些水果想象成散布在一个图表上的点,其中横轴是重量,纵轴是颜色深浅。新水果也是图表上的一个点,而找到的最近的三个点(邻居)决定了这个新点(新水果)的类别。

通过这个简单的例子,k-NN 的直观含义就是“告诉我你的朋友是谁,我就告诉你你是谁”——一个事物通常与它最近的几个其他事物类似。这种方法不需要一个复杂的模型,只是简单地查找最近的已知点,并基于它们的类型来决定新点的类型。这使得 k-NN 成为一个易于实现且直观的机器学习算法。

3.k-NN 算法实例

import numpy as np  # 数据操作
import matplotlib.pyplot as plt  # 可视化
from sklearn import datasets  # 生成模拟数据
from sklearn.model_selection import train_test_split  # 将数据分为训练集和测试集
from sklearn.neighbors import KNeighborsClassifier  # 实现k-NN算法的类
from sklearn.metrics import accuracy_score  # 计算模型的准确度

# 生成数据
X, y = datasets.make_classification(n_features=2, n_redundant=0, n_informative=2,random_state=1, n_clusters_per_class=1, n_samples=100)  #  生成一个随机的二分类数据集,其中包含100个样本,每个样本有2个特征
rng = np.random.RandomState(2)
X += 2 * rng.uniform(size=X.shape)  # 向数据中添加一些随机噪声,使得数据分布更加自然,不完全线性可分

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 将数据随机分为训练集和测试集,其中测试集占20%

# 创建k-NN分类器实例
k = 3  # 邻居数k为3
classifier = KNeighborsClassifier(n_neighbors=k)

# 训练模型
classifier.fit(X_train, y_train)

# 预测测试集
y_pred = classifier.predict(X_test)

# 计算并打印准确率
print("Accuracy:", accuracy_score(y_test, y_pred))

# 可视化结果
plt.figure(figsize=(10, 6))
plt.title("k-NN classification with k=" + str(k))

# 绘制训练集
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='winter', marker='o', edgecolor='k', label='Train Data')

# 绘制测试集
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, cmap='winter', marker='s', edgecolor='k', label='Test Data')

# 绘制图例
plt.legend(loc='best')
plt.show()

图片

可视化结果中,圆点代表训练数据,方点代表测试数据。


以上内容总结自网络,如有帮助欢迎转发,我们下次再见!

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

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

相关文章

three.js - matcap材质(MeshMatcapMaterial)

说一下matcap纹理 先总结:MeshMatcapMaterial材质,通过采样含有光照信息的贴图来模拟光照效果。这种材质特别适用于模拟静态光源下的光照,并且,因其简单性和快速性而被广泛应用于各种场景。但是,由于其性能考虑&#x…

浅层神经网络

浅层神经网络 神经网络概述 一个完整的神经网络由N多个神经元之间形成的复杂连接,但对于每个神经元仅执行简单的线性计算。 神经网络的表示 𝑎 ^ [0]可以用来表示输入层的激活值 𝑎 ^ [1]可以用来表示隐藏层的激活值 𝑥表示输…

一种502 bad gateway nginx/1.18.0的解决办法

背景:上线的服务突然挂掉了 step1,去后端日志查看,发现并无异常,就是请求无法被接收 step2,查看了nginx的错误日志,发现该文件为空 step3,查看了niginx的运行日志,发现了以下问题 [error] 38#…

JeecgFlow事件网关概念及案例

事件网关 通常网关基于连线条件决定后续路径,但事件网关有所不同,其基于事件决定后续路径。事件网关的每条外出顺序流都需要连接一个捕获中间事件。 事件网关只有分支行为,流程的走向完全由中间事件决定。可以从多条候选分支中选择事件最先达…

Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)

目录 Struts2介绍 漏洞介绍 环境搭建 漏洞探测 执行命令 反弹shell 这一篇还是参考大佬的好文章进行Struts2 S2-061远程命令执行漏洞的学习和练习 Struts2介绍 百度百科 Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Ja…

面试-java并发与多线程的部分函数

1.sleep和wait的区别 基本的差别: Sleep是Thread的方法。Wait是object方法。Wait不传参,最终也是调用wait(native)的传参方法。 Sleep方法可以在任何地方使用。 Wait方法只能在synchronized方法或synchronized方法块中使用。 最主要的本质区别&#xf…

web前端——CSS

目录 一、css概述 二、基本语法 1.行内样式表 2.内嵌样式表 3.外部样式表 4.三者对比 三、选择器 1.常用的选择器 2. 选择器优先级 3.由高到低优先级排序 四、文本,背景,列表,伪类,透明 1.文本 2.背景 3.列表 4.伪类 5.透明 五、块级,行级,行级块标签, dis…

OCR的有效数据增强

背景 我面临着需要尽可能准确识别手写金额的挑战。难点在于保持误判率低于0.01%。由于数据集中样本数量固定,因此数据增强是合乎逻辑的选择。快速搜索未发现针对光学字符识别(OCR)的现成方法。因此,我挽起袖子,亲自创建…

discuz插件之优雅草超级列表互动增强v1.2版本更新

https://doc.youyacao.com/9/2142 v1.2更新 discuz插件之优雅草超级列表互动增强v1.2版本更新 [title]20220617 v1.2发布[/title] 增加了对php8的支持 增加了 对discuz3.5的支持

跟着DW学习大语言模型-什么是知识库,如何构建知识库

建立一个高效的知识库对于个人和组织来说非常重要。无论是为了个人学习和成长,还是为了组织的持续创新和发展,一个完善的知识管理系统都是不可或缺的。那么,如何建立一个高效的知识库呢? 在建立知识库之前,首先需要确定…

车辆网络安全开发

随着智能汽车的快速发展,车载软件的数量和复杂性不断增加,同时也带来了网络安全风险。智能汽车软件开发是实现车辆智能化、信息化的重要手段。在智能汽车软件的开发过程中,开发人员需要遵循一定的规范和标准,以确保软件的质量和安…

【乐吾乐2D可视化组态编辑器】水位随数据动态变化

External Player - 哔哩哔哩嵌入式外链播放器 示例:进度条,通常用来展示水位变化 乐吾乐2D可视化组态编辑器demo:https://2d.le5le.com/ 示例:乐吾乐2D可视化 (le5le.com)

【机器学习】图神经网络(NRI)模型原理和运动轨迹预测代码实现

1.引言 1.1.NRI研究的意义 在许多领域,如物理学、生物学和体育,我们遇到的系统都是由相互作用的组分构成的,这些组分在个体和整体层面上都产生复杂的动态。建模这些动态是一个重大的挑战,因为往往我们只能获取到个体的轨迹数据,而不知道其背后的相互作用机制或具体的动态…

CEWEY C9自动猫砂盆测评:千元级安全实用稳定输出,解放铲屎官双手!

最近邻居姐姐成为新晋铲屎官,猫咪的吃喝还好,因为是打工人每天要早出晚归,铲屎这项不能等待的任务就让她很苦恼,猫砂盆太脏猫咪要么憋着不上要么乱拉乱尿,搞得小姐姐身心俱疲。看着她日渐憔悴的脸色,我这个…

【算法】数组-基础知识与应用

一.基础理论 数组是存放在连续内存空间上的相同类型数据的集合。数组可以方便的通过下标索引的方式获取到下标对应的数据。 数组下标都是从0开始的。数组内存空间的地址是连续的 因为数组在内存空间的地址是连续的,所以我们在删除或者增添元素的时候&#xff0c…

C#语言+net技术架构+ VS2019开发的微信公众号预约挂号系统源码 微信就医全流程体验 什么是微信预约挂号系统?

C#语言net技术架构 VS2019开发的微信公众号预约挂号系统源码 微信就医全流程体验 什么是微信预约挂号系统? 微信预约挂号系统是一种基于互联网的预约挂号平台,通过与医院信息系统的对接,实现了患者通过手机微信轻松预约挂号的功能。预约挂号系…

Git的安装以及使用

一.简单介绍 1.1版本控制 版本控制是指对软件开发过程中各种程序代码,配置文件及说明文档等文件变更管理,是软件配置管理的核心思想之一。 版本控制最重要的内容是追踪文件的变更,它将什么时候,什么人更改了文件的什么内容等信息忠实的记录…

闪迪sd卡视频格式化数据恢复方法,你了解吗

咨询:“我不小心将闪迪SD卡格式化了,里面的重要视频文件全都不见了。我感到非常焦虑,因为这些视频对我来说意义非凡。现在急需找到方法来恢复!!” 在数字时代,SD卡已成为我们日常生活中不可或缺的数据存储设…

大脑网路分析的进展:基于大规模自监督学习的诊断| 文献速递-先进深度学习疾病诊断

Title 题目 BrainMass: Advancing Brain Network Analysis for Diagnosis with Large-scale Self-Supervised Learning 大脑网路分析的进展:基于大规模自监督学习的诊断 01 文献速递介绍 功能性磁共振成像(fMRI)利用血氧水平依赖&#x…

【思科】IPv6 过渡技术 - IPv6 in IPv4隧道

【思科】IPv6 过渡技术 - IPv6 in IPv4隧道 实验要求实现思路IPv6 in IPv4 与 GRE 不同点注意点配置R1基础配置OSPFv3 局域网可达 R2基础配置局域网环境(OSPFv3):IPv6 网络IPv6 in IPv4隧道 R3R4基础配置局域网环境(OSPFv3):IPv6 网络IPv6 in IPv4隧道 R…