首先,我先以自己的理解对决策树做一个简单的解释定义:
决策树是一个分类算法,它是根据已知的数据集来归纳出一个分类规则,对未知数据进行分类的方法。其具体操作是,根据原训练集,递归的选取最优特征,然后根据最优特征的取值,对相应的数据集进行划分归类。
一般而言,决策树的具体实现分为三个过程:
a.特征选择 b.决策树生成 c.决策树剪枝
其中,在进行特征选择时,会有一个衡量特征的标准,这个标准不唯一,但较为常见的是信息增益、信息增益比及Gini指数。
这三个标准的区别是,Gini指数是CART决策树的特征衡量标准,信息增益比与信息增益较为通用,但相比与信息增益,信息增益比会比信息增益较为准确,这是因为信息增益会比较偏向于取值较多的特征,而信息增益比避免了这种情况(具体原因可通过信息增益与信息增益比的数学表达式证明得出)
对于决策树的生成,先考虑普通的决策树.......
普通决策树的生成过程大致是一样的,不同的就是特征选取规则那一块,根据信息增益与信息增益比两种规则,有较为常见的两种决策树生成过程,分别是ID3算法和C4.5算法
Input:数据集D,特征集A,停止阈值e
Output:决策树T
def maketree(D):
if 数据集D中的实例属于同一个类:
print('T为单节点树,将该类作为结点的类标记')
return T
elif 特征集A为空:
print('T为单节点树,将D中归属某类实例数最多的类作为该结点的类标记')
return T
else:
list = []
for a in A:
list.append(calculate(g(D,a))) #计算信息增益或信息增益比
if max(list) < e:
print('T为单节点树,将D中实例数最大的类标记为结点的类标记')
return T
sa = arg max(list) #sa为信息增益最大的特征
print('根据最优特征sa的取值将数据集D划分为D1、D2……Dn,将其最为子结点,并将Di中实例数最大的类作为该结点的类标记')
return T
#对每一个子结点,以Di为数据集,A-sa为特征集,递归调用maketree()函数,最终返回T
接下来,考虑普通决策树的剪枝........
由于决策树生成的时候,是递归地产生的决策树,只到不能继续进行为止,所以,其会带来过拟合的影响,所以我们要对其剪枝。
剪枝的具体操作,顾名思义,就是在已经生成的决策树上剪掉一些叶结点或者子树。
剪枝通过极小化正则化的loss函数来实现。
正则化的LossFunction=对训练书的效果+a*决策树的叶结点个数
===================================================================================
最后,来看一下CART,也就是分类回归树,其中分类树与回归树是俩种不同的树,,,这里简略介绍一下这两种树
首先我们得有一个概念,那就是CART树是一个二叉树,也就是说,特征集中的特征取值只有两个取值。
先看回归树:
一个回归树其实就是对输入空间的一个划分及在划分上的输出值。在构建回归树的过程中对原数据集的预测误差衡量方法选用的是平方误差最小。
再看分类树:
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
1万+

被折叠的 条评论
为什么被折叠?



