初级算法梳理(三)

1、信息论基础(熵 联合熵 条件熵 信息增益 基尼不纯度)
为了构造决策树,算法首先创建一个根节点,然后评估表中的所有观测变量,从中选出最合适的变量对数据进行拆分。为了选择合适的变量,我们需要一种方法来衡量数据集合中各种因素的混合情况。对于混杂程度的测度,有几种度量方式可供选择:


  • I ( x ) I(x) I(x)被称为随机变量 x的自信息 (self-information),描述的是随机变量的某个事件发生所带来的信息量。
    I ( x ) = − l o g p ( x ) I ( x ) = − l o g p ( x ) I(x)=−logp(x)I(x)=−logp(x) I(x)=logp(x)I(x)=logp(x)

H ( X ) H(X) H(X)是随机变量x 的熵,它是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。
传输的平均信息量可以通过求 I ( x ) = − l o g p ( x ) I(x)=−logp(x) I(x)=logp(x)关于概率分布 p ( x ) p(x) p(x)的期望得到

H ( X ) = − ∑ x p ( x ) l o g p ( x ) = − ∑ i = 1 n p ( x i ) l o g p ( x i ) H(X)=−∑xp(x)logp(x)=−∑i=1np(xi)logp(xi) H(X)=xp(x)logp(x)=i=1np(xi)logp(xi)

将一维随机变量分布推广到多维随机变量分布,则其联合熵 (Joint entropy) 为:
在这里插入图片描述

基尼不纯度:

从一个数据集中随机选取子项,度量其被错误的划分到其他组里的概率。(书上解释)

一个随机事件变成它的对立事件的概率(简单理解)
计算公式:(fi为某概率事件发生的概率)
在这里插入图片描述
下图是相关曲线图,可以参考数据挖掘导论的98页:

在这里插入图片描述

从上图可以看出,基尼系数和熵之半的曲线非常接近,仅仅在45度角附近误差稍大。因此,基尼系数可以做为熵模型的一个近似替代。

讲解案例:

一个随机事件X ,P(X=0)= 0.5 ,P(X=1)=0.5,那么基尼不纯度就为 P(X=0)(1 - P(X=0)) + P(X=1)(1 - P(X=1)) = 0.5一个随机事件Y ,P(Y=0)= 0.1 ,P(Y=1)=0.9,那么基尼不纯度就为P(Y=0)(1 - P(Y=0)) + P(Y=1)(1 -P(Y=1)) = 0.18很明显 X比Y更混乱,因为两个都为0.5 很难判断哪个发生。而Y就确定得多,Y=1发生的概率很大。而基尼不纯度也就越小。

2.决策树的不同分类算法(ID3算法、C4.5、CART分类树)的原理及应用场景
决策树学习采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一颗熵值下降最快的树,到叶子节点处,熵值为0。决策树呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。学习时,利用训练数据,根据损失函数最小化的原则建立决策树模型;预测时,对新的数据,利用决策模型进行分类。
决策树的构造过程一般分为3个部分,分别是特征选择、决策树生产和决策树裁剪。

(1)特征选择:

特征选择表示从众多的特征中选择一个特征作为当前节点分裂的标准,如何选择特征有不同的量化评估方法,从而衍生出不同的决策树,如ID3(通过信息增益选择特征)、C4.5(通过信息增益比选择特征)、CART(通过Gini指数选择特征)等。

目的(准则):使用某特征对数据集划分之后,各数据子集的纯度要比划分钱的数据集D的纯度高(也就是不确定性要比划分前数据集D的不确定性低)

(2)决策树的生成

根据选择的特征评估标准,从上至下递归地生成子节点,直到数据集不可分则停止决策树停止生长。这个过程实际上就是使用满足划分准则的特征不断的将数据集划分成纯度更高,不确定行更小的子集的过程。对于当前数据集的每一次划分,都希望根据某个特征划分之后的各个子集的纯度更高,不确定性更小。

(3)决策树的裁剪

决策树容易过拟合,一般需要剪枝来缩小树结构规模、缓解过拟合。

  • ID3算法

ID3算法的原理就是以信息增益来度量特征,选择信息增益最大的特征进行分裂。算法有点类似贪婪算法,每次选择都选择信息增益最大。
算法实现
优势:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据

劣势:可能会产生过度匹配问题

适用数据类型:标称型
应用场景:适于处理大规模的学习问题。
决策树–ID3 算法(一)
1. 决策树的基本认
2. ID3算法介
3. 信息熵与信息增
4. ID3算法的C++实现

  • C4.5
    其中,C4.5是基于ID3的,对分裂属性的目标函数做出了改进。
  • CART
    不同于C4.5,CART本质是对特征空间进行二元划分(即CART生成的决策树是一棵二叉树),并能够对标量属性(nominal attribute)与连续属性(continuous attribute)进行分裂。
    决策树模型 ID3/C4.5/CART算法比较
    3、回归树原理

4、决策树防止过拟合手段
(1). 及早停止增长树法,在ID3算法完美分类训练数据之前停止增长树;

(2). 后修剪法(post-prune),即允许树过度拟合数据,然后对这个树后修剪。
5、模型评估

(1)、保持方法

在保持(Holdout)方法中,将被标记的原始数据划分成两个不想交的集合,分别称为训练集合检验集。在训练数据集上归纳分类模型,在检验集上评估模型的性能。训练集和检验集的划分比例通常根据分析家的判断(例如,50-50,或者2/3作为训练集、1/3作为检验集)。分类器的准确率根据模型在检验集上的准确率估计。

(2)、随机二次抽样

可以多次重复保持方法来改进对分类器性能的估计,这种方法称作随机二次抽样(random subsampling)。设acci是第i次迭代的模型准确率,总准确率是 a c c s u b = ∑ i = 1 k a c c i / k 0 a c c_{s u b}=\sum_{i=1}^{k} a c c_{i} / k_{0} accsub=i=1kacci/k0。随机二次抽样也会遇到一些与保持方法同样的问题,因为在训练阶段也没有利用尽可能多的数据。并且,由于它没有控制每个记录用于训练和检验的次数,因此,有些用于训练的记录使用的频率可能比其他记录高很多。

3、交叉验证

替代随机二次抽样的一种方法是交叉验证(cross-validation)。在该方法中,每个记录用于训练的次数相同,并且恰好检验一次。为了解释该方法,假设把数据分为相同大小的两个子集,首先,我们选择一个子集作训练集,而另一个作检验集,然后交换两个集合的角色,原先作训练集的现在做检验集,反之亦然,这种方法叫做二折交叉验证。总误差通过对两次运行的误差求和得到。在这个例子中,每个样本各作一次训练样本和检验样本。k折交叉验证是对该方法的推广,把数据分为大小相同的k份,在每次运行,选择其中一份作检验集,而其余的全作为训练集,该过程重复k次,使得每份数据都用于检验恰好一次。同样,总误差是所有k次运行的误差之和。

4、自助法

以上方法都是假定训练记录采用不放回抽样,因此,训练集合检验集都不包含重复记录。在自助(bootstrap)方法中,训练记录采用有放回抽样,即已经选作训练的记录将放回原来的记录集中,使得它等机率地被重新抽取。如果原始数据有N个记录,可以证明,平均来说,大小为N的自助样本大约包含原始数据中63.2%的记录。这是因为一个记录被自助抽样抽取的概率是 1 − ( 1 − 1 / N ) N 1-(1-1 / N)^{N} 1(11/N)N,当N充分大时,该概率逐渐逼近 1 − e − 1 = 0.632 1-e^{-1}=0.632 1e1=0.632没有抽中的记录就成为检验集的一部分,将训练集建立的模型应用到检验集上,得到自助样本准确率的一个估计εiεi。抽样过程重复b次,产生b个自助样本。

按照如何计算分类器的总准确率,有几种不同的自助抽样法。常用的方法之一是.632自助(.632 bootstrap),它通过组合每个自助样本的准确率 ε i \varepsilon_{i} εi样本的训练集计算的准确率(accsaccs)计算总准确率(accbootaccboot):
a c c b o o t = 1 b ∑ i = 1 b ( 0.632 × ε i + 0.368 × a c c s ) a c c_{b o o t}=\frac{1}{b} \sum_{i=1}^{b}\left(0.632 \times \varepsilon_{i}+0.368 \times a c c_{s}\right) accboot=b1i=1b(0.632×εi+0.368×accs)

6、sklearn参数详解Python绘制决策树

总结应用场景

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
初级算法 - Python实现 初级算法是帮助入门算法的一部分,它们旨在帮助初学者掌握算法和数据结构,并提高编程能力。在Python中,我们可以使用各种排序算法来实现初级算法。 常见的初级排序算法包括选择排序、插入排序、冒泡排序和希尔排序。选择排序是一种简单直观的排序方法,它通过不断选择最小的元素并将其放在正确的位置上来排序。插入排序则是通过逐步构建有序序列来排序,将每个元素插入到已排序的序列中的适当位置。冒泡排序通过重复比较相邻的元素并交换它们的位置来排序。希尔排序是一种改进的插入排序算法,通过将比较的元素间隔逐步缩小来提高效率。 选择合适的排序算法取决于具体的应用场景和数据规模。在Python中,我们可以根据需要选择相应的算法来实现初级排序。这些算法在性能上可能有所差异,因此在实际应用中需要根据情况进行选择。 总结起来,初级算法在Python中可以通过实现选择排序、插入排序、冒泡排序和希尔排序等常见的排序算法来实现。这些算法可以帮助初学者掌握基本的排序方法,并在实践中提高编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [用 Python 学习算法:初级排序算法](https://blog.csdn.net/wangs0622/article/details/78690519)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [力扣初级算法(Python)](https://blog.csdn.net/qq_41068877/article/details/121952963)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值