python实现knn分类_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算法本身是一个比较简单粗暴的方法,还是能起到初步的分类效果的。

你可能感兴趣的:(python实现knn分类)