机器学习3:K近邻法K-Nearest-Neighbor Classifier/KNN(基于R language&Python)

本文详细介绍了K近邻法(K-Nearest-Neighbor,简称KNN)的基本原理和方法,包括k值选择、距离度量、分类决策规则等内容,并通过R语言和Python的代码示例展示了KNN在分类问题和回归问题中的应用。文章探讨了无加权和加权情况下的KNN,以及如何处理定性变量和缺失值。此外,还讨论了KNN的优缺点和评估方法。
摘要由CSDN通过智能技术生成

   k k k 近邻法是一种基本分类回归问题。 k k k 近邻法的输入为实例的特征向量,对应于特征空间中的点;输出为实例的类别,可以取很多类。 k k k 近邻法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其 k k k 个最近邻的训练实例的类别,通过多数表决等方式进行预测。因此, k k k 近邻法不具有显式的学习过程。 k k k 近邻法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。 k k k 近邻法的三个要素是: k k k 值的选择、距离度量及分类决策规则1

基本原理方法

k k k 近邻法概述

   k k k 近邻法的算法如下:

输入:训练集 D = { ( x i , y i ) } i = 1 N D=\{(x_i,y_i)\}_{i=1}^N D={ (xi,yi)}i=1N ,其中 x i x_i xi 为实例的特征向量, y i y_i yi 为实例的类别
输出:实例 x x x 所属的类别 y y y
(1)根据给定的距离度量,在训练集 D D D 中找出与 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 = a r g m a x c j ∑ x i ∈ N k ( x ) I ( y i = c j ) , i = 1 , 2 , ⋯   , N ; j = 1 , 2 , ⋯   , K y=argmax_{c_j}\sum_{x_i\in N_k(x)} I(y_i=c_j),i=1,2,\cdots,N;j=1,2,\cdots,K y=argmaxcjxiNk(x)I(yi=cj),i=1,2,,N;j=1,2,,K,即有 K K K 种类别。

   k k k 近邻法是一种惰性学习算法,它存储训练集实例但并没有立刻进行建模,直到获得测试集,必须对其进行分类为止才开始进行建模。

懒惰学习算法:只存储训练数据(或仅进行少量处理)但并不马上进行建模,等到给出测试集才开始建模。

与之相反地,

积极学习算法:给定训练集就立马进行建模,再接收新的测试数据在建立好的模型上进行预测。

懒惰学习算法与积极学习算法的比较
时间成本 懒惰学习算法训练花的时间更少,但预测花的时间更多
准确率 惰性学习算法有效地使用了更丰富的假设空间,因为它使用了许多局部线性函数来形成对目标函数的隐式全局近似;积极学习算法则必须遵循涵盖整个实例空间的一个单一假设

  除了 k k k 近邻法之外,典型的惰性学习算法还有局部加权回归、构造局部近似、基于案例的推理和使用符号表示和基于知识的推理。

  KNN算法需要有四个步骤:

  • 定量变量标准化
  • 距离度量
  • 定义邻居个数 k k k
  • 预测
    • 分类问题:多数投票 Majority Vote
    • 回归问题:把邻居的取值平均 Averaging
定量变量标准化

  由于计算距离时,会涉及到将变量所有维度相加的计算,故需要对每个变量进行标准化。否则,因为尺度不同的原因,尺度比较大的变量比尺度比较小的变量会有更大的影响。

  在叙述具体怎么做标准化之前,有一个重中之重的提醒:训练集标准化完了以后,测试集的标准化是要利用训练集标准化的“工具”来进行的!例如中心标准化,测试集标准化必须用训练集数据的均值和标准差,这是因为在建好模型预测之前是不可以动用测试集的信息的,一切信息只能来源于训练集。

  标准化方法主要有两种,一种是 m i n − m a x min-max minmax 归一化(归一化后数据被缩放到 [ 0 , 1 ] [0,1] [0,1] 范围内):

x n o r m a l i z a t i o n = x − m i n ( x ) m a x ( x ) − m i n ( x ) x_{normalization}=\frac{x-min(x)}{max(x)-min(x)} xnormalization=max(x)min(x)xmin(x)

另一种是 z − s c o r e z-score zscore 标准化:

x s t a n d a r d i z a t i o n = x − m e a n ( x ) s t d ( x ) x_{standardization}=\frac{x-mean(x)}{std(x)} xstandardization=std(x)xmean(x)

距离度量
定量变量的距离度量

  特种空间中两个实例点的距离是两个实例点相似程度的反映。 k k k 近邻模型的特征空间一般是 n n n 维实数向量空间 R n \textbf{R}^n Rn,使用的是欧式距离。一般地,有两种距离度量方式:欧式距离和闵氏距离。

  特征空间中两点的欧式距离为:

d ( x i , x j ) = ∑ l = 1 m ( x i ( l ) − x j ( l ) ) 2 d(x_i,x_j)=\sqrt{\sum_{l=1}^m (x_i^{(l)}-x_j^{(l)})^2} d(xi,xj)=l=1m(xi(l)xj(l))2

其中 x i = ( x i 1 , x i 2 , ⋯   , x i m ) x_i=(x_i^{1},x_i^{2},\cdots,x_i^{m}) xi=(xi1,xi2,,xim)

  特征空间中两点的曼哈顿距离为:

d ( x i , x j ) = ∑ l = 1 m ∣ x i ( l ) − x j ( l ) ∣ d(x_i,x_j)=\sum_{l=1}^m \mid x_i^{(l)}-x_j^{(l)} \mid d(xi,xj)=l=1mxi(l)xj(l)

  特征空间中两点的闵氏距离为:

d ( x i , x j ) = ( ∑ l = 1 m ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p d(x_i,x_j)=(\sum_{l=1}^m \mid x_i^{(l)}-x_j^{(l)} \mid ^p)^{\frac{1}{p}} d(xi,xj)=(l=1mxi(l)xj(l)p)p1

  以下图为例,绿色的直线代表两点之间的欧式距离,而红色和黄色的线为两点的曼哈顿距离。感受一下两者的不同2

定性变量的距离度量

  定性变量就是属于同一类别的亮点距离为0,属于不同类别的两点距离为1(0-1距离)。

  举例说明定性变量的距离度量,X={red},Y={red},Z={blue},d(X,Y)=0,d(X,Z)=1。

缺失值的距离度量

  定性变量在0-1距离度量下,取值若为缺失值的点的距离定义:

x1 x2 距离
缺失值 - 1
- 缺失值 1
缺失值 缺失值 1

  定量变量在0-1正则化后,取值若为缺失值的点的距离定义:

x1 x2 距离
缺失值 - max(x2,1-x2)
- 缺失值 max(x1,1-x1)
缺失值 缺失值 1
k k k 值的选择

   k k k 值的选择会对 k k k 近邻法的结果产生重大影响。

  如果选择较小的 k k k 值,即用较小的邻域中的训练集实例进行预测。会导致学习的近似误差(bias)减小——只有与输入实例较近的(相似的训练实例)才会对预测结果起作用;但缺点是学习的估计误差(variance)会增大——预测结果会对近邻的实例点非常敏感:只要变换一下训练集中的实例,邻居实例就会变化很大,从而导致预测结果变化很大。

  换句话说, k k k 值的减少就意味着整体模型变得复杂,容易发生过拟合

  如果选择较大的 k k k 值,即用较大的邻域中的训练集实例进行预测。其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时与输入实例较远的(不相似的)训练实例也会对预测起作用,是预测发生错误。

  换句话说, k k k 值的增大就意味着整体模型变得简单。

  在应用中, k k k 值一般取取 3~10 或取 n 训 练 集 \sqrt{n_{训练集}} n ,通常采用交叉验证法来选取最优的 k k k 值。下图展示了训练集、测试集、十折交叉验证及贝叶斯四者的错判率随 k k k 值的变化。

  显然, k = 0 k=0 k=0 时,训练集错判率为0。根据上图,我们可以发现随着 k

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值