近邻分析 -- KNN

数据预测是基于对历史数据的分析,通过学习器归纳和提炼其中包含的规律,并将这种规律体现在预测模型中。参与建模的变量主要分为两种:

  • 输入变量(解释变量、特征变量,一般记为x,可以有多个)
  • 输出变量(被解释变量,记为y,通常只有一个)

预测模型分为两种类型:

  • 分类预测模型,即输出变量为类型变量的预测模型。
  • 回归预测模型,即输出变量为数值型变量的预测模型。

在传统统计学中一般是假设数据满足某种分布假设,然后明确设定输出变量与输入变量的函数形式,即 y=f(x) ;最后根据数据估计未知参数,进而根据函数关系进行预测。但是在实际应用中,或者在输入变量较多,样本量较大的情况下,要求出具体的函数 f 是非常困难的。对此,可采用数据挖掘中非常经典而有效的方法–近邻分析。

近邻分析简述

近邻分析算法的基本思想是:为预测某一个新观测 X0 输出变量 y0 的取值,可首先在已有数据中找到与 X0 相似的K个观测,如 (X1,X2,...,Xk) 的输出变量 (y1,y2,...yk) ,并计算其平均(通常是以其相似度作为权进行加权平均,或取算术平均、中位数、众数等),并以此作为新观测 X0 输出变量 y0 的预测值 y0^ 。可见,使用KNN方法并不需要制定 y=f(x) 的具体形式,只需要假设 y0^ (y1,y2,...yk) 的一个函数 y0^=F(y1,y2,...yk) 即可。

典型的近邻分析方法是K-近邻法(K-nearest neighbor,KNN)。该算法将样本包含的n个观测数据看成维特征空间中的点,并通常根据 X0 的K个近邻的 (y1,y2,...yk) ,根据函数 y0^=F(y1,y2,...yk) 计算预测值 y0^ 。通常情况下:

y0^=xiNk(X0)qiyi

其中,

qi 为权重,通常以

Xi

X0 的距离衡量,距离越近,权重越大;反之,权重越小。

  • 对于只有二分类(0和1两个类别)的分类预测问题, y0^ 是类别值取1的概率, y0^=P(y0=1|X) 。若概率大于0.5,意味着有超过半数的近邻的类别值为1,则应预测为1类,否则预测为0类。

  • 对于多分类的预测问题, y0^=P(y0=m|X) ,即类别值取m的概率。预测值应为最大概率值对应的类m。

  • 对于回归预测问题, y0^ 是近邻输出变量的平均值。

不难看出KNN的核心问题有两个:

  • 依据怎样的标准测度与 X0 的近邻关系(距离或相似度)

  • 依据怎样的原则确定K的取值

KNN中的距离

由于KNN算法将样本包含的n个观测数据看成P维特征空间中的点,所以可以在特征空间中定义某种距离,作为测度与 X0 近邻关系的依据。通用的距离有闵氏距离、欧式距离、绝对距离(曼哈顿距离)、切比雪夫距离、夹角余弦距离等。这个在博文http://blog.csdn.net/buracag_mc/article/details/70143833也有涉及到。

对于两个观测点x和y,若 xi 是观测点x的第i个变量值, yi 是观测点y的第i个变量值。两观测点x和y之间的上述距离定义如下:

  • 闵氏距离
    两观测点x和y间的闵氏距离是指两观测点p个变量值绝对差k次方总和的k次方根:
    d(x,y)=pi=1|xiyi|kk
  • 欧式距离
    两观测点x和y间的欧式距离是指两观测点p个变量值绝对差平方总和的平方根:
    d(x,y)=pi=1|xiyi|22
    可以看出,欧式距离是闵氏距离在k=2时的特例。
  • 绝对(曼哈顿)距离
    两观测点x和y间的绝对(曼哈顿)距离是指两观测点p个变量值绝对之差的总和:
    d(x,y)=pi=1|xiyi|
    可以看出,绝对(曼哈顿)距离是闵氏距离在k=1时的特例。
  • 切比雪夫距离
    两观测点x和y间的切比雪夫距离是指两观测点p个变量值绝对之差的最大值:
    d(x,y)=max(|xiyi|)
    可以看出,切比雪夫距离是闵氏距离在k=无穷大时的特例
  • 夹角余弦距离
    d(x,y)=pi=1(xiyi)2(pi=1x2i)(pi=1y2i)
    可以看出夹角余弦距离是从两观测的变量整体结构相似性角度测度其距离的。夹角余弦值越大,其结构相似度越高。

实际应用中,p个维度之间可能存在数量级的差异,数量级较大的维度对距离大小的影响会大于数量级小的变量。为了消除这种影响,统计学中常见的方法有标准分数法和极差法(有的称为极大-极小值法)。

  • 标准分数法:
    xij=xijxi¯¯σxi
    其中 xi¯¯¯ σxi 分别为输入变量 xi 的均值和标准差。

  • 极差(极大-极小值法)法:
    xij=xijmin(xi)max(xi)min(xi)
    其中, max(xi) min(xi) 分别为输入变量 xi 的最大值和最小值

KNN算法中的近邻个数

样本中可能会有许多与 X0 具有近邻关系的观测点。K值如何确定,这是KNN算法的关键,K是KNN算法的关键参数。

  • 最简单的情况是只需找一个距离 X0 最近的一个近邻 Xi ,即K=1。此时, y0^=yi

    • 1-近邻算法的预测效果应从预测误差角度分析。
      对于分类预测:如果采用普通贝叶斯方法,预测 X0 输出变量类别取1的概率为 p(y=1|X) ,则预测类别为1时错误概率为1- p(y=1|X) 。若该近邻以P(y=0|X)的概率取类别0,则预测 X0 的类别为0时的错误概率为1-P(y=0|X)。

    • 所以,易知,1-近邻算法预测错误的概率为:
      P(y=1|X)[1-p(y=1|X)]+P(y=0|X)[1-P(y=0|X)]=2P(y=1|X)[1-p(y=1|X)]

    • 可见,1-近邻算法预测是基于一种单个近邻的预测,由于:
      2P(y=1|X)[1-p(y=1|X)] 2[1-p(y=1|X)]
      所以,1-近邻算法的预测错误概率不会高于普通贝叶斯预测方法错误率的2倍。

尽管1-近邻算法非常简单,但比较使用于分类预测时,特征空间维度较低且类别边界极不规则的情况。但由于1-近邻算法只根据单个近邻进行预测,预测结果手近邻差异影响极大,通常预测方差极大,稳健性低。为此,可通过增大近邻个数K来提升预测的稳定性。但由于增大K值会导致分类边界趋于平滑,预测方差增大。

  • 所以在回归预测中,我们通常用均方误差的方法来衡量预测误差。均方误差定义为各观测输出变量实际值与预测值之差的平方和的平均值,即MSE= 1nni=1(yiyi^2) 。其中,n为样本量。

  • 在分类预测中,预测误差用错判率来衡量。由于新数据集中输入变量取值已知,输出变量取值未知,所以,预测误差的真值事前是未知的,只能通过估计得到,常见的有如下两种估计方法:

    • 旁置法
      旁置法将整个样本集随机划分为两个集合。训练样本集,通常包含60%~70%的观测,用于训练模型;测试样本集,用于估计测试误差,所得误差称为测试误差,将作为模型预测误差的估计。
      显然,旁置法适合样本量较大时的情况。当样本量较小时,一方面学习器的学习充分性欠佳,导致预测偏差偏大;另一反面,训练样本和测试样本划分的随机性差异会导致不同划分样本上的预测模型参数差异较大,导致模型估计的方差变大。

    • 留一法
      留一法是在包含n个观测的样本中,抽出一个观测作为测试样本,剩余n-1个观测作为训练样本集。依据建立在训练样本集上的预测模型,对被抽出的一个观测进行预测,并计算预测误差,这个过程需重复n次。最后,计算n次误差的平均,将其作为模型预测误差的估计。
      相反,留一法更适合对小样本的进行处理。

在进行KNN分析时,我们需要不断调整参数K的取值,比较不同K下的预测错误率,取使错误率达到最小时的K值。

未完,待更。。。

点赞