zoukankan      html  css  js  c++  java
  • 机器学习入门之分类算法——决策树

    决策树是一类常见的分类算法,它思路清晰简单,实现也并不困难。正如其名,决策树是基于树状结构来决策的。《机器学习》中有一个例子,按决策树的来判断“这是一个好的西瓜吗?”,首先,我们要看看西瓜的纹理,如果纹理清晰,我们再看它的根蒂是否蜷缩,色泽是否青绿,触感是否硬滑....如果都是,那它大概率是一颗好瓜。画成图大概如下:

    显然地,决策树的每个分支都是对某个属性的测试,而测试的结果将会导出结果、或者进一步的测试。一般的,一颗决策树包含一个根结点、若干个内部节点和叶节点;由根到叶,组成了一条测试序列,叶是测试结果,根和内部节点是测试属性。通过培养一颗决策树,我们就可以对数据进行有效的分类。接下来我们看看西瓜书上的算法图:

    类别C表示分类结果(如好瓜),Dv表示按属性a的取值划分出的子集(如触感=硬滑的瓜)

    要注意的是,这里的三条递归终止条件:

    (1)样本全为同一类别;

    (2)属性集空或者样本在属性集上取值一致;

    (3)分支节点为空。这三条必须全都满足,不然在生成树的时候,要么准确率低,要么出错。

    决策树的重点就在于第八行的选取划分属性,其余的步骤都是基本一直的。简单来讲,入门决策树的划分选择有三:

    (1)信息增益(或称熵减,即id3);

    (2)信息增率(即c4.5);

    (3)基尼指数(数据纯度,即cart)。

    (1)id3

    id3的划分基于信息熵(香农熵),熵越大的数据,其不纯的程度也就越大,相反,熵越小的数据,其纯度也就越高,换言之,更为有条理(比方说根蒂蜷缩的西瓜大多是好瓜)。而id3(基于熵减的划分),就是寻找能够在最大程度上降低熵的划分属性,从而达到提高数据纯度的目的(分类也就越准确)。

    熵计算公式:

    信息增益公式:

    |D|表示数据集的数据个数(模)

    在id3中,只需遍历A中的所有可划分的属性,选择gain最大的那一个属性来划分即可。

    (2)c4.5

    上文所说的id3在使用时会有一个问题,就是它会倾向于那些可取值较多的属性(划分完之后生成若干个小子集),即它更倾向于数量(属性中可能的取值数)而非质量(属性中单个取值的熵减)。c4.5就是倾向于质量的划分选择。

    具体公式如下:

    不过,c4.5也并非只注重于信息增率(增率),它是现在信息增量高于平均水平的属性中,找出增率最大的那一个,所以既兼顾了数量也兼顾了质量。

    (3)cart

    cart方法与上面两种都不太类似,它用了一种称为“基尼指数”的标准来划分属性,如下:

    Pk为类别为k的数据的概率(好瓜比例),按上面的公式,基尼指数表示任意选两个样本,其类别不一致的概率,即一个集合里面数据不纯的程度。

    如果加上权重,那么基尼指数如下:

    即划分时选取基尼指数最小的那一个属性。

    决策树的代码和测试数据等我推到github上再贴出来。

    以上是三种比较常见的决策树,但这三种决策树的效果还可以进一步再优化,有两种思路:

    (1):进行剪枝,增强泛化能力;

    (2):集成,用RF、Adaboost等算法来增强泛化能力和准确率。

    下一步我打算写一写关于决策树在集成算法方面的应用。

  • 相关阅读:
    python定义函数时的默认返回值
    【UNIX网络编程】配置unp.h和apueerror.h
    【UNIX网络编程】套接字编程简介
    【UNIX网络编程】概述
    【VSCode】Ubuntu下VSC编译运行c++程序
    【UNIX网络编程】传输层:TCP、UDP和SCTP
    nginx跨域配置
    centOS7.*安装nginx和简单使用
    nginx日志切割
    nginx静态资源防盗链
  • 原文地址:https://www.cnblogs.com/rosehip/p/11193663.html
Copyright © 2011-2022 走看看