决策树算法
决策树学习三个过程:1.特征选择。2.构建决策树。3.剪枝
在学习决策树算法时首先需要知道一些基本概念:
信息
这个是熵和信息增益的基础概念,是对一个抽象事物的命名,无论用不用‘信息’来命名这种抽象事物,或者用其他名称来命名这种抽象事物,这种抽象事物是客观存在的。如果带分类的事物集合可以划分为多个类别当中,则某个类(xi)的信息(量)定义如下:
I(x)用来表示随机变量的信息,p(xi)指是当xi发生时的概率。当事件xi发生的概率p(xi)很小,但是它却发生了,那这个信息量相当大,比如买彩票中奖了,那么这个信息量肯定是很大的。相反,对于大概率事件,人们习以为常,那么这个事件的信息量就很小。这就体现在上述公式中。
信息熵
“信息熵”是度量样本纯度最常用的一种指标。所谓样本纯度,相反而言之就是凌乱程度。如一个数据集U中的样本都属于同一类,那么这时样本纯度最高而凌乱程度最低。信息熵定义为:
其中D表示样本集合,|y|样本中类别的数目, pk表示第k种分类占集合的比例。Ent(D)的值越小,D的纯度越高。
信息增益
信息增益 指的是,使用某一个属性a进行划分后,所带来的纯度提高的大小。一般而言,信息增益越大,意味着使用属性a来进行划分所获得的“纯度提升”越大。信息增益定义如下:
即
信息增益 = 根节点的信息熵 - 所有分支节点的信息熵的加权和
其中,权值为划分后属性a=ak节点中样本的数量与划分前节点中的样本数量的比值,即概率。概率确保了权重的和为1.
上图描述的是,使用属性a对样本集合D进行划分,因为a有V个取值,因此决策树会有V个分支。划分后每一个节点中样本的数量为属性a=ak的样本的数量。
问:如何理解:信息增益越大,意味着使用属性a来进行划分所获得的“纯度提升”越大?
答:因为Ent(D)的值越小,D的纯度越高。而划分后,所有的分支节点的Ent(Dk)的和就是划分后的信息熵,公式体现了前后的差距,如果差距越大,那么就说明划分后所有的分支节点的信息熵越小,纯度提升越大。
增益率
背景:当样本集中的某一属性取值使得所有样本被分到不同类别,此时分支的纯度达到最高,无需再继续划分。然而这样的决策树不具备泛化能力。事实上,信息增益准则对可取值较多的属性有所偏好。
为了减少这种偏好可能带来的影响,因此使用增益率代替信息增益准则选择划分属性。
即增益率(Gain_ratio(D,a))=信息增益Gain(D,a)/属性固有值(IV(a))。
属性A的可能取值越大,固有值IV(a)通常越大。
信息增益率偏向于可能取值减少的属性。因此C4.5算法不直接使用信息增益率来选择划分属性。
基尼值
基尼值 Gini(D) 反映了从数据集中随机抽取两个样本,其类别标记不一致的概率。当数据集的纯度越高,每次抽到不同类别标记的概率越小。打个比方,在一个袋子里装100个乒乓球,其中有99个白球,1个黄球,那么当我们随机抽取两个球的时候,很大概率是抽到两个白球。
所以数据集D的纯度可以用基尼值来度量,其定义如下:
基尼值越小,数据集D纯度越高。
基尼指数
基尼指数是针对于属性定义的,其反映的是,使用属性a进行划分后,所有分支中(使用基尼值度量的)纯度的加权和。
属性a的基尼指数定义如下:
我们在属性集合A中选择划分属性的时候,就选择使得划分后基尼指数最小的属性作为最优划分属性。CART就是用基尼指数来选择划分属性的。
什么是决策树:
决策树是在已知各种情况发生概率((各个样本数据出现中,不同特征出现的概率))的基础上,通过构建决策树来进行分析的一种方式。常用算法有ID3、C4.5、CART
决策树构建过程:
构建决策树的关键步骤是分裂属性,指在某个节点按照一类特征属性的不同划分构建不同的分支,使每个分支中的数据类别尽可能的纯。
决策树是一种贪心算法策略,只考虑当前数据特征的最好分割方式,不能回溯操作(只能从上往下分割)
步骤:
1.将所有的特征看成一个一个的节点
2.遍历所有特征,遍历到其中某一个特征时:遍历当前特征的所有分割方式,找到最好的分割点,将数据划分为不同的子节点,计算划分后子节点的纯度信息
3.在遍历的所有特征中,比较寻找最优的特征以及最优特征的最优划分方式,纯度越高,则对当前数据集进行分割操作
4.对新的子节点继续执行2-3步,直到每个最终的子节点都足够纯
决策树算法构建的停止条件:
1.(会导致过拟合)当子节点中只有一种类型的时候停止构建
2.(比较常用)当前节点种样本数小于某个值,同时迭代次数达到指定值,停止构建,此时使用该节点中出现最多的类别样本数据作为对应值
3.决策树三大算法:
1.ID3算法: 内部使用信息熵以及’信息增益‘来进行构建,每次迭代选择信息增益最大的特征属性作为分割属性。只支持离散的特征属性
优点:决策树构建速度快,实现简单
缺点:算法依赖样本中出现次数较多的特征属性,但是出现次数最多的属性并不一定最优
2.C4.5算法:使用’信息增益率‘来构建,在树的构建过程中会进行剪枝操作的优化,能够自动完成对连续属性的离散化处理。选择信息增益率大的属性进行分割
优点:准确率较高,实现简单
缺点:对数据集需要进行多次顺序扫描和排序,效率较低。
3.CART算法:使用'基尼系数'作为数据纯度的量化指标来构建,选择‘GINI增益率’来分割,越大的即作为当前数据集的分割属性.可用于分类和回归。(二叉树构建)
三种算法主要区别:CART构建的一定是二叉树,ID3,C4.5构建的不一定是二叉树
4.分类树和回归数的区别:
1.分类树是基于概率来构建的,采用信息增益、信息增益率、基尼系数来作为树的评价指标。
2.回归数是基于平均值来构建的,采用均方差作为树的评价指标。
5.决策树优化策略:
1.决策树欠拟合:没有将不同的数据类别划分开,原因:决策树深度太浅导致。
解决方案:1.增加树的深度。2.使用集成算法,boosting算法(GBDT)
2.决策树过拟合:学习能力太强,将噪音数据特征也学习到数据分割中了,原因:决策树深度太深导致
解决方案:1.剪枝(调整API中的参数)2.使用集成算法:Bagging算法(随机森林)
6.决策树的剪枝:
1.前置剪枝:是指在决策树生成过程中,对每个节点在划分前先进行估计,若当前的节点划分不能带来决策树泛化的提升,则停止划分并将当前节点标记为叶子节点。(深度浅,容易欠拟合)
2.后置剪枝:是指先从训练数据集中生成一课完整的决策树,然后自底向上对非叶子节点进行考察,若将该节点对应的子树替换为叶子结点能够带来决策树泛化能力的提升,则将该节点替换为叶子节点。
graphviz服务安装:
1.下载安装包(msi安装包): http://www.graphviz.org/;
2.执行下载好的安装包(双击msi安装包);
3.将graphviz的根目录下的bin文件夹路径添加到PATH环境变量中
4.安装Python的graphviz插件: pip install graphviz
5.安装python的pydotplus插件: pip install pydotplus
相关阅读
1.什么是决策树 / 判定树(Decision Tree)? 决策树是一个类似于流程图的树结构:其中,每个内部结点表示在一个属性上的测试,每个分支代表