K-NN Algorithm(K-NN算法原理)

k \text{k} k 近邻法( k-nearest neighbor \text{k-nearest neighbor} k-nearest neighbor) 是一种基于分类和回归的方法,这里我们只讨论分类问题的 k \text{k} k 近邻法。 k \text{k} k 近邻输入为实例点的特征向量,输出为实例所属类别。 k \text{k} k 近邻假定给定了一个训练数据集,其中的实例类别已经确定。分类时,对新的实例,根据其 k \text{k} k 个最近的训练实例的类别,通过多数表决等方式进行预测。

1. 算法描述

Input: \textbf{Input:} Input:
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T=\{ (x_1,y_1),(x_2,y_2),\ldots,(x_N,y_N) \} T={(x1,y1),(x2,y2),,(xN,yN)}
其中, x i ∈ X ⊆ R n x_i \in X \subseteq \bf{R^n} xiXRn 为实例的特征向量, y i ∈ Y = { c 1 , c 2 , … , c K } y_i \in Y=\{ c_1,c_2,\ldots,c_K \} yiY={c1,c2,,cK}为实例的类别, i = 1 , 2 , … , N i=1,2,\ldots,N i=1,2,,N;
Output: \textbf{Output:} Output:
y = arg ⁡ max ⁡ c j ∑ x i ∈ N k ( x ) I ( y i = c j ) ,   i = 1 , 2 , … , N ;   j = 1 , 2 , … , K y=\arg\underset{c_j}{\max}\sum_{x_i\in N_k\left( x \right)}{I\left( y_i=c_j \right) ,\ i=1,2,\ldots,N;\ j=1,2,\ldots,K} y=argcjmaxxiNk(x)I(yi=cj), i=1,2,,N; j=1,2,,K
其中, N k ( x ) N_k(x) Nk(x) 为涵盖最近的 k \text{k} k 个点的邻域; I \text{I} I 为指示函数,即当 y i = c j y_i=c_j yi=cj 时为1,否则为0。通过分类决策规则(多数表决)决定 x x x 的类别 y y y

2. 距离向量

特征空间中两个实例点的距离是两个样本相似程度的反映。 k \text{k} k 近邻模型使用的距离一般是欧式空间的欧氏距离,但也可以是其它距离,如一般的 L p L_p Lp距离( L p  distance L_p \text{ distance} Lp distance)或者 Minkowski \text{Minkowski} Minkowski 距离( Minkowski distance \text{Minkowski distance} Minkowski distance)。
设特征空间 X X X n n n 维实数向量空间 R n \bf{R^n} Rn x i , x j ∈ X , x i = ( x i ( 1 ) , x i ( 2 ) , … , x i ( n ) ) x_i,x_j \in X, x_i=(x_i^{(1)},x_i^{(2)},\dots,x_i^{(n)}) xi,xjX,xi=(xi(1),xi(2),,xi(n)) x i , x j x_i,x_j xi,xj L p L_p Lp 定义为:
L p ( x i , x j ) = ( ∑ i = 1 n ∥ x i ( l ) − x j ( l ) ∥ p ) 1 p L_p(x_i,x_j)=(\sum_{i=1}^{n}{\Vert x_i^{(l)}-x_j^{(l)} \Vert}^p)^{\frac{1}{p}} Lp(xi,xj)=(i=1nxi(l)xj(l)p)p1
这里 p ≥ 1 p \ge 1 p1,当 n = 2 n=2 n=2 时,就成为欧氏距离,即
L p ( x i , x j ) = ( ∑ i = 1 n ∥ x i ( l ) − x j ( l ) ∥ 2 ) 1 2 L_p(x_i,x_j)=(\sum_{i=1}^{n}{\Vert x_i^{(l)}-x_j^{(l)} \Vert}^2)^{\frac{1}{2}} Lp(xi,xj)=(i=1nxi(l)xj(l)2)21
p = 1 p=1 p=1 时,称为曼哈顿距离,即
L p ( x i , x j ) = ∑ i = 1 n ∥ x i ( l ) − x j ( l ) ∥ L_p(x_i,x_j)=\sum_{i=1}^{n}{\Vert x_i^{(l)}-x_j^{(l)} \Vert} Lp(xi,xj)=i=1nxi(l)xj(l)
p = ∞ p=\infty p= 时,它是各个坐标距离的最大值,即
L p ( x i , x j ) = max ⁡ i ∥ x i ( l ) − x j ( l ) ∥ L_p(x_i,x_j)=\underset{i}{\max}\Vert x_i^{(l)}-x_j^{(l)} \Vert Lp(xi,xj)=imaxxi(l)xj(l)

3. k \text{k} k 值选择

k \text{k} k 值的选取会对最终分类结果产生较大的影响。

  1. 如果 k \text{k} k 值过小,则学习的近似误差会下降,只有更输入实例相近的实例点才会起预测作用。但缺点是学习的估计误差会增大,预测结果对近邻的实例点非常敏感,如果实例点恰好是噪声,预测就会出错。容易发生过拟合。
  2. 如果 k \text{k} k 值过大,优点是可以减少学习的估计误差,但缺点是会造成近似误差的增大。这使与输入实例较远的训练实例也会对预测起作用,使预测发生错误。

因此,需要多次尝试不同 k \text{k} k 值,然后选取最佳 k \text{k} k 值。通常做法是 使用交叉验证来选取最优 k \text{k} k 值。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值