k临近算法(k nearest neighbors)

时间:2022-03-05 21:22:01

K-NN算法非常简单。KNN是一种监督式的学习算法,算法的主要目的是根据训练实例和对象的特征值来将对象分类。话不多说,上例子。

假定我们有一些产品的样本,它们的属性值(x1,x2)和分类情况如下:

k临近算法(k nearest neighbors)

现在有一个新品,x1=3,x2=7.怎么用KNN预测这个产品的好坏呢?

k临近算法(k nearest neighbors)

我们首先要找到离对象(x1=6,x2=5)最近的k个邻居。怎么确定它们之间的“距离”呢?我们这里选用类似二维平面坐标距离的计算方法来量化两对象之间的距离。例如对象A(x1=6,x2=5)和对象B(x1=4,x2=3)之间的距离d=(Ax1-Bx1)^2+(Ax2-Bx2)^2.

当然,根据具体应用的不用,“距离”的定义也是不同的,计算方法不用。

假设我们要找到k=8个邻居节点。下图是计算的距离结果和8个最近邻居的标记

k临近算法(k nearest neighbors)

总结KNN算法就是下面五个步骤:

1.决定参数K,也就是最近邻居的个数

2.计算预测样本到所有训练样本的“距离”

3根据计算出的距离,找出“距离”最近的k个邻居

4.收集这k个邻居的分类情况y

5.用这k个邻居的y值“主要成分”作为预测样本的分类


利用上面的算法,一步一步来走一遍刚才那个例子:

k临近算法(k nearest neighbors)


1.决定K值。假设k=3


2.计算到所有训练样本的距离:

k临近算法(k nearest neighbors)

k临近算法(k nearest neighbors)k临近算法(k nearest neighbors)


3.找出k=3个比较的近的邻居(yes表示是三个较近的邻居之一,no则反之):

k临近算法(k nearest neighbors)


收集k=3个邻居的分类情况(bad表示坏,goog表示好):

k临近算法(k nearest neighbors)


5.用邻居的分类的主要成分来确定预测样本的分类:分类情况是2好1坏,那么我们就说预测样本(x1=3,x2=7)是好的。

分类完毕。

Python实现代码请移步http://blog.csdn.net/bdss58/article/details/41689527