机器学习基础学习笔记——决策树算法

决策树算法(Decision Tree)

一、决策树算法原理:

决策树/判定树:是一个类似于流程图的树结构;其中,每个内部结点表示在一个属性上的测试,每个分支代表一个属性输出,而每二个树叶结点代表类或者类分布。树的最顶层是根节点。

熵(Entropy)概念:

信息的信息量大小和它的不确定性有直接的关系。使用比特(bit)来衡量信息的多少,信息熵的计算公式如下:

其中p1,p2,....,pn是概率。

变量的不确定性越大,熵也越大。

二、决策树归纳算法(ID3算法)

选择属性结点:

信息获取量(Information Gain):Gain(D,A)=H(D)−H(D∣A)

通过A来作为结点分类获取了多少信息。

Demo:

类似的,Gain(income)=0.029   Gain(student)=0.151  Gain(credit_rating)=0.048

所以选择age作为第一个根节点,如下图:

算法描述:

  • 树以代表训练样本的单个结点开始(步骤1)。
  • 如果样本都在同一个类,则该结点成为树叶,并用该类标号(步骤2和3)。
  • 否则,算法使用称为信息增益的基于熵的度量作为启发信息,选择最好的将样本分类的属性(步骤7)。在算法的该版本中所有的属性都是分类的,即离散值。连续属性必须离散化。
  • 对测试属性的每个已知的值,创建一个分枝,并据此划分样本(步骤8-10)。
  • 使用前面相同的过程,递归的形成每个划分的样本判定树。一旦一个属性出现在一个结点上,就不必在该结点的任何后代上考虑它(步骤13)。
  • 递归划分步骤仅当下列条件之一成立停止:(a)给定结点的所有样本属于同一类(步骤2和3)。(b)没有剩余属性可以用来进一步划分样本(步骤4)。在此情况下,使用多数表决(步骤5)。这设计将给定的结点转换成树叶,并用样本中的多数所在的类标记它。替换的,可以存放结点样本的类分布(c)分枝test_attribute=a:没有样本(步骤11)。在这种情况下,以samples中的多数类创建一个树叶(步骤12)

决策树算法很容易过拟合(overfitting),剪枝算法就是用来防止决策树过拟合,提高泛华性能的方法。

修剪树枝(避免overfitting)

      先剪枝:分到一定程度就不继续向下创建树。是在树的生长过程中设定一个指标,当达到该指标时就停止生长,这样做容易产生“视界局限”,就是一旦停止分支,使得节点N成为叶节点,就断绝了其后继节点进行“好”的分支操作的任何可能性。不严格的说这些已停止的分支会误导学习算法,导致产生的树不纯度降差最大的地方过分靠近根节点。

      后剪枝:创建好树后,按照一定的纯度去除一部分叶子。后剪枝中树首先要充分生长,直到叶节点都有最小的不纯度值为止,因而可以克服“视界局限”。然后对所有相邻的成对叶节点考虑是否消去它们,如果消去能引起令人满意的不纯度增长,那么执行消去,并令它们的公共父节点成为新的叶节点。这种“合并”叶节点的做法和节点分支的过程恰好相反,经过剪枝后叶节点常常会分布在很宽的层次上,树也变得非平衡。后剪枝技术的优点是克服了“视界局限”效应,而且无需保留部分样本用于交叉验证,所以可以充分利用全部训练集的信息。但后剪枝的计算量代价比预剪枝方法大得多,特别是在大样本集中,不过对于小样本的情况,后剪枝方法还是优于预剪枝方法的。

其他算法:

C4.5

Classification and Regression Trees(CART)

共同点:都是贪心算法,自上而下(Top-down approach)

区别:属性选择度量方法不同:C4.5(gain ratio),CART(gini index),ID3(Information Gain)

决策树算法的优缺点

决策树的优点:直观,便于理解,小规模数据集有效

决策树的缺点:处理连续变量不好(离散化会影响);类别较多时,错误增加的比较快;可规模性一般(数据集非常大时算法复杂度增加的非常大)

猜你喜欢

转载自blog.csdn.net/weixin_43405837/article/details/84190845