python3机器学习经典算法与应用之K近邻算法

python机器学习算法应用

k近邻算法

优点:算法思想简单、应用数学知识少、可以解释机器学习算法使用过程中的很多细节问题、更完整地刻画机器学习应用的流程。很适合入门。

思想:已经知道的数据点分布在数据空间中。如何判断新加入的数据点的类别呢?
首先选定一个k值(根据经验取得),在空间中寻找所有的点中距离新加入的数据点最近的k个点,以这k个数据点其自己的label进行投票(也就是说权衡这几个数据点的label的值,认为label值最多的那个作为新数据点的label)。

相似性-----两个样本在数据空间中的距离进行描述。
k近邻算法可以用来解决监督式机器学习中的分类问题。k近邻算法其实也可以用来解决线性回归问题。

K邻近算法实际应用

首先准备两组数据,分别对应着每个样本的数据和其标签(类别)。然后创建训练集列表(numpy.array):x_train和y_train。
在这里插入图片描述
使用pyplot将两种类别的样本的散点图绘制出来。
在这里插入图片描述
先新加入一个数据点,其数据(特征值)为[6.093607318,2.365731514](见下图),假设k==3,然后可以发现最近的三个点都属于第0类别,所以根据KNN算法的思想,该数据点属于第0类别。在图中用蓝色点标记出来。
在这里插入图片描述

KNN过程

  1. 创建距离列表,记录每一个点到新数据点的距离。
    欧拉距离公式:在每一个维度上两个点的维度值相减平方再加和开根号。在应用中则是样本a的第一个特征值减去样本b的第一个特征值的平方加上样本a的第二个特征值减去样本b的第二个特征值的平方,以此类推,一直加到样本a的第n个特征值减去样本b的第n个特征值的平方再开根号。
    在这里插入图片描述
    在这里插入图片描述
  2. 指定K值,然后获取前K个距离新数据点最近的样本点。(可以使用argsort获取前K个值的索引)
  3. 获取前K个距离新数据点最近的样本点的标签值。然后进行投票,也就是统计每一类的样本个数。
  4. 最后将样本数最多的类别的标签最晚最终的预测结果。

代码实现
首先创建distance列表,然后计算距离。上一段的代码可以使用下一段的一条语句替代。
在这里插入图片描述
然后使用numpy.argsort()方法统计所有距离的大小并得出distance从小到大排序时元素在原来的数组(distance)中的索引。
在这里插入图片描述
设置K值,取前K个距离新数据点最近的样本点的标签。然后我们要将这些标签进行计数,使用collections模块的Counter()函数进行统计。再使用most_common()方法查询出现次数最多的标签。这个标签就是我们最终的预测值
topK_y表示前K个距离新数据点最近的样本点的标签值。Counter()返回的数据结构类似于字典(键值对形式,键表示数据,值表示出现的次数)。括号内的参数表示返回前m个出现次数最多的数据,传递的参数为1,表示只返回一个出现频率最多的。后面再加一个索引[0]表示获取键值对的键,也就是标签值。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值