1 k k k 近邻算法
-
k k k近邻法(k-nearest neighbor, k-NN) 是一种基本的分类与回归方法,这里只讨论分类问题中的k-NN。
-
k k k近邻法的三个基本要素: k k k值的选择、距离度量、分类决策规则。
-
k k k近邻法没有显式的学习过程,实际上利用训练集对特征空间进行划分,并作为其分类的"模型"。
-
k k k近邻算法
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x N , y N ) } T=\{(x_{1},y_{1}),(x_{2},y_{2}),...(x_{N},y_{N})\} T={(x1,y1),(x2,y2),...(xN,yN)},其中 x i ∈ χ = R n x_i\in\chi=R^n xi∈χ=Rn为实例的特征向量, y i ∈ Y = { c 1 , c 2 , . . . , c K } y_i\in\mathcal{Y}=\{c_1,c_2,...,c_K\} yi∈Y={c1,c2,...,cK}为实例的类别, i = 1 , 2 , . . , N i=1,2,..,N i=1,2,..,N; x x x 为实例特征向量。
输出:实例 x x x 所属的类 y y y。
(1)根据给定的距离度量, 在训练集 T T T中找出与 x x x 最邻近的 k k k个点,涵盖这 k k k个点的 x x x的邻域记作 N k ( x ) N_k(x) Nk(x);
(2)在 N k ( x ) N_k(x) Nk(x)中根据分类决策规则(如多数表决) x x x 所属的类 y y y: y = arg m a x c j ∑ x i ∈ N k ( x ) I ( y i = c j ) → 此 处 y 取 值 为 函 数 最 大 时 的 c j 的 值 y=\arg max_{c_j}\sum_{x_i\in N_k(x)}I(y_i=c_j) \to 此处y取值为函数最大时的c_j的值 y=argmaxcjxi∈Nk(x)∑I(yi=cj)→此处y取值为函数最大时的cj的值
其中, i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , K i=1,2,...,N;j=1,2,...,K i=1,2,...,N;j=1,2,...,K; I I I为指示函数,即当 y i = c j y_i=c_j yi=cj时 I I I为 1 1 1,否则 I I I为 0 0 0
-
k k k近邻法的特殊情况是 k = 1 k=1 k=1的情形,称为最近邻算法。对于输入的实例点(特征向量) x x x, 最近邻法将训练数据集中与 x x x最邻近点的类作为 x x x的类。
-
特征空间中,对每个训练实例点 x i x_i xi ,距离该点比其他点更近的所有点组成一个区域,叫作单元(cell) 。
- 每个训练实例点拥有一个单元
- 每个单元的实例点的类别是确定的
- 最近邻法,将实例 x i x_i xi 的类 y i y_i yi 作为其单元中所有点的类标记(class label)
- 二维特征空间划分的一个例子
2 k k k 近邻模型
-
k k k 近邻模型三个基本要素:距离度量、 k k k值的选择、分类决策规则
-
距离度量
- Minkowski 距离:设特征空间 χ \chi χ是 n n n维实数向量空间 R n R^n Rn, x i , x j ∈ χ x_i,x_j\in\chi xi,xj∈χ, x i = ( x i ( 1 ) , x i ( 2 ) , . . . , x i ( n ) ) T x_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T xi=(xi(1),xi(2),...,xi(n))T, x j = ( x j ( 1 ) , x j ( 2 ) , . . . , x j ( n ) ) T x_j=(x_j^{(1)},x_j^{(2)},...,x_j^{(n)})^T xj=(xj(1),xj(2),...,xj(n))T, x i , x j x_i,x_j xi,xj的 L p L_p Lp距离定义为:
L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p = { L 1 ( x i , x j ) = ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ , 当 p = 1 时,为曼哈顿距离 L 2 ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ 2 ) 1 2 , 当 p = 2 时,为欧式距离 L ∞ ( x i , x j ) = max l ∣ x i ( l ) − x j ( l ) ∣ , 当 p = ∞ 时,为切比雪夫距离 L_p(x_i,x_j)=(\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^p)^{\frac{1}{p}}= \begin{cases} L_1(x_i,x_j)=\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|, & \text{当$p=1$时,为曼哈顿距离} \\ L_2(x_i,x_j)=(\sum_{l=1}^n|x_i^{(l)}-x_j^{(l)}|^2)^{\frac{1}{2}}, & \text{当$p=2$时,为欧式距离} \\ L_\infty(x_i,x_j)=\max_l|x_i^{(l)}-x_j^{(l)}|, & \text{当$p=\infty$时,为切比雪夫距离} \end{cases} Lp(xi,xj)=(l=1∑n∣xi(l)−xj(l)∣p)p1=⎩⎪⎨⎪⎧L1(xi,xj)=∑l=1n∣xi(l)−xj(l)∣,L2(xi,xj)=(∑l=1n∣xi(l)−xj(l)∣2)21,L∞(xi,xj)=maxl∣xi(l)−xj(l)∣,当p=1时,为曼哈顿距离当p=2时,为欧式距离当p=∞时,为切比雪夫距离
-
二维空间中 p p p取不同值时,与原点的 L p L_p Lp距离为1(即 L p = 1 L_p=1 Lp=1)的点的图形
- k k k值的选择:在应用中, k 值一般取一个比较小的数值.通常采用交叉验证法来选取最优的k 值
- 分类决策规则:多数表决规则,即由输入实例的k 个邻近的训练实例中的多数类决定输入实例的类。
3 k 近邻法的实现:kd 树
- k 近邻法的实现需要考虑如何快速搜索k 个最近邻点。
- kd 树是一种便于对k 维空间中的数据进行快速检索的数据结构;
- kd 树是二叉树,表示对k 维空间的一个划分,其每个结点对应于k 维空间划分中的一个超矩形区域;
- 利用kd 树可以省去对大部分数据点的搜索, 从而减少搜索的计算量。