一、KNN算法简介
邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。
kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。
二、算法过程
1.读取数据集
2.处理数据集数据 清洗,采用留出法hold-out拆分数据集:训练集、测试集
3.实现KNN算法类:
1)遍历训练数据集,离差平方和计算各点之间的距离
2)对各点的距离数组进行排序,根据输入的k值取对应的k个点
3)k个点中,统计每个点出现的次数,权重为距离的导数,得到大的值,该值的索引就是我们计算出的判定类别
三、代码实现及数据分析
import numpy as np import pandas as pd # 读取鸢尾花数据集,header参数来指定标题的行。默认为0。如果没有标题,则使用None。 data = pd.read_csv("你的目录/Iris.csv",header=0) # 显示前n行记录。默认n的值为5。 #data.head() # 显示末尾的n行记录。默认n的值为5。 #data.tail() # 随机抽取样本。默认抽取一条,我们可以通过参数进行指定抽取样本的数量。 # data.sample(10) # 将类别文本映射成为数值类型 data["Species"] = data["Species"].map({"Iris-virginica": 0, "Iris-setosa": 1, "Iris-versicolor": 2}) # 删除不需要的Id列。 data.drop("Id", axis=1, inplace=True ) data.drop_duplicates(inplace=True) ## 查看各个类别的鸢尾花具有多少条记录。 data["Species"].value_counts()