K近邻(k-NearestNeighbor)
思想:物以类聚
定义:K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
首先介绍L1范数和L2范数:
假设有2个点X,Y。在二维空间中坐标为:
上图所衡量的距离可以用数学表达式写成:
,这就是所谓的欧式距离,也就是L2范数
如果不用L2范数呢?有没有其他可以代替的呢?
可以使用L1范数
如上图所示:红点属于类别A,蓝点属于类别B。此时,绿点属于什么类别呢?
如果以距离绿点距离位R1来计算相邻的点,根据投票原理,少数服从多数,那么绿点属于蓝点所在的类别B;
如果以距离绿点距离位R2来计算相邻的点,根据投票原理,少数服从多数,那么绿点属于红点所在的类别A;
改用L1范数效果如下:
当设置L1范数距离为D1时,根据投票原理,少数服从多数,那么绿点属于蓝点所在的类别B;
当设置L1范数距离为D2时,根据投票原理,少数服从多数,那么绿点属于蓝点所在的类别B;
KNN中的K指的是K个近邻点,在近邻点中选择个数多的一类。根据上图可显示出,一半K值的变化很容易影响结果,一半可选择1,3,5,7近邻点。
而何为近,近是一种距离的衡量。可以使用L2范数(一般),也可以使用L1范数(根据特殊情况分析)。
具体的范数通式为:
p=1,L1范数
p=2,L2范数
L0(准)范数:,不满足齐次性,表示非零元素的个数
L1范数:,表示各个坐标绝对值之和
L2范数:(Euclidean范数或Frobenius范数):,表示线段间的长度,表示向量的模
范数:
,表示最大值
范数:
欢迎加入数学与机器学习讨论群,生动形象讲解机器学习原理~