1 基本概念
-
Cover和Hart在1968年提出了最初的临近算法
-
分类算法classfication
-
输入基于实例的学习instance-based learning ,懒惰学习lazy learning
2 例子:
对最后一个未知电影类型进行归类
对上图实例进行转化为特征向量
类比现实生活中的场景(分豆子)
3 算法描述
3.1 步骤
- 为了判断未知实例的类别,以所有已知类别的实例作为参照
- 选择参数K
- 计算未知实例与已知实例的举例
- 选择最近K个已知实例
- 根据少数服从多少原则,让未知实例归类为K个最邻近样本中最多类别
3.2 细节
关于K距离的衡量方法:
Euclidean Distance定义(可以扩展为N维)
其他距离衡量:余弦值cos、正弦值sin、曼哈顿距离
3.3 举例
以下图为例,第一个小圈是K=4,第二个圈是K=9,你会发现结果其实不一样
4 算法优缺点
4.1 算法优点
简单
易于理解
容易实现
通过对K的选择可具备丢噪声数据的健壮性
4.2 算法的缺点
需要大量的空间来存储所有实例
算法复杂度高,需要比较与所有已知实例与要分类的实例
当样本分布不平衡时,比如某一类样本过大占主导时,新的未知实例将容易被归类为这个主导样本,比如Y明显是红色,单采用KNN后会被分为蓝色。
5 改进版本
考虑距离远近,加上权重,比如近的情况下权重更大,距离的倒数
下面是代码实际解读(待更新详细解释)