1.原理
通过计算每个训练数据到待分类元组的距离,取和待分类元组距离最近的K个训练数据,K个数据中哪个类别的训练数据占多数,则待分类元组就属于哪个类别。
训练样本用n维数值属性描述。每个样本代表n维空间的一个点。所有的训练样本都放在n维模式空间中。给定一个样本,k-最临近分类法搜索模式空间,找出最接近未知样本的k个训练样本。

2.需要的信息
- 训练集
- 距离计算值
- 要获取的最邻近的邻居的数目k
-
计算两点之间的距离
- 例如可采用欧几里得距离:d = sqrt((x1-x2)^2+(y1-y2)^2+...+(yn-yn)^2)
-
从最近邻居列表中决定分类的结果
-
方法一:选出k个最近的邻居中的多数票的类标号
- 方法二:可以根据距离为每一个投票增加权重 Weight factor ,w=1/d2
-
-
k值的选取
如果k过于小,那么将会对数据中存在的噪声过于敏感;
如果k过大,邻居中可能包含其他类的点;
一个经验的取值法则为k≤ ,q为训练元组的数目。商业算法通常以10作为默认值。
3.一般性描述
算法: K-近邻分类算法 输入: 训练数据T;近邻数目K;待分类的元组t。 输出: 输出类别c。 (1)N=; // 定义近邻集 (2)FOR each d ∈T DO BEGIN (3) IF |N|≤K THEN // N的规模保持在k (4) N=N∪{d}; (5) ELSE (6) IF u∈N such that sim(t,u)<sim(t,d) THEN BEGIN /*如果N中存在数据u,使得t与u的相似度小于t与d的相似度(没有等于的情况保证了u!=d),即:新加入的d可以在N除去u之后加入到N中,d为N的新成员*/ (7) N=N-{u}; // 除去u (8) N=N∪{d}; // 加入d (9) END (10)END (11)c=class to which the most u∈N.
4.KNN的优缺点
优点:原理简单,实现起来比较方便。支持增量学习。能对超多边形的复杂决策空间建模。
缺点:计算开销大,需要有效的存储技术和并行硬件的支撑。