MachineLearning— (KNN)k Nearest Neighbor(二)

  Knn属于基于实例的学习方法,其将训练数据存储起来而不是为目标函数建立明确的一般化描述;从而泛化的工作被推迟到必须分类新的实例时。每当学习器遇到一个新的查询实例时,它分析这个新实例与以前存储的实例的关系,并据此把一个目标函数值赋给新的实例;基于实例的学习方法包括最近邻法和局部加权回归法,他们都假定实例可以被表示为欧式空间中的点;

事实上,很多技术只建立目标函数的局部逼近,将其应用于与新查询实例临近的实例,而从不建立在整个实例空间上都表现良好的逼近。当目标函数比较复杂却可以用不太复杂的局部逼近描述时,这样做有显著的优势;

基于实例的方法有两大不足:分类新实例的开销可能很大,如何有效的索引训练样例,以减少查询时所需的计算是一个重要的实践问题。第二,从存储器中检索相似的训练样例时,他们一般考虑实例的所有属性,如果目标概念仅仅依赖于很多属性中的几个时,那么真正最相似的实例之间很可能相距甚远;


下面给出k近邻算法,其中f(xq)’为对f(xq)的估计,

 

 

对前面的k近邻算法做简单修改后,它就可被用于逼近连续值的目标函数。为实现这一点,我们让算法计算k个最接近样例的平均值,而不是计算其中最普遍的值;为逼近一个实值目标函数,我们只要将算法中的公式替换为:

距离加权最近邻算法:

对k近邻算法的一个明显改进是对k个近邻的贡献加权,根据他们相对查询点xq的距离,将较大的权值赋给较近的近邻。   

同样我们可以用类似的方式对实值目标函数进行距离加权,替代公式如下:


注意分母是一个常量,它将不同权值的贡献归一化;

如果分类一个新的查询实例时考虑所有的训练样例,我们称它为全局法,如果仅仅考虑最靠近的训练样例,我们称之为局部法;

K近邻算法的归纳偏置对应于假定:一个实例的分类xq与在欧式空间中它附近的实例的分类相似;


应用k近邻算法的一个问题是,实例间的距离是根据实例的所有属性计算的,这与那些只选择全部属性的一个子集的方法不同,例如决策树学习系统;举个例子:每个实例由20个属性描述,但在这些属性中仅有两个与它的分类有关,在这种情况下,这两个相关属性的值一致的实例可能在这个20维的实例空间中相距很远;结果依赖这20个属性的相似度度量会误导k近邻算法的分类,近邻间的距离会被大量的不相关的属性所支配,这种由于存在很多不相关属性所导致的难题,有时被称之为维度灾难,最近邻方法对这个问题特别敏感;


另外一种更强有力的方法是从实例空间中完全消除最不相关的属性,这等效于设置某个缩放因子Zj为0;

应用k近邻算法的另外一个实践问题是如何建立高效的索引,因为这个算法推迟所有的处理,直到接收到一个新的查询,所以处理每个新查询可能需要大量的计算,目前已经开发了很多方法用来对存储的训练样例进行索引,以便在增加一定存储开销的情况下更高效的确定最近邻,一种索引方法是kd-tree,它把实例存储在数的叶节点内,临近的实例存储在同一个或者附近的节点内,通过测试新查询的Xq选定属性,树的内部节点把查询Xq排列到相关的叶节点;

 



参考资料:《机器学习》Tom Mitchell

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值