k-最近邻算法在分类和预测中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一讲
k-最近邻算法在分类和预测中的应用
1 k-最近邻分类
在k-最近邻算法背后的思想是建立一种对函数形式没有假设的分类方法, 方程
,把因变量(或回应)和自变量联系起来。我们所做的唯
一的假设是,认为它是一个光滑的函数。这是一个非参数的方法,因为它不涉及在一个假设了函数形式的方程中进行参数估计,这和我们在线性回归中碰到的线性假设和系数求解完全不同。
),...,,(21p x x x f y =y p x x x ,...,21我们的训练数据中,每个观测点(observation )都含有y 值,这个值刚好是该观测点的类别。例如,如果我们有两个类,那么是一个二元的变量。k-最近相邻的方法是在训练数据集中动态的确定和一个新的观测点相近的k 个观测点,比如,对于点,我们希望用k 个观测点去把一个特定的观测点分到某一类中。如果我们知道函数,那就简
单地计算。如果我们所有的假设是:是一个光滑函数,那么一个合理的想法就是在观测点集中寻找和它(根据自变量)相近的观测点,并从值计算出。这是一个类似于插值的思想,如同我们常用的正态分布表。当我们谈到邻居时,通常隐含着我们能够计算观测点间的距离或相异的度量,这些度量能够根据自变量得出。目前,我们局限于最常见的距离度量方法中:欧几里德距离。点和之间的欧式距离为:
y ),...,,(21p u u u ^
v f ),...,,(21^
p u u u f v =f y ^
v ),...,(21p x x x ),...,(21p u u u 2222211)(...)()(p p u x u x u x −++−+−
当讨论聚类方法的时候,我们会考虑在预测变量空间中点的距离的其它定义。 最简单的情况是当k=1的情况,这时我们发现观测点就是最近的(最近邻),并且,这里是最近邻的观测点的类别。一个显著的事实是:这是简单的、直观的、有力的分类想法,尤其当我们的训练集中观测点的数目很大的时候。可以证明1-NN 的误分的概率不劣于我们知道每个类的精确的概率密度函数时误分概率的2倍。换句话说,如果有大量的数据及充分复杂的分类规则,我们最多能减少划分错误到用简单的1-NN 规则时的一半。
y v =^
y 下面我们延伸1-NN 的想法为k-NN 。首先,发现最近k 邻居然后用大量的决策规则去分类一个新的观测点。由于在训练数据中存在噪声,高一点的k 值的优点是提供平滑的分类,以便减少过拟和的风险。在典型的应用中,k 是几个或十几个单元,而不是成百上千。注意到如果k=n ,在整个观测数据训练集中的数据数目,我们仅仅预测在训练数据集中大多数训练数据的所属类别,而不管的值如何。这显然是一个过平滑的例子,除非根本就没有关于因变量的自变量的信息。
),...,(21p u u u
例1
一个乘式割草机的制造商希望发现把一个城市中的家庭分类为可能买割草机家庭及不想买割草机的家庭。在这个城市中,随机抽取12个拥有乘式割草机的家庭,和12没有拥有的。这些数据在表1和图1中:
表1
观测点收入($000’s) 草地面积(000’s sq. ft.)Owners=1,Non-owners=2
1 60 18.4 1
2 85.5 16.8 1
3 64.8 21.6 1
4 61.
5 20.8 1
5 87 23.
6 1
6 110.1 19.2 1
7 108 17.6 1
8 82.8 22.4 1
9 69 20 1
10 93 20.8 1
11 51 22 1
12 81 20 1
13 75 19.6 2
14 52.8 20.8 2
15 64.8 17.2 2
16 43.2 20.4 2
17 84 17.6 2
18 49.2 17.6 2
19 59.4 16 2
20 66 18.4 2
21 47.4 16.4 2
22 33 18.8 2
23 51 14 2
24 63 14.8 2
我们如何来选择k值呢?在数据挖掘中,对不同的k值,我们用训练数据去分类事例,用验证数据去计算分类错误率。在这个的例子中,我们随机地把数据集分为含有18个事例的训练集和含有6个事例的测试集。当然,在实际的数据挖掘情况下,会有更大规模的例子。测试集包含表中第6,7,12,14,19,20个事例。剩下的18个观测点构成训练数据。图1展示了在训练集和测试集中的所有事例。注意到如果我们选择k=1,那么我们就选择了一种对数据的局部特征非常敏感的分类方式。另一方面,如果我们选择大的k值,则相当于取大量的数据点的平均,同时平滑掉由于单个数据点的噪音而导致的波动性。如果选择k=18,在各种情况下我们将简单地预测在数据集中最频繁出现的类。这是非常稳定的预测,但它完全忽略了在自变量中的信息。
图1
表2展示了针对不同的k值在测试集中的误分率:
表2:
k 1 3 4 5 7 9 111318
误分率(%) 33 3333333333171750
在这个例子中,我们将选择k=11(或13)。这个选择最佳的消除了在低k值时的变动性和高k值时的过平滑现象。值得一提的是:一个推定k值的有益途径是通过有效参数的数目这个概念。有效参数的数目是和k值相关的,大致等于n/k,其中,n是这个训练数据集中事例的数目。因此k=11的效用参数大约在2左右,有点像两参数的线性回归。
2k最近邻预测
k-NN的思想可以容易地用来预测连续值(和我们建立多元线性回归模型的目的一样),通过用k个近邻的平均值来简单的预测因变量。通常,这个均值是带有权重的,权重随着和需要做预测的点的距离的增加而减小。
3 k-NN算法的缺点
在实际应用K-NN方法时有两个困难。首先,当从训练数据中估计参数没有时间要求时,在大训练集寻找最近邻的时间是难以忍受的。已经实现了许多的想法去克服这个困难。主要的想法是:
(1)通过降维技术来减少维数,如主成分分析,从而减少计算距离的时间;
(2)用复杂的数据结构,如搜索树去加速最近邻的确定。这个方法经常通过设定“几乎是最近邻”的目标去提高搜索速度;
(3)编辑训练数据去减少在训练集中的冗余和几乎是冗余的点,从而加速搜索最近邻。在个别例子中去掉在训练数据集中的一些观察点,对分类效果没有影响,原因是这些点被包围属于同类的观测点中。
第二,在训练数据集中要求的观测值的数目,随着维数p的增长以指数方式增长。这是因为和最近邻的期望距离随着p急剧上升,除非训练数据集的大小随着p以指数方式增长。