kNN优缺点
从上节的实验中我们可以发现:
优点:简单,易于理解,易于实现,对异常值不敏感,适合分类问题,尤其合适多分类问题(对象具有多个类别标签)
缺点:懒惰算法,时间和空间复杂度高
k值的选取
k对分类有着很大的影响,k太小意味着模型变的复杂,容易发生过拟合,易受异常点的影响。k值较大,易受其他类别的数据干扰,影响分类效果。
所以k值一般选取一个较小的值(经验值,小于类别的平方根),或通过交叉验证法进行选取。
相似性的度量
1.常用的Lp距离
两个n维变量a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:
其中p是一个变参数。
当p=1时,就是曼哈顿距离
当p=2时,就是欧氏距离
当p→∞时,就是切比雪夫距离 2.马氏距离
S位数据的协方差矩阵。
马氏距离不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准数据和中心化数据计算出。排除了变量之间的相关性干扰。3.余弦相似性
夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。4.皮尔逊系数
决策规则
根据问题的不同,分类问题有投票法,加权投票法。回归问题为平均法。
kNN的实现kd树
kd树是一种对k维空间中的实例点进行存储以便对其进行快速搜索的树形数据结构,是平衡二叉树。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间进行分割,构成一系列的k维超矩形区域。是一种递归的构造算法。
搜索过程中,通过二叉搜索,顺着搜索路径找到最近的近似点。为了找到真正的最邻近,需要进行回溯,查询点圆域内,找到距离距离最近的点。