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


    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实现

  • 相关阅读:
    有道难题 双倍超立方数 的解答
    《网瘾战争》如此震撼之作,不看枉为国人
    CSS样式命名规则及参考命名标准
    AS3自定义鼠标光标后应注意鼠标事件捕获问题
    AS3 RPG游戏引擎开发日志3:地图坐标转换
    最长的一天
    解决ASP乱码问题
    you are MJJ!!!!
    浅谈MIS系统架构
    让火狐等浏览器也能使用HTC(HTML component)的方法
  • 原文地址:https://www.cnblogs.com/wanlong/p/4878954.html
Copyright © 2020-2023  润新知