码迷,mamicode.com
首页 > 编程语言 > 详细

20151014_基于距离的分类算法之KNN

时间:2015-10-14 23:33:15      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

1.原理

  通过计算每个训练数据到待分类元组的距离,取和待分类元组距离最近的K个训练数据,K个数据中哪个类别的训练数据占多数,则待分类元组就属于哪个类别。

  训练样本用n维数值属性描述。每个样本代表n维空间的一个点。所有的训练样本都放在n维模式空间中。给定一个样本,k-最临近分类法搜索模式空间,找出最接近未知样本的k个训练样本。
技术分享

2.需要的信息

  • 训练集
  • 距离计算值
  • 要获取的最邻近的邻居的数目k
  1. 计算两点之间的距离

    1. 例如可采用欧几里得距离:d = sqrt((x1-x2)^2+(y1-y2)^2+...+(yn-yn)^2)
  2. 从最近邻居列表中决定分类的结果

    1. 方法一:选出k个最近的邻居中的多数票的类标号 

    2. 方法二:可以根据距离为每一个投票增加权重 Weight factor ,w=1/d2
  3. k值的选取

  如果k过于小,那么将会对数据中存在的噪声过于敏感;

  如果k过大,邻居中可能包含其他类的点;

  一个经验的取值法则为k≤ ,q为训练元组的数目。商业算法通常以10作为默认值。

 

3.一般性描述

 

算法: K-近邻分类算法
输入: 训练数据T;近邻数目K;待分类的元组t。 
输出: 输出类别c。 
(1)N=?;          // 定义近邻集2)FOR each d ∈T DO BEGIN
(3)   IF |N|≤K THEN   // N的规模保持在k4)      N=N∪{d};    
(5)   ELSE
(6)      IF  ?u∈N  such that sim(t,u)<sim(t,d) THEN BEGIN
          /*如果N中存在数据u,使得t与u的相似度小于t与d的相似度(没有等于的情况保证了u!=d),即:新加入的d可以在N除去u之后加入到N中,d为N的新成员*/7)         N=N-{u};   // 除去u8)         N=N∪{d};   // 加入d9)      END
(10)END
(11)c=class to which the most u∈N. 

4.KNN的优缺点

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

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

5.Java实现

  可参考:K最近邻(KNN)算法的java实现

20151014_基于距离的分类算法之KNN

标签:

原文地址:http://www.cnblogs.com/wanlong/p/4878954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!