机器学习 --决策树学习(超级完整!含python代码!)

***********写在前面*************************************************************************************************

本文章所有内容都是我从其他前辈处摘录过来的,本人只是做了相应的整理,在文章中也标注了某一段的来源,文章结尾附了链接~~~~~~~~~~

***********以下是正文***********************************************************************************************

(泣血整理,内容很全,可以右侧查看目录,每个算法都有参考代码附上)

目录

一、 决策树与线性模型、逻辑回归的区别

   1. 决策树与线性模型

 

   2. 决策树与逻辑回归

二、决策树 

1.  基础介绍 :

2.  一个简单的例子:

3.  常用决策树算法:       

(A)ID3算法

(B)C4.5算法

(C)CART(Classification And Regression Tree,分类 回归树)算法

4. 总结三种算法:

三、 致敬:

【参考链接】


一、 决策树与线性模型、逻辑回归的区别

   1. 决策树与线性模型

 

         树形模型是一个一个特征进行处理,线性模型是所有特征给予权重相加得到一个新的值。

   2. 决策树与逻辑回归

逻辑回归是将所有特征变换为概率后,通过大于某一概率阈值的划分为一类,小于某一概率阈值的为另一类;而决策树是对每一个特征做一个划分。另外逻辑回归只能找到线性分割(输入特征x与logit之间是线性的,除非对x进行多维映射),而决策树可以找到非线性分割。 

       树形模型更加接近人的思维方式,可以产生可视化的分类规则,产生的模型具有可解释性(可以抽取规则)。树模型拟合出来的函数其实是分区间的阶梯函数。(以上来源于参考链接【1】)

二、决策树 

 

 

                                                                    (二分树示例图,来源于【2】)      

1.  基础介绍 :

       决策树是一种机器学习的方法。决策树是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果。

       决策树是一种十分常用的分类方法,属于有监督学习(Supervised Learning)。所谓有监管学习,就是给出一堆样本,每个样本都有一组属性和一个分类结果,也就是分类结果已知,那么通过学习这些样本得到一个决策树,这个决策树能够对新的数据给出正确的分类。

2.  一个简单的例子:

       下面通过一个简单的例子来说明决策树的生成过程:

 

决策树(Decision <wbr>Tree):通俗易懂之介绍

      【样本】:学生情况数据

 

      【样本量】:10

 

      【变量】:分数,出勤率,回答问题次数,作业提交率

 

      【目标变量】:是否为好学生

       然后用这一组附带分类结果的样本可以训练出多种多样的决策树,这里为了简化过程,我们假设决策树为二叉树,且类似于下面的左图:

 

                           决策树(Decision <wbr>Tree):通俗易懂之介绍决策树(Decision <wbr>Tree):通俗易懂之介绍

                                              (左图)                                                                    (右图)       

       通过学习上表的数据,可以得到A,B,C,D,E的具体值,而A,B,C,D,E则称为阈值。当然也可以有和左图完全不同的树形,比如右图这种的。

 

       所以决策树的生成主要分以下两步,这两步通常通过学习已经知道分类结果的样本来实现。

 

  1. 节点的分裂:一般当一个节点所代表的属性无法给出判断时,则选择将这一节点分成2个子节点(如不是二叉树的情况会分成n个子节点)
  2. 阈值的确定:选择适当的阈值使得分类错误率最小 (Training Error)。

3.  常用决策树算法:       

       比较常用的决策树算法有ID3,C4.5和CART(Classification And Regression Tree),CART的分类效果一般优于其他决策树。下面具体介绍每一种决策树的构造过程。(以上来源于参考链接【3】)

(A)ID3算法

  • ID3概述        

       ID3算法是由Quinlan首先提出的,该算法是以信息论为基础,以信息熵和信息增益为衡量标准,从而实现对数据的归纳分类。

 

  • ID3要解决的问题 

       1. 如何选择特征作为划分数据集的标准?

 

在ID3算法中,选择信息增益最大的属性作为当前的特征对数据集分类。信息增益的概念将在下面介绍,通过不断的选择特征对数据集不断划分;

             2. 如何判断划分的结束?

              第一种为划分出来的类属于同一个类;第二种为已经没有属性可供再分了。此时就结束了。

                                                     

 

  • ID3划分数据的依据

      ID3算法是以信息熵和信息增益作为衡量标准的分类算法。

      1. 信息熵(Entropy):

 

熵的概念主要是指信息的混乱程度,变量的不确定性越大,熵的值也就越大,熵的公式可以表示为:

                                 

                                           

其中,是类别在样本中出现的频率。

       2. 信息增益(Information gain):

 

信息增益指的是划分前后熵的变化,可以用下面的公式表示:

                             

 

其中,代表样本的属性,代表属性所有的取值集合,是属性的一个属性取值,的值为的样例集合。

(以上来源于参考链接【4】)

 

  • ID3参考代码
#!/usr/bin/env python
# encoding:utf-8

from math import log


def calEntropy(dataSet):
    """calcuate entropy(s)
       @dateSet a training set
    """
    size = len(dataSet)
    laberCount = {}
    for item in dataSet:
        laber = item[-1]
        if laber not in laberCount.keys():
            laberCount[laber] = 0
        laberCount[laber] += 1
    entropy = 0.0
    for laber in laberCount:
        prob = float(laberCount[laber])/size
        entropy -= prob * log(prob, 2)
    return entropy


def splitDataSet(dataSet, i, value):
    """split data set by value with a laber
       @dataSet a training sets
       @i the test laber axis
       @value the test value
    """
    retDataSet = []
    for item in dataSet:
        if item[i] == value:
            newData = item[:i]
            newData.extend(item
  • 7
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值