【数据挖掘】KNN算法详解及对iris数据集分类实战(超详细 附源码)

简介: 【数据挖掘】KNN算法详解及对iris数据集分类实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留言私信~~~

K近邻(k-Nearest Neighbor Classification,KNN)算法是机器学习算法中最基础、最简单的算法之一,属于惰性学习法.惰性学习法和其他学习方法的不同之处在于它并不急于获得测试对象之前构造的分类模型,当接收一个训练集时,惰性学习法只是简单的存储或者稍微处理每个训练样本,直到测试对象出现才开始构造分类器,惰性学习法的一个重要优点是它们不在整个对象空间上一次性的估计目标函数,而是针对每个待分类对象做出不同的估计,KNN算法通过测量不同特征值之间的距离进行发呢类,既能用于分类也能用于回归

算法原理

KNN算法基于类比学习,即通过将给定的检验元组与和它相似的元组进行比较来学习。训练元组用n个属性描述,每个元组代表n维空间的一个点。所有的训练元组都存放在n维模式空间中

当给定一个未知元组时,KNN搜索模式空间,根据距离函数计算待分类样本X和每个训练样本的距离(作为相似度),选择与待分类样本距离最小的K个样本作为X的K个最近邻,最后以X的K个最近邻中的大多数样本所属的类别作为X的类别

如图7-4所示,有方块和三角形两类数据,它们分布在二维特征空间中。假设有一个新数据(圆点)需要预测其所属的类别,根据“物以类聚”,可以找到离圆点最近的几个点,以它们中的大多数点的类别决定新数据所属的类别。如果k = 3,由于圆点近邻的3个样本中,三角形占比2/3,则认为新数据属于三角形类别。同理,k = 5,则新数据属于正方形类别

如何度量样本之间的距离(或相似度)是KNN算法的关键步骤之一

常见的数值属性的相似度度量方法包括:

闵可夫斯基距离(当参数p = 2时为欧几里得距离,参数p = 1时为曼哈顿距离)

余弦相似度、皮尔逊相似系数、汉明距离、杰卡德相似系数等

在计算距离之前,需要把每个属性的值规范化

对于算法中的K值,一般通过实验确定

K-最近邻算法是一种非参数模型

KNN算法描述如下

KNN分类iris实战

结果如下图所示

部分代码如下

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data[:,:2]
Y = iris.target
print(iris.feature_names)
cmap_light = ListedColormap(['#FFAAAA','#AAFFAA','#AAAAFF'])
cmap_bold = ListedColormap(['#FF0000','#00FF00','#0000FF'])
clf = KNeighborsClassifier(n_neighbors = 10,weights = 'uniform')
clf.fit(X,Y)
#画出决策边界
x_min,x_max = X[:,0].min()-1,X[:,0].max()+1
y_min,y_max = X[:,1].min()-1,X[:,1].max()+1
xx,yy = np.meshgrid(np.arange(x_min,x_max,0.02),
np.arange(y_min,y_max,0.02))
Z 测结果图
plt.scatter(X[:,0],X[:,1],c = Y,cmap = cmap_bold)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title('3_Class(k = 10,weights = uniform)')
plt.show()

下图是对KNN算法的特点总结

KNN算法优点如下

1.算法思路较为简单,易于实现;

2.当有新样本要加入训练集中时,无需重新训练(即重新训练的代价低);

3.计算时间和空间线性于训练集的规模,对某些问题而言这是可行的

缺点如下

缺点:

1.分类速度慢。

2.各属性的权重相同,影响准确率。

3.样本库容量依赖性较强.

4.K值不好确定

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
4月前
|
算法 数据可视化 测试技术
HNSW算法实战:用分层图索引替换k-NN暴力搜索
HNSW是一种高效向量检索算法,通过分层图结构实现近似最近邻的对数时间搜索,显著降低查询延迟。相比暴力搜索,它在保持高召回率的同时,将性能提升数十倍,广泛应用于大规模RAG系统。
424 10
HNSW算法实战:用分层图索引替换k-NN暴力搜索
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
4月前
|
机器学习/深度学习 缓存 算法
微店关键词搜索接口核心突破:动态权重算法与语义引擎的实战落地
本文详解微店搜索接口从基础匹配到智能推荐的技术进阶路径,涵盖动态权重、语义理解与行为闭环三大创新,助力商家提升搜索转化率、商品曝光与用户留存,实现技术驱动的业绩增长。
|
5月前
|
机器学习/深度学习 资源调度 算法
遗传算法模型深度解析与实战应用
摘要 遗传算法(GA)作为一种受生物进化启发的优化算法,在复杂问题求解中展现出独特优势。本文系统介绍了GA的核心理论、实现细节和应用经验。算法通过模拟自然选择机制,利用选择、交叉、变异三大操作在解空间中进行全局搜索。与梯度下降等传统方法相比,GA不依赖目标函数的连续性或可微性,特别适合处理离散优化、多目标优化等复杂问题。文中详细阐述了染色体编码、适应度函数设计、遗传操作实现等关键技术,并提供了Python代码实现示例。实践表明,GA的成功应用关键在于平衡探索与开发,通过精心调参维持种群多样性同时确保收敛效率
|
4月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
5月前
|
机器学习/深度学习 边缘计算 人工智能
粒子群算法模型深度解析与实战应用
蒋星熠Jaxonic是一位深耕智能优化算法领域多年的技术探索者,专注于粒子群优化(PSO)算法的研究与应用。他深入剖析了PSO的数学模型、核心公式及实现方法,并通过大量实践验证了其在神经网络优化、工程设计等复杂问题上的卓越性能。本文全面展示了PSO的理论基础、改进策略与前沿发展方向,为读者提供了一份详尽的技术指南。
粒子群算法模型深度解析与实战应用
|
4月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
462 0
|
4月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
313 2
|
5月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
295 3