初级算法梳理 任务三:决策树算法梳理

学习内容

  1. 信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)
    熵:熵是自信息量的期望。熵一般说一个信息源,这个信息源可以有多个随机事件,所有随机事件发生的概率和为1。这个信息源的熵就是信息源产生的随机事件的自信息量的期望,即 。熵越大系统越混乱,也越稳定,因为事物总是自发的变得无序。熵越大系统不确定性越大。

交叉熵:通常一个信息源中随机事件的概率是无法得到的,之能通过观察信息源产生的随机事件,来对随机事件发生的概率进行估计。这就会出现随机事件的两个概率,一个是随机事件的真正概率,和估计得到的概率。一般来说我们根据估计得到的概率来对随机事件进行编码,或者估计其重要性,或计算自信息量。但实际上并不会如我们所愿,因为我们估计的概率不准确,也就是我们对随机事件的信息量或重要性的估计不准确。交叉熵可以得到在估计概率为时候,我们的期望自信息量会是多少,或者期望最短编码长度是多少,即:。

真实熵与交叉熵:信息源的熵越大,系统越不确定,比如信息源s有两个随机事件a和b,如果各自概率都是0.5,那么你就比较难以把握,如果各自概率是0.01和0.99,那么你就比较有把握,或者说该信息源对你来说不确定性小。信息源的熵在不同背景下有不同的意义,通常都是根据事件自信息量的不同来采取不同的行为,所以对自信息量的求期望,通常也是对行为价值求期望。比如编码中,将简短的编码分配到自信息量少事件上,那么熵就相当于平均编码长度,当编码长度完全按照自信息量的比例来分配,就得到了最短的编码长度。而在交叉熵中,我们无法知道真实的概率分布p,只能根据估计的概率分布q来决策我们的行为,所以从一定程度上来说,交叉熵是对我们按照概率q来决策我们行为的价值的估计。

相对熵: Kullback–Leibler divergence或KLD或KL-散度,是等于交叉熵减去真实的熵,即:。相对熵是交叉熵相对于真实熵所带来的误差。

联合熵:就是两个信息源的联合分布的熵。

条件熵:给定y后x的熵。本来x和y都不确定就是联合熵。给定y后,不确定程度可能减少,减少的部分是y的不确定程度,也就是条件熵等于联合熵减去y的熵,即:。x的不确定加上y的不确定是大于x和y的联合不确定,因为x和y可能会存在关联,即:。两个信息源的熵大雨单个信息源,给定其中一个信息源后,另一个信息源的不确定性小于等于它原来的不确定性。比如天气是否下雨有一定的不确定性,给定是否刮风,那么就有助于我们对天是否下雨进行判断,不确定性减少,如果给定的信息是小明是否认识apple这个单词,那么对于我们判断是否下雨没有任何帮助,不确定性不变。

信息增益:在决策树中是指引入信息的信息后,熵降低的量即:。根据百度百科,相对熵也是信息增益(可能是因为,相对熵等于交叉熵减去真实熵,而交叉熵表示真实的状态,即我们不知道真实的分布情况下的熵,而真实熵是理想状态,即得到真实的分布情况下的熵,所以相对熵的信息增益是指,我们还需要多少信息,才能达到理想状态的熵。交叉熵大,代表的是更无序的状态,我们当然是更喜欢熵小的有序状态了)。

2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景

ID3算法:

ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点;再对子节点递归的调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一个决策树。ID3相当于用极大似然估计法进行概率模型的选择。

C4.5算法:

C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进,C4.5在生成的过程中,用信息增益比来选择特征。

CART分类树:

CART(Classification And Regression Tree),即可以用作分类也可以用作回归,相较于ID3算法和C4.5算法,CART算法的用途更加广泛。sklearn中的决策树就是使用CART算法构建的。

CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法。CART构建决策树用的是二叉树结构,在每个叶节点上预测的是概率分布,也就是在输入给定的条件下输出的条件概率分布。

CART算法由以下两步组成:

(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;

(2)决策树剪枝:用验证集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。

CART决策树的生成就是递归的调用二叉树的过程。对回归树用平方误差最小化准则(mse)或绝对误差最小化准则(mae),对分类树用基尼指数最小化准则,进行特征选择,生成二叉树。

原文:https://blog.csdn.net/qq_24519677/article/details/82084718

  1. 回归树原理

一个回归树对应着输入空间(即特征空间)的一个划分以及在划分单元上的输出值。分类树中,我们采用信息论中的方法,通过计算选择最佳划分点。而在回归树中,采用的是启发式的方法。假如我们有n个特征,每个特征有si(i∈(1,n))si(i∈(1,n))个取值,那我们遍历所有特征,尝试该特征所有取值,对空间进行划分,直到取到特征j的取值s,使得损失函数最小,这样就得到了一个划分点

  1. 决策树防止过拟合手段
    预剪枝:是在决策树的生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分即结束树的构建并将当前节点标记为叶结点。
    后剪枝:是先从训练集生成一棵完整的决策树,然后自底向上地对叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化为性能提升,则将该子树替换为叶结点。泛化性能的提升可以使用交叉验证数据来检查修剪的效果,通过使用交叉验证数据,测试扩展节点是否会带来改进。如果显示会带来改进,那么我们可以继续扩展该节点。但是,如果精度降低,则不应该扩展,节点应该转换为叶节点。

  2. 模型评估
    1、保持方法
    在保持(Holdout)方法中,将被标记的原始数据划分成两个不想交的集合,分别称为训练集合检验集。在训练数据集上归纳分类模型,在检验集上评估模型的性能。训练集和检验集的划分比例通常根据分析家的判断(例如,50-50,或者2/3作为训练集、1/3作为检验集)。分类器的准确率根据模型在检验集上的准确率估计。
    2、随机二次抽样
    可以多次重复保持方法来改进对分类器性能的估计,这种方法称作随机二次抽样(random subsampling)。设acci是第i次迭代的模型准确率,总准确率是accsub=∑ki=1acci/k。随机二次抽样也会遇到一些与保持方法同样的问题,因为在训练阶段也没有利用尽可能多的数据。并且,由于它没有控制每个记录用于训练和检验的次数,因此,有些用于训练的记录使用的频率可能比其他记录高很多。
    3、交叉验证
    替代随机二次抽样的一种方法是交叉验证(cross-validation)。在该方法中,每个记录用于训练的次数相同,并且恰好检验一次。为了解释该方法,假设把数据分为相同大小的两个子集,首先,我们选择一个子集作训练集,而另一个作检验集,然后交换两个集合的角色,原先作训练集的现在做检验集,反之亦然,这种方法叫做二折交叉验证。总误差通过对两次运行的误差求和得到。在这个例子中,每个样本各作一次训练样本和检验样本。k折交叉验证是对该方法的推广,把数据分为大小相同的k份,在每次运行,选择其中一份作检验集,而其余的全作为训练集,该过程重复k次,使得每份数据都用于检验恰好一次。同样,总误差是所有k次运行的误差之和。
    4、自助法
    以上方法都是假定训练记录采用不放回抽样,因此,训练集合检验集都不包含重复记录。在自助(bootstrap)方法中,训练记录采用有放回抽样,即已经选作训练的记录将放回原来的记录集中,使得它等机率地被重新抽取。如果原始数据有N个记录,可以证明,平均来说,大小为N的自助样本大约包含原始数据中63.2%的记录。这是因为一个记录被自助抽样抽取的概率是1−(1−1/N)N,当N充分大时,该概率逐渐逼近1−e−1=0.632。没有抽中的记录就成为检验集的一部分,将训练集建立的模型应用到检验集上,得到自助样本准确率的一个估计εi。抽样过程重复b次,产生b个自助样本。

  3. sklearn参数详解,Python绘制决策树
    class sklearn.tree.DecisionTreeClassifier(criterion=‘gini’, splitter=‘best’, max_depth=None, min_samples_split=2,min_samples_leaf =1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None,class_weight=None, presort=False)

criterion:string类型,可选(默认为"gini")
衡量分类的质量。支持的标准有"gini"代表的是Gini impurity(不纯度)与"entropy"代表的是information gain(信息增益)。

splitter:string类型,可选(默认为"best")
一种用来在节点中选择分类的策略。支持的策略有"best",选择最好的分类,"random"选择最好的随机分类。

max_features:int,float,string or None 可选(默认为None)
在进行分类时需要考虑的特征数。
1.如果是int,在每次分类是都要考虑max_features个特征。
2.如果是float,那么max_features是一个百分率并且分类时需要考虑的特征数是int(max_features*n_features,其中n_features是训练完成时发特征数)。
3.如果是auto,max_features=sqrt(n_features)
4.如果是sqrt,max_features=sqrt(n_features)
5.如果是log2,max_features=log2(n_features)
6.如果是None,max_features=n_features
注意:至少找到一个样本点有效的被分类时,搜索分类才会停止。

max_depth:int or None,可选(默认为"None")
表示树的最大深度。如果是"None",则节点会一直扩展直到所有的叶子都是纯的或者所有的叶子节点都包含少于min_samples_split个样本点。忽视max_leaf_nodes是不是为None。

min_samples_split:int,float,可选(默认为2)
区分一个内部节点需要的最少的样本数。
1.如果是int,将其最为最小的样本数。
2.如果是float,min_samples_split是一个百分率并且ceil(min_samples_split*n_samples)是每个分类需要的样本数。ceil是取大于或等于指定表达式的最小整数。

min_samples_leaf:int,float,可选(默认为1)
一个叶节点所需要的最小样本数:
1.如果是int,则其为最小样本数
2.如果是float,则它是一个百分率并且ceil(min_samples_leaf*n_samples)是每个节点所需的样本数。

min_weight_fraction_leaf:float,可选(默认为0)
一个叶节点的输入样本所需要的最小的加权分数。

max_leaf_nodes:int,None 可选(默认为None)
在最优方法中使用max_leaf_nodes构建一个树。最好的节点是在杂质相对减少。如果是None则对叶节点的数目没有限制。如果不是None则不考虑max_depth.

class_weight:dict,list of dicts,“Banlanced” or None,可选(默认为None)
表示在表{class_label:weight}中的类的关联权值。如果没有指定,所有类的权值都为1。对于多输出问题,一列字典的顺序可以与一列y的次序相同。
"balanced"模型使用y的值去自动适应权值,并且是以输入数据中类的频率的反比例。如:n_samples/(n_classes*np.bincount(y))。
对于多输出,每列y的权值都会想乘。
如果sample_weight已经指定了,这些权值将于samples以合适的方法相乘。

random_state:int,RandomState instance or None
如果是int,random_state 是随机数字发生器的种子;如果是RandomState,random_state是随机数字发生器,如果是None,随机数字发生器是np.random使用的RandomState instance.

persort:bool,可选(默认为False)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值