zoukankan      html  css  js  c++  java
  • 分类算法 一( 决策树、KNN)

    一、决策树

      1. 决策树概念

         
         判定树是一个类似于流程图的树结构:其中,每个内部结点表示在一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或类分布。树的最顶层是根结点。
     
      2.  机器学习中分类方法中的一个重要算法
     
      3.  构造决策树的基本算法   
                                               
                                                分支                 根结点       
                                                                                                                               结点
                                                                树叶
     
      
          熵(entropy)概念:
               信息和抽象,如何度量?
     
         1948年,香农提出了 ”信息熵(entropy)“的概念一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常非常不确定的事情,或者是我们一无所知的事情,需要了解大量信息==>信息量的度量就等于不确定性的多少
              例子:猜世界杯冠军,假如一无所知,猜多少次?
              每个队夺冠的几率不是相等的
              
              比特(bit)来衡量信息的多少
     
       变量的不确定性越大,熵也就越大
              
     
              决策树归纳算法 (ID3)
               1970-1980, J.Ross. Quinlan, ID3算法
     
          选择属性判断结点信息获取量(Information Gain):Gain(A) = Info(D) - Infor_A(D)通过A来作为节点分类获取了多少信息

     

                                                                                         类似,Gain(income) = 0.029, Gain(student) = 0.151, Gain(credit_rating)=0.048
     
              所以,选择age作为第一个根节点
       重复。。。
     
     
              算法:
    • 树以代表训练样本的单个结点开始(步骤1)。
    • 如果样本都在同一个类,则该结点成为树叶,并用该类标号(步骤2 和3)。
    • 否则,算法使用称为信息增益的基于熵的度量作为启发信息,选择能够最好地将样本分类的属性(步骤6)。该属性成为该结点的“测试”或“判定”属性(步骤7)。在算法的该版本中,
    • 所有的属性都是分类的,即离散值。连续属性必须离散化。
    • 对测试属性的每个已知的值,创建一个分枝,并据此划分样本(步骤8-10)。
    • 算法使用同样的过程,递归地形成每个划分上的样本判定树。一旦一个属性出现在一个结点上,就不必该结点的任何后代上考虑它(步骤13)。
    • 递归划分步骤仅当下列条件之一成立停止:
    • (a) 给定结点的所有样本属于同一类(步骤2 和3)。
    • (b) 没有剩余属性可以用来进一步划分样本(步骤4)。在此情况下,使用多数表决(步骤5)。
    • 这涉及将给定的结点转换成树叶,并用样本中的多数所在的类标记它。替换地,可以存放结
    • 点样本的类分布。
    • (c) 分枝
    • test_attribute = a i 没有样本(步骤11)。在这种情况下,以 samples 中的多数类
    • 创建一个树叶(步骤12)
     
      代码实例分析:
      http://scikit-learn.org/stable/modules/tree.html
     
      
     
     二、KNN算法
     
      1、KNN算法概述

      kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 

      2、KNN算法介绍

       最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类。但是怎么可能所有测试对象都会找到与之完全匹配的训练对象呢,其次就是存在一个测试对象同时与多个训练对象匹配,导致一个训练对象被分到了多个类的问题,基于这些问题呢,就产生了KNN。

          KNN是通过测量不同特征值之间的距离进行分类。它的的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。K通常是不大于20的整数且k选用奇数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。

      3. 算法详述
          步骤:
           ·为了判断未知实例的类别,以所有已知类别的实例作为参照。
           选择参数K(一般为奇数   小于20)。
           计算未知实例与所有已知实例的距离。
           选择最近K个已知实例。
           根据少数服从多数的投票法则(majority-voting),让未知实例归类为K个最邻近样本中最多数的类别。
     
         一些细节:
           关于K
        一般为奇数   小于20。
           关于距离的衡量方法:
               1 Euclidean Distance 定义
          
          2  可用的其他距离衡量:余弦值(cos), 相关度 (correlation), 曼哈顿距离 (Manhattan distance)。
     
      4.举例
     
      如图,绿色为样本点,当K=1时  可见距离蓝色方框的距离最近,则样本点属于蓝色方形这类。
                当K=4时  可见距离样本点最近的4个点中有一个为蓝色三个为红色三角形点,由少数服从多数原则,将样本点划归为红色范围。
                当K=9时  距离最近的9个样本点有三个蓝色六个红色,故划归红色类别。
     
      5、优缺点
     
           算法优点
                简单
                易于理解
                容易实现
                通过对K的选择可具备丢噪音数据的健壮性
       
        算法缺点
          
       需要大量空间储存所有已知实例
              算法复杂度高(需要比较所有已知实例与要分类的实例)
              当其样本分布不平衡时,比如其中一类样本过大(实例数量过多)占主导的时候,新的未知实例容易被归类为这个主导样本,因为这类样本实例的数量过大,但这个新的未知实例实际并木接近目标样本
     
      6、改进版
      可以按照以距离为反比的形式给决策增加权重。
     
     
     
      
     
  • 相关阅读:
    js之判断非空
    解决eclipse添加不了tomcat8的问题
    Java(eclipse)连接MySQL8.0以上版本数据库方式
    面试必备的:Redis和MongoDB的区别
    简述关系型数据库和非关系型数据库
    非关系型数据库MongoDB初探,以及和Redis的对比
    day53:django:URL别名/反向解析&URL分发&命名空间&ORM多表操作修改/查询
    day52:django:ORM单表/多表操作
    day51:django:dispatch&模板渲染&过滤器&标签&组件&静态文件配置
    day50:django:有名/无名分组&FBV/CBV
  • 原文地址:https://www.cnblogs.com/kang06/p/9377391.html
Copyright © 2011-2022 走看看