首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

KNN分类算法的python实现

前言

K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:在特征空间中,如果一个样本附近的k个最近(即特征空间中最邻近)样本的大多数属于某一个类别,则该样本也属于这个类别。。

一、KNN的基本思路

所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例, 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。并不是很复杂,十分易于理解。主要的算法思路也就分为3步。

从测试集中选择一个样本,分别计算该样本和训练集中各样本的距离(本文选择欧氏距离)。

对选取的测试集样本与各训练集样本的距离记录排序,找到距离最小的k个距离。以距离平方的倒数为权重,对这k个样本的标签进行加权投票,得到该测试集样本的标签。

循环对测试集样本进行上述两步操作。

二、代码实现

程序部分主要有5个部分:

read_xslx(xslx_path)   #读取excel文件

standardization(v,mu,sigma)  #对一个数据规范化

standardize(data)  #对数据集规范化

calDistance(testingrow, trainingrow)  #计算样本间距离

KNN(trainingData, testingData, k)  #KNN算法部分

分类结果

需要注意,KNN算法中K的选择对算法的分类效果有着明显影响。

选择K=4时,生成的混淆矩阵:

[[46 0 17]

[ 1 30 2]

[22 1 81]]

可视化结果如下:

如果改变K的取值,混淆矩阵会明显改变,如下所示:

k=3:

k=5:

k=6:

k=8:

k=9:

总结

本文利用KNN算法所得分类结果并不是很佳,无法很准确地分辨“0”类和“2”类,如果选择其他的度量方式来获取样本间距离,或是采用其他对数据的标准化方法可能可以有所改善。但KNN算法本身是一个比较简单粗暴的方法,还是能起到初步的分类效果的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201121A00DPL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券