Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据挖掘算法-KNN算法

数据挖掘算法-KNN算法

作者头像
用户9925864
发布于 2022-07-27 00:44:51
发布于 2022-07-27 00:44:51
63900
代码可运行
举报
运行总次数:0
代码可运行

算法简介

邻近算法,又叫K近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。个人感觉KNN算法(K-NearestNeighbor)一种极其简单粗暴的分类方法,举一个例子,比如说你想知道一个人是不是喜欢打游戏,就可以观察他最亲密的几个朋友是不是都喜欢打游戏,如果大多数都喜欢打游戏,可以推测这个人也喜欢打游戏。KNN就是基于这种有点“物以类聚,人以群分”的简单粗暴的想法来进行分类的。

  • kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。
  • 该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
  • kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。

算法思路

如果一个样本在特征空间中的 k 个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。通常 K 的取值比较小,不会超过20。

  • 计算测试数据与各个训练数据之间的距离
  • 按照升序(从小到大)对距离(欧氏距离)进行排序
  • 选取距离最小的前k个点
  • 确定前k个点所在类别出现的频率
  • 返回前k个点中出现频率最高的类别作为测试数据的分类

关于k值的选取

  • 当K的取值过小时,一旦有噪声得成分存在们将会对预测产生比较大影响,例如取K值为1时,一旦最近的一个点是噪声,那么就会出现偏差,K值的减小就意味着整体模型变得复杂,容易发生过拟合。
  • 如果K的值取的过大时,就相当于用较大邻域中的训练实例进行预测,学习的近似误差会增大。这时与输入目标点较远实例也会对预测起作用,使预测发生错误。K值的增大就意味着整体的模型变得简单。
  • K的取值尽量要取奇数,以保证在计算结果最后会产生一个较多的类别,如果取偶数可能会产生相等的情况,不利于预测。
  • 常用的方法是从k=1开始,估计分类器的误差率。重复该过程,每次K增值1,允许增加一个近邻,直到产生最小误差率的K。

一般k的取值不超过20,上限是n的开方,随着数据集的增大,K的值也要增大。

KNN算法实现

鸢尾花数据集

Iris 鸢尾花数据集内包含 3 类分别为山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica),共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度,可以通过这4个特征预测鸢尾花卉属于哪一品种。

iris数据集包含在sklearn库当中,具体在sklearn\datasets\data文件夹下,文件名为iris.csv。以本机为例。其路径如下:

C:\ProgramData\Anaconda3\Lib\site-packages\sklearn\datasets\data\iris.csv

其中数据如下格式:

第一行数据意义如下:

150:数据集中数据的总条数

4:特征值的类别数,即花萼长度、花萼宽度、花瓣长度、花瓣宽度。

setosa、versicolor、virginica:三种鸢尾花名

从第二行开始:

第一列为花萼长度值

第二列为花萼宽度值

第三列为花瓣长度值

第四列为花瓣宽度值

第五列对应是种类(三类鸢尾花分别用0,1,2表示)

算法实现

①利用slearn库中的load_iris()导入iris数据集

②使用train_test_split()对数据集进行划分

③KNeighborsClassifier()设置邻居数

④利用fit()构建基于训练集的模型

⑤使用predict()进行预测

⑥使用score()进行模型评估

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np

# 载入数据集
iris_dataset = load_iris()

# 数据划分
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0)

# 设置邻居数
knn = KNeighborsClassifier(n_neighbors=3)

# 构建基于训练集的模型
knn.fit(X_train, y_train)

# 一条测试数据
X_new = np.array([[10.2, 10.1, 10.2, 20.2]])

# 对X_new预测结果
prediction = knn.predict(X_new)
print("预测值%d" % prediction)

prediction1 = knn.predict(X_test)
print('predict data')
print(prediction1)
print('ground truth')
print(y_test)
# 得出测试集X_test测试集的分数
print("score:{:.2f}".format(knn.score(X_test, y_test)))
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
实验一:鸢尾花数据集分类「建议收藏」
利用机器学习算法构建模型,根据鸢尾花的花萼和花瓣大小,区分鸢尾花的品种。实现一个基础的三分类问题。
全栈程序员站长
2022/08/02
9.2K0
实验一:鸢尾花数据集分类「建议收藏」
鸢尾花(Iris)数据集入门
鸢尾花(Iris)数据集是机器学习领域中最经典的数据集之一。它由三种不同品种的鸢尾花的测量数据组成:山鸢尾(setosa)、变色鸢尾(versicolor)和维吉尼亚鸢尾(virginica)。 在这篇文章中,我们将使用Markdown代码格式详细介绍鸢尾花数据集的基本信息以及如何加载和探索这个数据集。
大盘鸡拌面
2023/10/20
3K0
K-近邻算法(KNN)实战
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据 与所属分类的对应关系。输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的 特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们 只选择样本数据集中前K个最相似的数据,这就是K-近邻算法中K的出处,通常K是不大于20的整数。 最后 ,选择K个最相似数据中出现次数最多的分类,作为新数据的分类。
会呼吸的Coder
2020/02/17
9110
K-近邻算法(KNN)实战
深入浅出KNN算法(二) sklearn
上次介绍了KNN的基本原理,以及KNN的几个窍门,这次就来用sklearn实践一下KNN算法。
py3study
2020/01/16
1.9K0
深入浅出KNN算法(二) sklearn
使用knn算法对鸢尾花数据集进行分类(数据挖掘apriori算法)
一、knn算法描述 1.基本概述 knn算法,又叫k-近邻算法。属于一个分类算法,主要思想如下: 一个样本在特征空间中的k个最近邻的样本中的大多数都属于某一个类别,则该样本也属于这个类别。其中k表示最近邻居的个数。
全栈程序员站长
2022/08/01
2.5K0
使用knn算法对鸢尾花数据集进行分类(数据挖掘apriori算法)
python机器学习实现鸢尾花的分类
鸢尾花(学名:Iris tectorum Maxim)属百合目、鸢尾科,可供观赏,花香气淡雅,可以调制香水,其根状茎可作中药,全年可采,具有消炎作用。
用户6719124
2019/11/17
6.3K0
【Python环境】监督学习之KNN算法
1、ipython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许多很有用的功能和函数。在ubuntu下只要sudo apt-get install ipython 就装好了,通过ipython启动。 2、iris.csv数据集以鸢尾花的特征作为数据来源,数据集包含150个数据集,分为3类[山鸢尾(Iris setosa)、变色鸢尾(Iris versicolor)和维吉尼亚鸢尾(Iris virginica)
陆勤_数据人网
2018/02/27
9580
【Python环境】监督学习之KNN算法
Docker下,五分钟极速体验机器学习
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
程序员欣宸
2019/08/01
1.2K0
分类-KNN算法(鸢尾花分类实战)
K近邻(K Nearest Neighbors,KNN)算法是最简单的分类算法之一,也就是根据现有训练数据判断输入样本是属于哪一个类别。
唔仄lo咚锵
2022/11/30
1K0
分类-KNN算法(鸢尾花分类实战)
K近邻算法实现分类案例
通过上述代码对数据的查验以及数据本身的描述,了解到Iris数据集共有150朵鸢尾数据样本,并且均匀分布在3个不同的亚种;每个数据样本被4个不同的花瓣、花萼的形状特征所描述。
用户3577892
2020/06/11
7270
鸢尾花数据集knn算法可视化(在R中找到鸢尾花数据)
kNN(K Nearest Neighbor)算法是机器学习中最基础入门,也是最常用的算法之一,可以解决大多数分类与回归问题。这里以鸢尾花数据集为例,讨论分类问题中的 kNN 的思想。
全栈程序员站长
2022/07/28
2K0
鸢尾花数据集knn算法可视化(在R中找到鸢尾花数据)
Python数据挖掘算法入门与实践
数据挖掘是一个通过对大量数据进行清理和处理,以发现其中隐藏的信息和模式的过程。简单来说,它是从大量数据中提取或“挖掘”知识的过程,也称为知识发现。
算法进阶
2024/02/17
1.2K0
Python数据挖掘算法入门与实践
K 近邻算法
鸢尾花Iris Dataset数据集是机器学习领域经典数据集,鸢尾花数据集包含了150条鸢尾花信息,每50条取自三个鸢尾花中之一:Versicolour、Setosa和Virginica。
@小森
2024/03/15
2350
K 近邻算法
李航《统计学习方法》K近邻学习算法实现
Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
Coggle数据科学
2019/09/12
4510
李航《统计学习方法》K近邻学习算法实现
完全汇总,十大机器学习算法!!
接下来我会从每个算法模型的介绍、基本原理、优缺点以及适用场景注意叙述,最后会基于开源数据集给出一个比较入门型的案例供大家学习~
Python编程爱好者
2024/04/12
5480
完全汇总,十大机器学习算法!!
k最近邻kNN算法入门
k最近邻(kNN)算法是机器学习中最简单、最易于理解的分类算法之一。它基于实例之间的距离度量来进行分类,并且没有显式的训练过程。本文将介绍k最近邻算法的基本原理和使用方法,并通过一个示例来说明其应用过程。
大盘鸡拌面
2023/10/30
4190
K 值选对,准确率翻倍:KNN 算法调参的黄金法则
K 近邻算法(K-Nearest Neighbors, KNN)是机器学习中最简单、最直观的算法之一,其核心思想源于人类对相似事物的判断逻辑 ——“近朱者赤,近墨者黑”。该算法无需复杂的训练过程,直接通过计算样本间的距离来进行分类或回归,广泛应用于图像识别、文本分类、推荐系统等领域。
羑悻的小杀马特.
2025/06/01
2350
K 值选对,准确率翻倍:KNN 算法调参的黄金法则
KNN算法API
💡💡为什么要划分数据集呢? 结论:不能将所有数据集全部用于训练,为了能够评估模型的泛化能力,可以通过实验测试对学习器的泛化能力进行评估,进而做出选择。因此需要使用一个 "测试集" 来测试学习器对新样本的判别能力,以测试集上的 "测试误差" 作为泛化误差的近似。
用户10950404
2024/07/30
1600
KNN算法API
机器学习之KNN最邻近分类算法[通俗易懂]
KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中最简单的算法之一,其指导思想是”近朱者赤,近墨者黑“,即由你的邻居来推断出你的类别。
全栈程序员站长
2022/08/10
1.3K0
机器学习之KNN最邻近分类算法[通俗易懂]
分类-KNN算法(代码复现和可视化)
K近邻(K Nearest Neighbors,KNN)算法是最简单的分类算法之一,也就是根据现有训练数据判断输入样本是属于哪一个类别。
唔仄lo咚锵
2022/10/04
9910
分类-KNN算法(代码复现和可视化)
相关推荐
实验一:鸢尾花数据集分类「建议收藏」
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验