原生python实现KNN算法
KNN算法的核心思想是
如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
算法设计
1)首先需要读取文件中的数据,通过生成随机数随机获取文件中的数据组成测试集,剩下的数据当做训练集
2)计算测试机和训练集之间的欧几里得距离(这里我并没有开根号,因为我认为开根号不影响两个数据集的对比,反而多了步运算)
3)取得与测试集距离最近的k个训练样本集合,预测这个样本所属的类别
4)计算并输出测试成功率
源代码
1)引入需要的包,打开文件获取数据,通过生成随机数在文件中获取数据组成测试集(这里只用了10个数据做测试集),剩下的数据自动成为训练集
数据均在iris.csv中,测试集名为testSet,训练集名为trainingSet
import numpy as np
import pandas as pd
import operator
#得到鸢尾花的数据
def getExcel():
#先打开文件再读取能避免路径或文件名出现中文名的错误
f = open('iris.csv')
iris=pd.rea