k近邻法原理
k近邻法(k-nearest neighbor)用于分类时,给定一个训练数据集,对于新输入的实例,计算得出与该实例距离最近的k个样本,由k个样本中的大多数决定出该实例属于哪一类。
假设数据集
其中为样本的特征向量,为类别,判断实例x所属的类别y。
我们知道相同类别的样本点总是有着相似的特征值,表现在多维空间中就是有着相近的距离,因此我们可以通过判断与该实例距离相近的样本点大多是哪一类别,就可以将该实例划分到哪一类别中。
在该过程中,涉及到两个关键问题,一个是距离,一个是选取几个样本点进行判断,也即k值得选取。
(1)关于距离:
我们在初高中时学习过平面直角坐标系或者空间直角坐标系时,学习过两点间距离公式,各坐标差值的平方和,在求其算数平方根就是两点间距离,事实上关于距离得度量有着更广泛的定义。
闵可夫斯基距离:
其中x,y表示空间中的两个点,表示某一轴上的值。
当p=1时,
就是曼哈顿距离,指各个坐标距离之和。
当p=2时,
就是我们熟悉的欧氏距离,在二维和三维空间中就是两点间距离公式。
当p→∞时,
就是切比雪夫距离,指各个坐标距离的最大值,这是因为
(2)关于k值的选择
k过大过小都会影响预测的准确率。
当k过小时,预测结果可能会受到噪声的影响,如图:红色和蓝色点分别代表两个不同颜色类别,绿色是待预测的点,如果选择k=1,则会将其划分为红色类别,而事实上属于蓝色类别,由此导致分类错误。
当k过大时,样本点数量较少的类别可能会被忽略掉,如图:红色和蓝色点分别代表两个不同颜色类别,绿色是待预测的点,如果选择k=20,由于红色类别只有8个点,无论绿点在哪里都会将其划分为蓝色类别,而事实上属于红色类别,会导致分类错误。
在选择k值时,可以适当选择几个k值进行预测,然后计算准确率并进行比较,然后选出最合适的k值。
手算示例
我们从鸢尾花数据集中的三个类别各选取十个样本点为示例,选取欧式距离作为度量,k=5,进行手算演示。
数据集:
Setal_length |
Setal_width |
Petal_length |
Petal_width |
class y |
|
0 |
5.1 |
3.5 |
1.4 |
0.2 |
0 |
1 |
4.9 |
3.0 |
1.4 |
0.2 |
0 |
2 |
4.7 |
3.2 |
1.3 |
0.2 |
0 |
3 |
4.6 |
3.1 |
1.5 |
0.2 |
0 |
4 |
5.0 |
3.6 |
1.4 |
0.2 |
0 |
5 |
5.4 |
3.9 |
1.7 |
0.4 |