C++实现的简单k近邻算法(K-Nearest-Neighbour,K-NN)

本文介绍了如何使用C++实现K近邻算法(K-Nearest Neighbor, K-NN)。通过理解算法的基本原理,结合C++编程技巧,可以构建一个基本的K-NN模型用于分类和预测。" 103027038,2391601,Qt设置LineEdit为密文输入,"['Qt开发', 'GUI设计', '界面交互']
摘要由CSDN通过智能技术生成

C++实现的简单的K近邻算法(K-Nearest Neighbor,K-NN)

前一段时间学习了K近邻算法,对K近邻算法有了一个初步的了解,也存在一定的问题,下面我来简单介绍一下K近邻算法。本博客将从以下几个方面开始介绍K近邻算法:
1、K近邻算法的介绍
2、K近邻算法的模型及其三要素
3、C++实现的简单KNN算法
4、KNN算法的优缺点
5、遇到的问题

一、K近邻算法的介绍
K近邻算法(K-Nearest Neighbour,K-NN)是一种基本分类与回归方法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的K个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
K近邻算法简单,直观。给定一个训练数据集,对于新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数某个类,就把该输入实例归入这个类。K近邻法没有显示的学习过程。
1.1 算法(K近邻法)


1.2 KNN算法的实现步骤:
step.1---初始化距离为最大值
step.2---计算未知样本和每个训练样本的距离dist
step.3---得到目前K个最临近样本中的最大距离maxdist
step.4---如果dist小于maxdist,则将该训练样本作为K-最近邻样本
step.5---重复步骤2、3、4,直到未知样本和所有训练样本的距离都算完
step.6---统计K个最近邻样本中每个类别出现的次数
step.7---选择出现频率最大的类别作为未知样本的类别

空洞的描述不易理解,生动的例子会方便我们进行理解,下面将举例帮助我们理解。
 如图所示,有两类不同的数据样本,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。也就是说,现在,我们不知道中间那个绿色的数据是从属于哪一个类(蓝色小正方形or红色小三角形),那么这个数据到底是哪个类呢?
1、如果K=3,绿色圆点的最近的三个邻居是2个红色小三角形和1个蓝色小正方形,那么就可以判定这个绿色的待分类的圆形点属于红色小三角形类。
2、如果K=5,绿色圆点的最近的五个邻居是2个红色小三角形和3个蓝色小正方形,那么就可以判定这个绿色的待分类的圆形点属于蓝色小正方形类。
我们看到,当无法判定当前待分类点是从属于已知分类中的哪一类时,我们可以依据统计学的理论看它所处的位置特征,衡量它周围邻居的权重,而把它归为(或分配)到权重更大的那一类。这就是K近邻算法的核心思想。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值