前言
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算法本身是一个比较简单粗暴的方法,还是能起到初步的分类效果的。
领取专属 10元无门槛券
私享最新 技术干货