欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

深入理解KNN算法及其实现 - 从理论到Python实战(第二部分): k邻近模型详解

最编程 2024-02-08 22:32:30
...

k近邻法使用的模型实际上对应于对特征空间的划分。模型主要由三个基本要素----距离度量,k值的选择和分类决策规则决定。

2.1 距离度量

特征空间中两个实例点的距离是两个实例点相似程度的反应的反应。使用的是欧式距离(即坐标轴中两点的距离),但也可以是其他距离,如更一般的Lp距离(Lpdistance)或Minkowski (Minkowski distance)

img

img

img

这里给出numpy的实现方法,便于下文代码理解

import numpy as np
# 求范数
dist1=np.lianlg.norm(x,ord=None,axis=None,keepdims=False)

①x: 表示矩阵(也可以是一维)

②ord:范数类型

img

矩阵的范数:

ord=1:列和的最大值

ord=2:计算A*A的转置矩阵的最大特征值的开平方 ord=∞:行和的最大值

ord=None:默认情况下,是求整体的矩阵元素平方和,再开根号。

③axis:处理类型

axis=1表示按行向量处理,求多个行向量的范数

axis=0表示按列向量处理,求多个列向量的范数

axis=None表示矩阵范数。

④keepding:是否保持矩阵的二维特性

True表示保持矩阵的二维特性,False相反

2.2 k值的选择

k值的选择会对k近邻法的产生重大影响.

如果选择较小的k值,就相当于用较小的领域中的训练实例进行预测,“学习”的近似误差会减小,只有与输入实例较近的(相似的)训练实例才会对预测结果起作用.但缺点是“学习”的估计误差会增大。预测结果会对近邻的实例点非常敏感.如果邻近点恰巧是噪声,预测就会出错.换句话说,k值的减小就意味着整体模型变得复杂,容易发生过拟合.

如果选择较大的k值,就相当于用较大领域中的训练实例进行预测,其优点是可以减小学习的估计误差,但缺点是学习的近似误差会增大,这时与输入实例较远的(不相似的)训练实例也会对预测起作用,使预测发生错误,k值的增大就意味着整体模型变得简单.

若果k=N,那么无论输入实例是什么,都将简单地预测它属于在训练实例中最多的类,这时,模型过于简单,完全忽略训练实例中的大量有用信息,是不可取的.

在应用中,k值一般取一个较小的数值,通常采用交叉验证法来选取最优的k的值.

注: 近似误差:可以理解为对现有训练集的训练误差。 估计误差:可以理解为对测试集的测试误差。 近似误差关注训练集,如果近似误差小了会出现过拟合的现象,对现有的训练集能有很好的预测,但是对未知的测试样本将会出现较大偏差的预测。模型本身不是最接近最佳模型。 估计误差关注测试集,估计误差小了说明对未知数据的预测能力好。模型本身最接近最佳模型。

2.3 分类决策规则

k近邻法中的分类决策规则往往是多数表决,既由输入实例的k个邻近的训练实例中的多数决定输入实例的类.

img