k近邻法及其实现(python)

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=argcjmaxxiNk(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个问题需要考虑:

  1. 如何选取合适的k值?即,要参考 x x x的多少个邻居的意见?
    k值过小,容易发生过拟合;k值过大,模型太简单,容易欠拟合。
    比如 k = N k=N k=N,那么无论输入实例时什么,都简单地预测它属于训练实例中最多的类。当 k = 1 k=1 k=1时,称为最近邻算法
    在应用中, k k k值一般取一个比较小的值;通常采用交叉验证法来选取最优的 k k k
  2. 选择何种距离度量方式来衡量 x x x与邻居的距离?
    通常用欧式距离,但也可以使用其他的距离,如更一般的 L p L_p Lp距离(如 p = 1 p=1 p=1时为曼哈顿距离, p = 2 p=2 p=2时是欧式距离)。
  3. 使用怎样的分类决策规则?
    k 近邻法中的分类决策规则一般采用多数表决。如果分类的损失函数为0-1损失函数,那么多数表决规则等价于经验风险最小化

k 近邻法的实现

The author is coding…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值