最邻近规则分类(KNN)算法的Python实现

目录:

  1. 什么是KNN?
  2. KNN算法介绍
  3. KNN算法的优缺点(改进)
  4. KNN算法的Python实现

内容:

1.什么是KNN?

         邻近算法,或者说K最近邻(kNN,K-Nearest Neighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。

2.KNN算法介绍

        KNN算法的核心思想是:如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的标记。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少量的相邻样本有关。由于kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,kNN方法较其他方法更为适合。

算法步骤如下:

1)选取参数K,K代表要选取几个已有样本与未知样本进行比较。

2)计算未知样本与已知样本的距离,取K个距离最近的样本。

距离计算方法:未知样本与已知样本每个维度的特征差值的平方和

KNN-1

还有其他的计算方法:余弦值,相关度,曼哈顿距离

3)根据选出的K个样本,依照少数服从多数原则,确定未知样本的标记。

   下面来说一个KNN算法的实例,方便大家更好的理解KNN算法:

KNN-2 

        如图,红绿蓝三色为已知样本,黑点为位置样本,要判断它属于红绿蓝哪一类。我们计算黑点到其他每个点的距离,取K=5,找出距离最近的五个点,发现红绿蓝分别有3,1,1个,根据少数服从多数原则,黑点属于红色。

        这个例子是属于二维,实际应用中,特征值数量可能会更多。

3.KNN算法的优缺点

优点:

1.简单,易于理解,易于实现,无需估计参数,无需训练。

2.适合对稀有事件(类别之间区分度大)进行分类。

3.特别适合于多分类问题(对象具有多个类别标记),KNN比SVM的表现要好。

缺点:

1.每个类别样本数量需要平衡,如果不平衡会导致误差。

2.计算量大,需要计算位置样本到每个训练样本的距离。

3.可理解性差,无法给出类似决策树的规则。

改进:

可以根据距离d赋予权重,如:1/d等,用来减小误差。

4.KNN算法的Python实现

   代码已经共享到baidu云盘。其中KnnImplementation.py为核心代码,适用于多维度特征值,SkLearnExample.py是通过SKlearn实现的KNN算法例子。欢迎下载(代码已打注释)哪里没写清楚的可以告诉我(QQ:1256541288),我会尽快改善。

——Snake

snake

作者: snake

我们需要为这个社会做一点贡献,失去了才懂得去珍惜。

发表评论

电子邮件地址不会被公开。 必填项已用*标注