决策树算法学习笔记

决策树算法

决策树的基本思想与人自身的决策机制非常类似,都是基于树结构进行决策,即对于不论什么问题。我们都先抽出当中的几个主要特征。然后对这些特征一个一个的去考察,从而决定这个问题应该属于的类别。比如我们要去商场买电脑,我们一般要通过考察电脑的CPU。内存,硬盘。显存等这些特征来推断这台电脑是好电脑还是一般电脑。当我们做推断的时候。我们都是首先看这个电脑的CPU怎么样,是i3?i5?还是i7?假设是i7我们就有更大概率倾向于觉得这台电脑是好电脑。然后我们再依次考察内存,硬盘。显存等。终于根据这些特征决定其性能的好坏。

这样我们就能够构建出一颗决策树来:

当然,对于不同的人,需求不同,所以对于特征考量的重要性也不同,比如常常玩儿游戏的人会更在乎显存,而常常看电影的则会更加在乎硬盘的大小,这时候由于其需求的不同。对于好电脑的定位也可能会不同。也会构建不同的树。因此决策树算法的核心在于怎样选择特征从而构建出我们要想要的决策树从而能够更加通用的去进行分类。为了能够构建决策树,须要介绍特征选择算法,为了能够让构建的决策树更加通用,也就是泛化能力更强,须要介绍剪枝算法

变量定义:

D ——— 样本集合

pk ——— 在样本集合D中第k类样本所占的比例

Y ——— 样本类别集合

特征选择算法

熵与信息增益

在维基百科中,对熵的定义是这样的“entropy (more specifically, Shannon entropy) is the expected value (average) of the information contained in each message.”。我们能够知道熵是用来定义一条消息中所包括的的信息量的,即熵越大,信息量越大,熵越小,信息量越小。那么我们能够知道,假设一个消息中的信息大部分都属于同一个类别,即消息中的信息纯度非常高,信息的确定性非常大,信息不混乱的时候,信息量是非常小的。这时候熵也是非常小的。而假设一个消息中包括全部信息且这些信息是均匀分布的,即并没有那个信息占有主导,那么这时候我们能够觉得消息中的信息的纯度是非常低的,信息的不确定性非常大,信息量也非常大,由于其包括全部可能的信息,这时候熵应该是最大的。

即信息的纯度越高,熵越大,纯度越低,熵越小。

集合 D 的熵定义为

H(D)=?∑k=1|Y|pklog2pk

通过该公式我们也能够看出。假设集合D中的信息纯度越高,确定性越大。熵越小。而信息纯度越低,确定性越小则熵越大。假设D中样本所涉及的问题是一个二分类问题。即|Y|=2,这时候H(D)=?∑|Y|k=1pklog2pk就能够展开为H(D)=?(p0log2p0+(1?p0)log2(1?p0))。那么我们能够知道当p0=0/1的时候,集合D的信息纯度最高。不确定性为0,全部的数据都属于同一个类别,此时熵取得最小值0;而当p0=0.5的时候,D的信息纯度最低,不确定性最高,由于全部可能类别的数据都是均匀分布的。即取不论什么类别的数据都有可能且可能性是相等的,这时候其熵取得最大值1。

条件熵

H(D|A)=∑i=1npiH(D|A=ai)

是指当已知信息(属性)A的时候,其所包括的信息量。即在已知A的条件下。D中信息的纯度情况,不确定性的情况

信息增益(互信息)

Gain(D,A)=H(D)?H(D|A)

是指数据集D在已知条件A的情况下使得信息纯度提升的情况。即所包括信息不确定性减少的情况。

通过该公式我们能够知道,当H(D|A)非常小。即在已知条件A的时候,集合D的纯度非常高,不确定性非常小。也就是说由于A的确定使得使得集合D的纯度大幅度的提高。即A对数据分类的影响非常大,不确定性急剧减小。是数据分类的主要影响因素;而当H(D|A)非常大的时候。则正好相反,此时即使在已知A的条件下。数据集D依旧非常混乱,纯度非常低,那么我们能够觉得属性A对于数据的分类影响非常小。因此,在极端情况。即当H(D|A)=0的时候,说明当已知A时,数据集D纯度达到了最高。各个数据的类别就全然确定。那么信息增益也是最大的;当H(D|A)=H(D)的时候,说明A对于数据纯度的提高为0,此时A的存在与否。对于数据的混乱程度毫无影响,即对于分类情况,其效果为0,信息增益最小。

信息增益率

Gainratio(D,A)=Gain(D,A)IV(A)

当中

IV(A)=?∑i=1n|Di||D|log|Di||D|

n为特征A的取值个数,|Di|是特征A取值ai的时候的个体数,当特征取值越多。通常IV(A)的值也会越大。

特征选择

ID3 & C4.5

我们在选择特征的时候。都希望所选择的特征能够使得数据的纯度提升最大,不确定性减少最多。最好能够通过该特征的选择使得数据完毕分类。通过上面对熵和信息增益的描写叙述我们能够知道。这样的描写叙述与信息增益的功效正好相符。因此我们每次选择特征的时候,都希望选择信息增益最大的特征。

这样的利用信息增益进行选择的算法就是ID3算法

可是我们能够发现,当使用信息增益进行特征选择的时候,其倾向于选择取值数目多的属性。

假设数据集D为10台电脑,分别标ID号为0?9。我们要对这10台电脑进行分类。假设此时我们把ID号作为属性特征之中的一个,那么此时ID号的信息增益必定是最大的。由于其将每个个体都作为一个类别直接分成10类,此时ID3算法必定会选择ID号作为主特征进行分类。其生成的决策树将会是一层十个分支的树结构,这显然并非我们想要的,由于我们知道ID号为一个无效特征。基于这个原因,我们能够使用信息增益率来作为选择特征的根据。由于根据上面对信息增益率的描写叙述我们知道当特征取值过多的时候,分母IV(A)的取值会变大。从而使得总体的信息增益率可能变小。从而能够避免选择取值非常多的无效特征的问题(如ID)。而使用信息增益率作为特征选择的根据的算法称为C4.5算法

CART算法

CART是Classfication and Regression Tree的简称,其即能够用于分类也能够用于回归,该算法使用的是基尼指数来进行特征的选择

基尼值

基尼值的定义为

Gini(D)=∑k=1|Y|∑k′≠kpkpk′

其反映了从数据集D中随机抽取两个样本,其类别不一致的概率。由于反应的是数据类别不一致的概率,因此假设数据集D的纯度越高。则基尼值越小。这里注意,∑k′≠kpk′=1?pk,因此基尼值还能够表示为

Gini(D)=∑k=1|Y|pk(1?pk)=1?∑k=1|Y|p2k

基尼指数

对于属性A,其基尼指数定义为

Giniindex(D,A)=∑v=1V|Dv||D|Gini(Dv)

。当中V是属性A取得的不同的值。

在选择属性的时候,要选择那个使得划分后基尼指数最小的属性作为最优化分属性。

剪枝算法

在构建决策树的时候,有时候为了更好的学习训练样本,可能会学过头。使得决策树分支过多。以至于将训练数据自身的一些特征作为了全部数据的一般特征从而导致学习过拟合。因此我们须要一些方法来去掉一些分支从而减少过拟合的风险。

剪枝算法有两种,预剪枝和后剪枝。预剪枝是指在构建决策树的过程中,对每个节点在划分之前进行预计。假设划分无法带来决策树泛化性能的提升,则放弃这次划分,将该节点标记为叶子节点。而后剪枝则是先通过训练集生成一个决策树,然后再自底向上的对非叶子节点进行考察。假设将该节点相应的子树转化为一个叶子节点不会减少泛化性能。则将该子树替换为叶子节点。我们能够看到预剪枝的基本思想是贪心算法,其基于贪心策略防止这些分支的展开,这可能会导致所生成的欠拟合的问题。

而后剪枝由于通常会保留比预剪枝很多其它的分支,因此欠拟合的风险要小非常多。泛化性能通常优于预剪枝。可是后剪枝过程是在生成决策树之后,须要从底向上对树中全部非叶子节点都考察一遍,因此其训练时间要比预剪枝和不剪枝都要打非常多。

时间: 2024-10-19 10:09:47

决策树算法学习笔记的相关文章

[转]机器学习——C4.5 决策树算法学习

1. 算法背景介绍 分类树(决策树)是一种十分常用的分类方法.它是一种监管学习,所谓监管学习说白了很简单,就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类.这样的机器学习就被称之为监督学习.C4.5分类树就是决策树算法中最流行的一种.下面给出一个数据集作为算法例子的基础,比如有这么一个数据集,如下: 我们将以这个数据集作讨论的基础.进行分类的目的就是根据某一天的天气状态,如天气,温度,湿度,是否刮风,来

机器学习实践之决策树算法学习

关于本文说明,本人原博客地址位于http://blog.csdn.net/qq_37608890,本文来自笔者于2017年12月06日 18:06:30所撰写内容(http://blog.csdn.net/qq_37608890/article/details/78731169).   本文根据最近学习机器学习书籍 网络文章的情况,特将一些学习思路做了归纳整理,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. 一.决策树(decision tree)概述 1.决策树概念 决策树(decis

转载:scikit-learn学习之决策树算法

版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ====================================================================== 本系列博客主要参考 Scikit-Learn 官方网站上的每一个算法进行,并进行部分翻译,如有错误,请大家指正    ===========================================

《机器学习实战》基于信息论的三种决策树算法(ID3,C4.5,CART)

============================================================================================ <机器学习实战>系列博客是博主阅读<机器学习实战>这本书的笔记,包含对其中算法的理解和算法的Python代码实现 另外博主这里有机器学习实战这本书的所有算法源代码和算法所用到的源文件,有需要的留言 如需转载请注明出处,谢谢 ======================================

《机器学习导论》第三章 贝叶斯决策定理 学习笔记

在机器学习领域,我们碰到的第一个问题就是:如何选择特征量. 可是看了一些资料,这点好像都是一笔带过,因为很多都是所谓的不可观测量,如何把不可观测量量化呢?这个或许能给机器学习带来新的契机,就像当年牛顿把力.质量.加速度等模糊的概念定义下来,经典物理出现了前所未有的发展,香农把信息量化,造就了信息革命. 以前觉得贝叶斯好像没有大家说的那么神奇,现在知道,是因为当年对它的理解就有问题,贝叶斯更重要的一点应该是能够在加入evidence的情况下,从先验概率进化到后验概率,这点简直就是机器学习的内涵啊

Spark机器学习(6):决策树算法

1. 决策树基本知识 决策树就是通过一系列规则对数据进行分类的一种算法,可以分为分类树和回归树两类,分类树处理离散变量的,回归树是处理连续变量. 样本一般都有很多个特征,有的特征对分类起很大的作用,有的特征对分类作用很小,甚至没有作用.如决定是否对一个人贷款是,这个人的信用记录.收入等就是主要的判断依据,而性别.婚姻状况等等就是次要的判断依据.决策树构建的过程,就是根据特征的决定性程度,先使用决定性程度高的特征分类,再使用决定性程度低的特征分类,这样构建出一棵倒立的树,就是我们需要的决策树模型,

算法干货----决策树算法中的熵与信息增益

什么是决策树?为什么要用决策树? 决策树是一种二分树,或是多分数.对于大量数据的细分工作有很大帮助.在日常生活中,决策树的算法可谓是每天都在用.小到用户分类,大到辅助决策.实际上他的使用很多. 至于为什么要用到决策树,个人认为就是因为这种算法简单.代码实现起来主要就是IF-ELSE就可以实现.可这一算法的发展也是从ID3--->C4.5----->C5.0. 它的主要步骤就两个:1,建树 2,剪树 如何建树,就是如何分你的数据,按照哪种特性?比如人口统计数据,是按年龄,身高,体重,学历....

如何实现并应用决策树算法?

本文对决策树算法进行简单的总结和梳理,并对著名的决策树算法ID3(Iterative Dichotomiser 迭代二分器)进行实现,实现采用Python语言,一句老梗,“人生苦短,我用Python”,Python确实能够省很多语言方面的事,从而可以让我们专注于问题和解决问题的逻辑. 根据不同的数据,我实现了三个版本的ID3算法,复杂度逐步提升: 1.纯标称值无缺失数据集 2.连续值和标称值混合且无缺失数据集 3.连续值和标称值混合,有缺失数据集 第一个算法参考了<机器学习实战>的大部分代码,

Hopfield Nets 学习笔记

最近想学RBM(限制玻尔兹曼机),找来Hinton在coursera上的神经网络课程,首先复习Hopfield 网络吧. Hopfield Nets with hidden Unit https://class.coursera.org/neuralnets-2012-001/lecture/125 简单来说,就是用隐藏节点的状态来表达输入节点的信息, 举例来说,二维图像里的一条边,在三维世界里可能对应无数条边, 如果将图像上每一条可能的线段都用一个"2D-Line"单元表示,这些单元