3.1K近邻法
一、直观理解
上图绿色的点是新的实例,
若k=3,离绿色实心圆最近的3个实例 是 在实线圆圈中,该圈中,红色三角形占多,故认为绿色实心圆应属于红色三角形类别。若k=5 ,离绿色实心圆最近的5个实例 是 在虚线圆圈中,该圈中,蓝色正方形占多,故认为绿色实心圆应属于蓝色正方形类别。
二、算法
三、误差率(选学)
a为x的真实类别,b为xi的真实类别。
3.2K近邻法---三要素
一、模型
二、三要素
距离向量
K-值的选择
分类决策规则
3.3K近邻法---构造kd树
一般情况下的K近邻法,对于输入一个未知的点x,要预测x所属的类别,
可以计算出已知训练集中的所有点 与点x的距离,找出距离最近的k个,再按照决策规则,决定x的预测类别。
此时,若训练集的样本容量N过大的话,那么距离的计算量就会非常 大;
另外,若训练集中的实例点,它所包含的特征非常多(即几维的向量),那么,每次计算一个距离的计算量就非常大。
为解决该问题,实现一个快速搜索的方法,就有了kd树
一、什么kd树
二维情况类似如上,每个结点对应一个矩形区域
上面是三维的情况。
二、构造kd树
对选选取哪一个特征作为坐标轴,其实是可以任意的,即任意一个特征都可作为坐标轴;
其实也可,计算每一个特征上的方差来进行选择,例如上图中,已有N个实例点,每个实例点都有k个特征,可以计算每一个特征上的N个值(对于某一个特征,N个实例就有N个对应位置的特征)得到的方差, 那么就能得到k个方差,选择其中最大的方差所对应的序号。
三、例题解说
训练集中有6个实例,对于每个实例中的第一个特征进行排序,如下,由于是偶数个,中位数其实选5或7都行,这里选择了7,而第一个特征为7的实例点是(7,2).
如何以实例点(7,2)对整个区域切分:看上图,横轴对应第一个特征,,根据(7,2)实例点所在位置,垂直于特征
坐标轴的地方画垂线。(这样理解,这里把横轴
区域划分为两部分了,纵轴仍是一整块)。
(7,2)将作为深度为0的根结点, 其左边的都是 特征 < 7 的,作为根的左孩子结点,
右边都是 特征 > 7 的,作为根的右孩子结点。
对第一个特征划分完之后,可根据 第一个特征+1 = 2, 也就是选择第二个特征 作为坐标轴,
进行再次划分。
划分完后,
再再次划分:
刚以第二个特征进行划分, 那么 2 + 1 > 实际维数2,故要轮第二遍了,
即再回到第一个特征,以第一个特征为坐标轴 进行划分。
3.4搜索kd树
一、最近邻搜索
“当前最近点”相当于之前算法讲到 的初始值,
寻找“当前最近点”:从树根不停寻找下一级的叶子结点,最后找到 离 我们的 目标点 最近的一个叶子节点 作为 “当前最近点” 。
(寻找是 从 根 --》到 叶子,寻找到 当前最近点, 接着便能由 当前最近点 进行回溯)
(回溯:从当前最近节点出发, 一直到 父辈、祖辈、甚至根节点)
回溯过程中,若发现:某个子节点与目标点 之间的距离 比 “当前最近点”与目标点的距离 更小,则更新“当前最近点” 为 该子节点。 不停得进行更新,直到回到树的根部, 就完成了整个迭代过程。
这时,所确定的“当前最近点” 就是 选择的目标点 的最近邻点了。
二、例题解说
首先,根节点(7,2),目标点(2.1,3.1) ,目标点的2.1<7, 所有目标点在根节点的 左子树,
往根的左子区域找, 左子区域的根是(5,4),以(5,4)进行一个再划分,而目标点(2.1,3.1)中
3.1 < 4, 所以就继续往(5,4)的左子区域继续找。
该左子区域的根是(2,3),已经不能继续往下了,
故将“当前最近点”设为(2,3), 寻找过程结束, 接着进行 回溯。
以目标点x=(2.1,3.1)为圆心,"当前最近点"=(2,3) 与目标点x 之间的距离 为半径,画一个圆,
(二维的是圆,三维是球,更高的是....),
回溯过程就是 从“当前最近点”回到父辈、祖辈、一直到根,看 这个过程中,是否有比 "当前最近点" 离目标点x 更近的点。
看绘制的圆, 与“当前最近点”的父节点(5,4)划分的超平面 是没有交集的, 说明, 不可能在(5,4)的右子区域 找到 更近的点了,
从父辈 可以 回到 根(7,2), (7,2)用来划分 整个区域的超平面,也和这个圆没有交集,所以不会有最近点出现在由 根节点 确定的右子区域里,
完成整个过程后,