kNN优缺点
从上节的实验中我们可以发现:
优点:简单,易于理解,易于实现,对异常值不敏感,适合分类问题,尤其合适多分类问题(对象具有多个类别标签)
缺点:懒惰算法,时间和空间复杂度高

k值的选取
k对分类有着很大的影响,k太小意味着模型变的复杂,容易发生过拟合,易受异常点的影响。k值较大,易受其他类别的数据干扰,影响分类效果。
所以k值一般选取一个较小的值(经验值,小于类别的平方根),或通过交叉验证法进行选取。

相似性的度量

1.常用的Lp距离

两个n维变量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:

马斯京根法python 马斯京根法中的k值_搜索


其中p是一个变参数。

当p=1时,就是曼哈顿距离

当p=2时,就是欧氏距离

当p→∞时,就是切比雪夫距离 2.马氏距离

马斯京根法python 马斯京根法中的k值_数据_02


S位数据的协方差矩阵。

马氏距离不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准数据和中心化数据计算出。排除了变量之间的相关性干扰。3.余弦相似性

马斯京根法python 马斯京根法中的k值_数据_03


夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。4.皮尔逊系数

马斯京根法python 马斯京根法中的k值_搜索_04

决策规则
根据问题的不同,分类问题有投票法,加权投票法。回归问题为平均法。

kNN的实现kd树
kd树是一种对k维空间中的实例点进行存储以便对其进行快速搜索的树形数据结构,是平衡二叉树。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间进行分割,构成一系列的k维超矩形区域。是一种递归的构造算法。
搜索过程中,通过二叉搜索,顺着搜索路径找到最近的近似点。为了找到真正的最邻近,需要进行回溯,查询点圆域内,找到距离距离最近的点。