算法原理
KNN即K-Nearest Neighbor,采用测量不同特征值之间的距离方法进行分类,其主要思想是,如果一个样本在特征空间中的k个最近邻的样本中的大多数都属于某一类别,则该样本也属于这个类别,k通常是不大于20的整数。算法描述
1) 初始化距离为最大值
2) 计算未知样本和每个训练样本的距离dist
3) 得到目前K个最近邻样本中的最大距离maxdist
4) 如果dist小于maxdist,则将该训练样本作为K-最近邻样本
5) 重复步骤2、3、4,直到未知样本和所有训练样本的距离都算完
6) 统计K个最近邻样本中每个类别出现的次数
7) 选择出现频率最大的类别作为未知样本的预测类别特点
1) 非参数统计方法:不需要引入参数
2) K的选择:
K = 1时,将待分类样本划入与其最接近的样本的类。
K = |X|时,仅根据训练样本进行频率统计,将待分类样本划入最多的类。
K需要合理选择,太小容易受干扰,太大增加计算复杂性。
3) 算法的复杂度:维度灾难,当维数增加时,所需的训练样本数急剧增加,一般采用降维处理。缺陷
1) 需要存储全部的训练样本
2) 需要进行繁重的距离计算改进
1) 分组快速搜索近邻法:将样本集按近邻关系分解成组,给出每组质心的位置,以质心作为代表点,和未知样本计算距离,选出距离最近的一个或若干个组,再在组的范围内应用一般的KNN算法。由于并不是将为未知样本与所有样本计算距离,故该改进算法可以减少计算量,但并不能减少存储量。2) 压缩近邻算法:利用现在的样本集,采取一定的算法产生一个新的样本集,该样本集拥有比原样本集少的多的样本数量,但仍然保持有对未知样本进行分类的能力。基本思路:定义两个存储器,一个用来存放生成的样本集,称为output样本集,另一个用来存放原来的样本集,称为original样本集。
a) 初始化:output样本集为空寂,原样本集存入original样本集,从original样本集中任意选择一个样本移动到output样本集中
b) 在original样本集中选择第i个样本,并使用output样本集中的样本对其进行最近邻算法分类,若分类错误,则将样本移动到output样本集中,若分类正确,不做任何处理。
c) 重复步骤b,直至遍历完original样本集中的所有样本,output样本集即为压缩后的样本集。
此方法也能减少计算量,但仍无法减少存储量。
该篇为KNN算法的理论知识。