Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据挖掘算法-KNN算法

数据挖掘算法-KNN算法

作者头像
用户9925864
发布于 2022-07-27 00:44:51
发布于 2022-07-27 00:44:51
59300
代码可运行
举报
运行总次数: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用knn算法对鸢尾花数据集进行分类(数据挖掘apriori算法)
一、knn算法描述 1.基本概述 knn算法,又叫k-近邻算法。属于一个分类算法,主要思想如下: 一个样本在特征空间中的k个最近邻的样本中的大多数都属于某一个类别,则该样本也属于这个类别。其中k表示最近邻居的个数。
全栈程序员站长
2022/08/01
2.1K0
使用knn算法对鸢尾花数据集进行分类(数据挖掘apriori算法)
数据分析与数据挖掘 - 09邻近算法
邻近算法又叫做K临近算法或者KNN(K-NearestNeighbor),是机器学习中非常重要的一个算法,but它简单得一塌糊涂,其核心思想就是样本的类别由距离其最近的K个邻居投票来决定。现在假设我们已经有一个已经标记好的数据集,也就是说我们已经知道了数据集中每个样本所属于的类别。这个时候我们拥有一个未标记的数据样本,我们的任务是预测出来这个数据样本所属于的类别。显然邻近算法是属于监督学习(Supervised Learning)的一种,它的原理是计算这个待标记的数据样本和数据集中每个样本的距离,取其距离最近的k个样本,那么待标记的数据样本所属于的类别,就由这距离最近的k个样本投票产生。在这个过程中,有一个动作是标记数据集,这一点在企业中一般是有专门人来负责标记数据的。
马一特
2020/10/09
9420
数据分析与数据挖掘 - 09邻近算法
实验一:鸢尾花数据集分类「建议收藏」
利用机器学习算法构建模型,根据鸢尾花的花萼和花瓣大小,区分鸢尾花的品种。实现一个基础的三分类问题。
全栈程序员站长
2022/08/02
7.8K0
实验一:鸢尾花数据集分类「建议收藏」
机器学习测试笔记(10)——K邻近算法
我们谈起机器学习经常会听到监督学习和非监督学习,它们的区别在哪里呢?监督学习是有标签的,而非监督学习是没有标签的。比如有一批酒,我们知道里面包括红酒和白酒,算法f可以用于鉴别某一个酒是否为红酒和白酒,这时候算法f就称作为监督学习,红酒、白酒即为标签。如果现在另有一批酒,我们知道里面包括不同品种的酒,但是不知道有几类,算法g可以把相同类别的酒归为一类,不同类别的酒归为不同的类(比如:红酒、白酒、啤酒、米酒…), 算法g就称作为非监督学习。在监督学习中我们称作“分类”,在非监督学习中我们称作“聚类”。本文提到的K邻近算法属于监督学习内的“分类”算法。
顾翔
2021/01/04
6170
机器学习测试笔记(10)——K邻近算法
快速入门Python机器学习(九)
所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
顾翔
2022/09/23
2380
快速入门Python机器学习(九)
数据挖掘十大算法之 k-NN
k-NN (k-nearest neighbor) 由 Cover 和 Hart 于 1968 年提出,属于机器学习算法中的监督学习算法,可以用来解决分类和回归问题。
mr.songw
2021/01/22
1.3K0
数据挖掘十大算法之 k-NN
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
K近邻(K-Nearest Neighbors, KNN)算法作为一种基础且广泛应用的机器学习技术,其API的重要性不言而喻。它提供了快速、直接的方式来执行基于实例的学习,通过查找与待分类样本最邻近的K个样本,并基于这些邻近样本的类别来预测新样本的类别。KNN API的标准化和易用性,使得数据分析师和开发者能够轻松集成该算法到他们的项目中,无需深入算法细节,即可享受其强大的分类与回归能力。此外,KNN API通常还包含参数调整功能,如K值选择、距离度量方法等,使得用户可以根据具体需求优化算法性能,进一步凸显了其在机器学习实践中的不可或缺性。
小言从不摸鱼
2024/09/10
3110
机器学习入门(五):KNN概述 | K 近邻算法 API,K值选择问题
分类算法 -- KNN算法 (理论与python实现)
KNN(K-Nearest Neighbor)是一个分类算法,属于有监督学习。 KNN思想的核心在于:近朱者赤,近墨者黑,根据新样本的k个最近邻居来判定其类别。
用户7886150
2020/12/27
1.2K0
鸢尾花数据集knn算法可视化(在R中找到鸢尾花数据)
kNN(K Nearest Neighbor)算法是机器学习中最基础入门,也是最常用的算法之一,可以解决大多数分类与回归问题。这里以鸢尾花数据集为例,讨论分类问题中的 kNN 的思想。
全栈程序员站长
2022/07/28
2K0
鸢尾花数据集knn算法可视化(在R中找到鸢尾花数据)
KNN算法原理及应用
(5)最后,使用预测模型对这些待测的特征向量进行预测并得到结果(Expected Model)。
@小森
2024/03/15
3080
KNN算法原理及应用
分类算法-K-近邻算法
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,即由你的“邻居”来推断出你的类别
后端码匠
2021/08/18
7220
分类算法-K-近邻算法
k最近邻kNN算法入门
k最近邻(kNN)算法是机器学习中最简单、最易于理解的分类算法之一。它基于实例之间的距离度量来进行分类,并且没有显式的训练过程。本文将介绍k最近邻算法的基本原理和使用方法,并通过一个示例来说明其应用过程。
大盘鸡拌面
2023/10/30
3680
K 近邻算法
鸢尾花Iris Dataset数据集是机器学习领域经典数据集,鸢尾花数据集包含了150条鸢尾花信息,每50条取自三个鸢尾花中之一:Versicolour、Setosa和Virginica。
@小森
2024/03/15
1540
K 近邻算法
Python数据挖掘算法入门与实践
数据挖掘是一个通过对大量数据进行清理和处理,以发现其中隐藏的信息和模式的过程。简单来说,它是从大量数据中提取或“挖掘”知识的过程,也称为知识发现。
算法进阶
2024/02/17
1.1K0
Python数据挖掘算法入门与实践
机器学习之KNN最邻近分类算法[通俗易懂]
KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中最简单的算法之一,其指导思想是”近朱者赤,近墨者黑“,即由你的邻居来推断出你的类别。
全栈程序员站长
2022/08/10
1.3K0
机器学习之KNN最邻近分类算法[通俗易懂]
鸢尾花(Iris)数据集入门
鸢尾花(Iris)数据集是机器学习领域中最经典的数据集之一。它由三种不同品种的鸢尾花的测量数据组成:山鸢尾(setosa)、变色鸢尾(versicolor)和维吉尼亚鸢尾(virginica)。 在这篇文章中,我们将使用Markdown代码格式详细介绍鸢尾花数据集的基本信息以及如何加载和探索这个数据集。
大盘鸡拌面
2023/10/20
2.8K0
K近邻算法实现分类案例
通过上述代码对数据的查验以及数据本身的描述,了解到Iris数据集共有150朵鸢尾数据样本,并且均匀分布在3个不同的亚种;每个数据样本被4个不同的花瓣、花萼的形状特征所描述。
用户3577892
2020/06/11
6950
Python机器学习之旅|手把手带你探索IRIS数据集
大家好,关于数据挖掘或者机器学习的理论我想大家应该都已经了解很多,而数据挖掘的工具例如Pandas、NumPy、Sklearn等在历史文章都有所介绍,因此今天我们将开始第二个案例实战也是使用非常多的IRIS数据集:根据花瓣和花萼的长宽预测鸢尾花的种类。
刘早起
2020/05/12
6210
分类-KNN算法(代码复现和可视化)
K近邻(K Nearest Neighbors,KNN)算法是最简单的分类算法之一,也就是根据现有训练数据判断输入样本是属于哪一个类别。
唔仄lo咚锵
2022/10/04
9360
分类-KNN算法(代码复现和可视化)
深入浅出KNN算法(二) sklearn
上次介绍了KNN的基本原理,以及KNN的几个窍门,这次就来用sklearn实践一下KNN算法。
py3study
2020/01/16
1.9K0
深入浅出KNN算法(二) sklearn
相关推荐
使用knn算法对鸢尾花数据集进行分类(数据挖掘apriori算法)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验