`
iwebcode
  • 浏览: 2007735 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

KNN-K最近邻分类模型

 
阅读更多

KNN原理

训练元组用n个属性描述,每个元组代表n维空间中的一个点,所有的训练元组存放在n维的模式空间。当给定一个未知元组时,搜索该模式空间,找出最接近未知元组的k个训练元组。未知元组指派到它的k个最近邻中的多数类。“邻近性”用距离度量,如欧几里德距离。

KNN算法中的细节处理

•数值属性规范化:将数值属性规范到0-1区间以便于计算,也可防止大数值型属性对分类的主导作用。

可选的方法有:v'= (v - vmin)/ (vmax - vmin),当然也可以采用其它的规范化方法

•比较的属性是分类类型而不是数值类型的:同则差为0,异则差为1.

有时候可以作更为精确的处理,比如黑色与白色的差肯定要大于灰色与白色的差。

•缺失值的处理:取最大的可能差,对于分类属性,如果属性A的一个或两个对应值丢失,则取差值为1;

如果A是数值属性,若两个比较的元组A属性值均缺失,则取差值为1,若只有一个缺失,另一个值为v,则取差值为|1-v|和|0-v|中的最大值

•确定K的值:通过实验确定。进行若干次实验,取分类误差率最小的k值。

•对噪声数据或不相关属性的处理:对属性赋予相关性权重w,w越大说明属性对分类的影响越相关。对噪声数据可以将所在的元组直接cut掉。

KNN算法流程

•准备数据,对数据进行预处理

•选用合适的数据结构存储训练数据和测试元组

•设定参数,如k

•维护一个大小为k的的按距离由大到小的优先级队列,用于存储最近邻训练元组

•随机从训练元组中选取k个元组作为初始的最近邻元组,分别计算测试元组到这k个元组的距离,将训练元组标号和距离存入优先级列

•遍历训练元组集,计算当前训练元组与测试元组的距离,将所得距离L与优先级队列中的最大距离Lmax进行比较。若L>=Lmax,则舍弃该元组,遍历下一个元组。若L< Lmax,删除优先级队列中最大距离的元组,将当前训练元组存入优先级队列。

•遍历完毕,计算优先级队列中k个元组的多数类,并将其作为测试元组的类别。

•测试元组集测试完毕后计算误差率,继续设定不同的k值重新进行训练,最后取误差率最小的k值。

KNN的优缺点

优点:原理简单,实现起来比较方便。支持增量学习。能对超多边形的复杂决策空间建模。

缺点:计算开销大,需要有效的存储技术和并行硬件的支撑。

KNN算法的改进策略

•将存储的训练元组预先排序并安排在搜索树中(如何排序有待研究)

•并行实现

•部分距离计算,取n个属性的“子集”计算出部分距离,若超过设定的阈值则停止对当前元组作进一步计算。转向下一个元组。

•剪枝或精简:删除证明是“无用的”元组。

该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics