k 近邻法的基本思想
k 近邻法(k-NN)是一种基本的分类和回归方法。
以分类任务为例,k 近邻法假设给定一个训练数据集及其类别标签。分类时,对一个新来的待预测实例,只需要根据离它最近的 k 个训练实例的类别标签,通过多数表决的方式决定待预测实例的类别。
算法流程如下:
算法3.1(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 x_i xi是实例的特征向量, y i y_i yi是实例的类别标签;待预测的实例特征向量 x x x。 输出:实例 x x x所属的类别 y y y 步骤1:根据给定的距离度量,在训练集 T T T中找到与 x x x最近邻的k个点,将这k个点的集合记作 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 max c j ∑ x i ∈ N k ( x ) I ( y i = c j ) , i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , K y=\arg\max\limits_{c_j}\sum\limits_{x_i\in N_k(x)}I(y_i = c_j),\ i=1,2,...,N;j=1,2,...,K y=argcjmaxxi∈Nk(x)∑I(yi=cj), i=1,2,...,N;j=1,2,...,K 其中, I I I是指示函数,即当 y i = c i y_i=c_i yi=ci时 I I I为1,否则 I I I为0. |
根据上述思想,接下来有3个问题需要考虑:
- 如何选取合适的k值?即,要参考
x
x
x的多少个邻居的意见?
k值过小,容易发生过拟合;k值过大,模型太简单,容易欠拟合。
比如 k = N k=N k=N,那么无论输入实例时什么,都简单地预测它属于训练实例中最多的类。当 k = 1 k=1 k=1时,称为最近邻算法。
在应用中, k k k值一般取一个比较小的值;通常采用交叉验证法来选取最优的 k k k值。 - 选择何种距离度量方式来衡量
x
x
x与邻居的距离?
通常用欧式距离,但也可以使用其他的距离,如更一般的 L p L_p Lp距离(如 p = 1 p=1 p=1时为曼哈顿距离, p = 2 p=2 p=2时是欧式距离)。 - 使用怎样的分类决策规则?
k 近邻法中的分类决策规则一般采用多数表决。如果分类的损失函数为0-1损失函数,那么多数表决规则等价于经验风险最小化。
k 近邻法的实现
The author is coding…