k近邻近邻算法:
多数表决规则等价于经验风险最小化:
损失函数最小化:一训练数据为基础,通过此类分类规则计算得到
一块区域,有k个训练数据,1,2,3个类别。1>2>3
当此区域判为1,损失函数等于2,3个数和
当此区域判为2,损失函数等于1,3个数和
当此区域判为3,损失函数为1,2个数和
选取损失函数最小的,即个数最多的类别。作为此区域类别。所以此区域判别为1.
Kd树:
第一步:找到包含点S的叶结点D,以点D作为"近似最近邻"。

从根结点出发,递归向下访问kd树。若目标点S当前维的坐标小于切分点的坐标,则移动到下子结点,否则移动到上子结点。直到子结点为叶结点时结束,此时的叶结点就暂定为"当前最近邻",也可称近似最近邻。

真正最近邻一定在以点S为中心,通过点D的圆的内部。这个圆在更高维空间里叫做"超球体"。

第二步:回退到结点D的父结点B,这一步有两个检查。

1.计算父结点B到S的距离,如果更近(即点B在圆内),则将点B更新为当前最近邻。

2.检查父结点的另一个子结点中是否有实例点在圆内。具体方法是,先检查另一个子结点对应的超矩形区域是否与上面的那个圆(即以S为中心,通过点D的圆)相交:如果相交,就有可能存在比当前最近点更近的点;如果不相交,继续想上回退。

第三步:直到回退到根结点时,进行第二步的判断,然后就搜索结束了。此时的"当前最近邻"即为S的最近邻。最后算得点E为S的最近邻。

时间复杂度为。kd树更适合于训练实例数远大于空间维数时的k近邻搜索。当空间维数接近训练实例数时,它的效率会迅速下降,几乎接近线性扫描。

kd树的每轮中本次的切分域的选择将计算待切分空间内的点此轮未被切分维度上的方差,找方差最大的维度作为此次的切分域。
一轮是指的必须依照k个维度

详细流程例子:

缺点和改进:
1、优点

简单,易于理解,易于实现,无需参数估计,无需训练; 
 对异常值不敏感(个别噪音数据对结果的影响不是很大); 
适合对稀有事件进行分类; 
适合于多分类问题(multi-modal,对象具有多个类别标签),KNN要比SVM表现要好;

2、缺点

对测试样本分类时的计算量大,内存开销大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本; 
可解释性差,无法告诉你哪个变量更重要,无法给出决策树那样的规则; 
K值的选择:最大的缺点是当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进; 
KNN是一种消极学习方法、懒惰算法。

————————————————