决策树算法总结

合集下载

决策树(理论篇)

决策树(理论篇)

决策树(理论篇)定义 由⼀个决策图和可能的结果(包括资源成本和风险组成),⽤来创建到达⽬的的规划。

——维基百科通俗理解 给定⼀个输⼊值,从树节点不断往下⾛,直⾄⾛到叶节点,这个叶节点就是对输⼊值的⼀个预测或者分类。

算法分类ID3(Iterative Dichotomiser 3,迭代⼆叉树3代)历史 ID3算法是由Ross Quinlan发明的⽤于⽣成决策树的算法,此算法建⽴在奥卡姆剃⼑上。

奥卡姆剃⼑⼜称为奥坎的剃⼑,意为简约之法则,也就是假设越少越好,或者“⽤较少的东西,同样可以做好的事情”,即越是⼩型的决策树越优于⼤的决策树。

当然ID3它的⽬的并不是为了⽣成越⼩的决策树,这只是这个算法的⼀个哲学基础。

引⼊ 信息熵。

熵是热⼒学中的概念,是⼀种测量在动⼒学⽅⾯不能做功的能量总数,也就是当总体熵的增加,其做功能⼒也下降,熵的量度正是能量退化的指标——维基百科。

⾹农将“熵”的概念引⼊到了信息论中,故在信息论中被称为信息熵,它是对不确定性的测量,熵越⾼,不确定性越⼤,熵越低,不确定性越低。

那么到底何为“信息熵”?它是衡量信息量的⼀个数值。

那么何⼜为“信息量”?我们常常听到某段⽂字信息量好⼤,某张图信息量好⼤,实际上指的是这段消息(消息是信息的物理表现形式,信息是其内涵——《通信原理》)所包含的信息很多,换句话说传输信息的多少可以采⽤“信息量”去衡量。

这⾥的消息和信息并不完全对等,有可能出现消息很⼤很多,但所蕴含有⽤的信息很少,也就是我们常说的“你说了那么多(消息多),但对我来说没⽤(信息少,即信息量少)”。

这也进⼀步解释了消息量的定义是传输信息的多少。

进⼀步讲,什么样的消息才能构成信息呢? 我们为什么会常常发出感叹“某段⽂字的信息量好⼤”,得到这条消息时是不是有点出乎你的意料呢?⽐如,X男和X男在同⼀张床上发出不可描述的声⾳,这段消息对于你来讲可能就会发出“信息量好⼤”的感叹。

再⽐如,某情侣在同⼀张床上发出不可描述的声⾳,这段消息对于你来讲可能就是家常便饭,并不会发出“信息量好⼤”的感叹。

人工智能十大算法总结

人工智能十大算法总结

人工智能十大算法总结人工智能(Artificial Intelligence,简称AI)是一门涉及模拟和复制人类智能的科学和工程学科。

在人工智能的发展过程中,算法起着至关重要的作用。

算法是用来解决问题的一系列步骤和规则。

下面是人工智能领域中十大重要的算法总结。

一、回归算法回归算法用于预测数值型数据的结果。

常见的回归算法有线性回归、多项式回归、岭回归等。

这些算法通过建立数学模型来找到输入和输出之间的关系,从而进行预测。

二、决策树算法决策树算法是一种基于树形结构的模型,可用于分类和回归问题。

它将数据集拆分成决策节点和叶节点,并根据特征的属性进行分支。

决策树算法易于理解和解释,并且可以处理非线性关系。

三、支持向量机算法支持向量机算法用于分类和回归分析。

它通过在特征空间中构造一个超平面来将样本划分为不同的类别。

支持向量机算法具有高维特征空间的能力和较强的泛化能力。

四、聚类算法聚类算法用于将相似的数据点分组到一起。

常见的聚类算法有K均值聚类、层次聚类等。

聚类算法能够帮助我们发现数据中的模式和结构,从而对数据进行分析和处理。

五、人工神经网络算法人工神经网络是一种类似于生物神经系统的模型。

它由大量的节点和连接组成,可以模拟人脑的学习和推理过程。

人工神经网络算法可以用于分类、识别、预测等任务。

六、遗传算法遗传算法模拟生物进化的原理,通过模拟选择、交叉和变异等操作来寻找最优解。

遗传算法常用于求解复杂优化问题,如旅行商问题、背包问题等。

七、贝叶斯网络算法贝叶斯网络是一种概率图模型,用于表示变量之间的依赖关系。

贝叶斯网络算法可以用于推断和预测问题,如文本分类、诊断系统等。

它具有直观、可解释性强的特点。

八、深度学习算法深度学习是一种基于神经网络的算法,具有多层次的结构。

它可以通过无监督或监督学习来进行模型训练和参数优化。

深度学习算法在图像识别、语音识别等领域取得了显著的成果。

九、马尔科夫决策过程算法马尔科夫决策过程是一种基于状态转移的决策模型。

决策数学知识点总结

决策数学知识点总结

决策数学知识点总结决策数学是运用数学方法和模型研究决策问题的一门交叉学科。

它将数学的思维方式和技巧运用到决策问题的建模、分析和解决过程中,帮助决策者做出科学、合理的决策。

本文将围绕决策数学的主要知识点进行总结,包括决策模型、决策分析、风险管理、优化理论等方面的内容。

一、决策模型1. 决策树模型决策树模型是一种常用的决策分析方法,它通过构建决策树来描述决策问题的各种可能的决策选择和结果,以及它们之间的关系。

决策树模型可以帮助决策者更直观地理解决策问题,从而做出更科学、更有效的决策。

2. 马尔可夫决策过程马尔可夫决策过程是描述在某种随机环境下,决策者为了达到某种目标而采取不同行为的一种数学模型。

它通过建立状态、决策和转移概率等要素的数学关系来描述决策问题,从而找到最优的决策策略。

3. 线性规划模型线性规划模型是一种常用的优化模型,它将决策问题转化为一个线性约束条件下的最优化问题,即通过确定决策变量的取值来最大化或最小化某种目标函数。

线性规划模型在实际应用中有着广泛的应用,包括生产调度、资源配置、运输优化等领域。

二、决策分析1. 决策目标设定决策目标设定是决策分析的第一步,它涉及到对决策问题的目标、约束条件和评价指标等方面的明确定义和量化,从而为后续的决策分析提供基础。

2. 决策风险评估在进行决策分析时,需要对决策问题的风险进行评估,包括确定风险的可能性和影响程度,从而为决策者提供科学的风险管理建议。

3. 决策方案评价决策方案评价是决策分析的核心环节,它通过对各种决策方案的优劣进行定量分析和比较,从而为决策者提供最优的决策建议。

三、风险管理1. 风险度量与分析风险度量与分析是对决策问题中各种风险因素进行量化和分析的过程,包括确定风险的可能性、影响程度和相互关联等方面的内容。

2. 风险控制与规避在面临各种风险时,决策者需要采取相应的控制和规避措施来降低风险的发生和影响,包括风险的传播路径、控制措施和应急预案等内容。

stata 因果森林算法

stata 因果森林算法

stata 因果森林算法摘要:1.引言2.Stata 因果森林算法概述3.Stata 因果森林算法的实现4.Stata 因果森林算法的应用实例5.总结正文:1.引言近年来,因果推断在实证研究中越来越受到重视。

其中,因果森林算法作为一种基于决策树的集成学习方法,被广泛应用于处理多元回归模型中的因果关系识别问题。

本文将从Stata 软件的角度,介绍因果森林算法的原理、实现和应用实例。

2.Stata 因果森林算法概述因果森林(causal forest)算法是一种基于决策树的集成学习方法,其目的是通过构建多个决策树来估计变量间的因果关系。

因果森林算法继承了决策树的优点,如易于理解和实现、对数据中的噪声和缺失值具有较强的鲁棒性等。

同时,它还可以处理多元回归模型中的因果关系识别问题,提高估计结果的准确性。

3.Stata 因果森林算法的实现在Stata 中,因果森林算法的实现主要依赖于两个命令:`causalforest`和`causalplot`。

其中,`causalforest`命令用于运行因果森林算法,`causalplot`命令用于绘制因果森林图。

具体使用方法如下:```* 加载数据use "your_data.csv", clear* 运行因果森林算法causalforest using(your_response_variable)* 绘制因果森林图causalplot```4.Stata 因果森林算法的应用实例假设我们有一份关于学生学业表现的数据,其中包括学生的性别、年级、家庭收入等变量,我们希望找出对学生学业表现影响最大的因素。

此时,我们可以使用Stata 的因果森林算法来解决这个问题。

具体步骤如下:```* 加载数据use "student_performance.csv", clear* 运行因果森林算法causalforest using(student_performance)* 查看因果关系估计结果estimates* 绘制因果森林图causalplot```通过上述步骤,我们可以得到学生学业表现的因果关系估计结果,并根据估计结果绘制出因果森林图。

算法模型归纳总结

算法模型归纳总结

算法模型归纳总结1. 引言算法模型在计算机科学和人工智能领域扮演着至关重要的角色。

通过对大数据的处理和分析,算法模型能够提供有效的解决方案和预测结果。

本文将对几种常见的算法模型进行归纳总结,包括线性回归、决策树、支持向量机和神经网络。

2. 线性回归线性回归是一种用于预测连续数值的算法模型。

它假设自变量和因变量之间存在线性关系,并试图找到最佳拟合直线。

线性回归的优点是计算简单,但容易受到异常值的影响。

为了解决这个问题,可以使用岭回归或Lasso回归等正则化方法进行改进。

3. 决策树决策树是一种用于分类和回归的算法模型。

它通过构建一个树形结构来生成决策规则。

每个内部节点表示一个属性或特征,每个叶节点表示一个类别或数值。

决策树的优点是易于理解和解释,但容易过拟合。

为了解决过拟合问题,可以使用剪枝技术或集成学习方法,如随机森林。

4. 支持向量机支持向量机是一种用于分类和回归的算法模型。

它通过构建一个最佳超平面来实现数据的划分。

支持向量机的优点是对于高维数据和非线性问题有较强的适应能力。

但对于大规模数据集和多类别问题,支持向量机的计算复杂度较高。

为了解决这个问题,可以使用核函数或者基于SVM的快速算法。

5. 神经网络神经网络是一种模拟人脑神经系统结构和功能的计算模型。

它由多个相互连接的神经元层组成,每个神经元通过激活函数对输入进行处理。

神经网络的优点是适用于各种问题和数据类型,但在训练过程中需要大量的计算资源和时间。

为了改善神经网络的训练效率和泛化能力,可以使用卷积神经网络或循环神经网络等改进模型。

6. 总结本文对线性回归、决策树、支持向量机和神经网络等常见的算法模型进行了归纳总结。

每种算法模型都有其适用的场景和特点,选择合适的算法模型是解决实际问题的关键。

在实际应用中,可以根据数据类型、数据规模和问题要求等因素进行选择和优化。

通过不断深入学习和实践,我们可以更好地理解和运用算法模型,提高数据分析和预测的准确性和效率。

机器学习-决策树之ID3算法

机器学习-决策树之ID3算法

机器学习-决策树之ID3算法概述决策树(Decision Tree)是⼀种⾮参数的有监督学习⽅法,它是⼀种树形结构,所以叫决策树。

它能够从⼀系列有特征和标签的数据中总结出决策规则,并⽤树状图的结构来呈现这些规则,以解决分类和回归问题。

决策树算法容易理解,适⽤各种数据,在解决各种问题时都有良好表现,尤其是以树模型为核⼼的各种集成算法,在各个⾏业和领域都有⼴泛的应⽤。

决策树的核⼼有三种算法:ID3:ID3 是最早提出的决策树算法,他就是利⽤信息增益来选择特征的。

C4.5:他是 ID3 的改进版,他不是直接使⽤信息增益,⽽是引⼊“信息增益⽐”指标作为特征的选择依据。

CART:这种算法即可以⽤于分类,也可以⽤于回归问题。

CART 算法使⽤了基尼系数取代了信息熵模型。

ID3算法是本教程的重点要讲的内容,其余两种算法将会后续推出。

数据集下⾯举个例⼦,会使⽤ID3算法帮助我们判断今天的天⽓适不适合出去打球。

进⾏判断之前,需要历史天⽓数据和打球活动数据,以下为历史数据集S。

天数天⽓⽓温湿度风⼒是否打球D1晴朗热湿弱否D2晴朗热湿强否D3⼤⾬热湿弱是D4⼩⾬中等湿弱是D5⼩⾬凉爽正常弱是D6⼩⾬凉爽正常强否D7⼤⾬凉爽正常强是D8晴朗中等湿弱否D9晴朗凉爽正常弱是D10⼩⾬中等正常弱是D11晴朗中等正常强是D12⼤⾬中等湿强是D13⼤⾬热正常弱是D14⼩⾬中等湿强否ID3算法ID3算法会选择当前信息增益最⼤的特征作为树中新的节点。

计算过程如下:步骤1假设S为完整的数据集,数据标签(数据类别)共有n个类别,分别为C1,...,Cn。

Si对应Ci类别下数据⼦集,因此,数据集S的信息熵计算如下:\[Entropy(S)=-\sum_{i=1}^{n}p_{i}\log_{2}{p_{i}} \]其中,pi是数据样本为Ci的概率,因此:\[p_i=\frac{|S_i|}{|S|} \]|Si|是类别Ci在数据集S中的数据数量,|S|是数据集S中的数据数量。

分类模型归纳总结

分类模型归纳总结在机器学习和数据挖掘领域,分类是一种常见的任务,它旨在根据给定的特征将数据点分为不同的类别。

分类模型是用于解决分类问题的数学模型。

本文将对一些常见的分类模型进行归纳总结,包括逻辑回归、决策树、支持向量机和随机森林等。

一、逻辑回归(Logistic Regression)逻辑回归是一种广泛应用于分类问题的线性模型。

它通过将输入特征与权重相乘,并通过一个激活函数(如sigmoid函数)将结果映射到[0, 1]的范围内,从而预测样本属于某个类别的概率。

逻辑回归具有简单、高效的特点,适用于二分类问题。

二、决策树(Decision Tree)决策树是一种基于树结构的分类模型。

它通过将特征空间划分为多个矩形区域,每个区域对应一个类别,从而实现对样本进行分类。

决策树具有易解释、易理解的特点,可处理离散和连续特征,并且具备较好的鲁棒性。

三、支持向量机(Support Vector Machine)支持向量机是一种经典的分类模型,通过在特征空间中构造最优超平面,将不同类别的样本分开。

支持向量机可处理线性可分和线性不可分的问题,在高维空间中表现出色,并具有一定的抗噪能力。

四、随机森林(Random Forest)随机森林是一种集成学习方法,由多个决策树组成。

它通过对训练集随机采样,并对每个采样子集构建一个决策树,最终通过投票或平均等方式得到分类结果。

随机森林具有较高的准确性和较好的泛化能力,对于处理高维数据和大规模数据集具有一定优势。

五、朴素贝叶斯分类器(Naive Bayes Classifier)朴素贝叶斯分类器是一种基于贝叶斯定理的概率分类模型。

它假设各个特征之间相互独立,并根据训练数据计算类别的先验概率和特征的条件概率,从而进行分类预测。

朴素贝叶斯分类器简单、高效,并在处理文本分类等领域表现突出。

六、神经网络(Neural Networks)神经网络是一类模拟人脑结构和功能的机器学习模型。

它包含输入层、隐藏层和输出层,通过不同层之间的连接权重进行信息传递和特征提取,最终实现分类任务。

人工智能算法总结

人工智能算法总结
人工智能(Artificial Intelligence,简称AI)是计算机科学领域里的一个研究领域,旨在开发实现人类智能行为的技术计算系统。

它涉及计算机科学,神经科学,机器学习,计算机图形学,智能控制,自然语言处理,机器视觉,人工生物学等多领域。

人工智能的算法可以从以下几个方面着手:
1、算法:
算法是人工智能算法中的核心算法之一,用于解决各种实际问题。

根据问题的不同特点,算法有广度优先算法、深度优先算法、启发式算法、简单的局部最优算法等。

2、决策树算法:
决策树算法是一种描述和分析决策过程的有效算法,它可以把复杂的决策分解成一系列简单的决策,从而使决策过程变得容易理解和控制。

此外,决策树算法还有助于将模糊输入转换为明确的决策结果。

3、神经网络算法:
神经网络算法可以解决复杂的优化问题,识别模式和解释数据,它是人工智能中最重要的算法之一,其机制可以通过连接多个神经元实现对外界信息进行复杂处理。

4、机器学习算法:
机器学习算法是一种用于从数据中学习知识和模式的算法,它可以通过给定的训练样本,从中提取特征。

id3算法计算过程

id3算法计算过程ID3算法是一种决策树学习算法,用于从给定的数据集中产生一个决策树。

决策树是一种常见的分类和回归方法,它通过一系列的规则和决策节点来预测目标变量的值。

下面是ID3算法的具体计算过程:2.计算信息增益:信息增益用于衡量在给定特征值条件下关于目标变量的不确定性减少。

对于每个特征,需要计算其信息增益。

由于ID3算法仅处理离散特征,因此需要将所有连续特征进行离散化处理。

a. 对于每个特征,计算它的熵。

熵可以衡量一个随机变量的不确定性。

计算公式为:熵 = -Σ(p*log2(p)),其中p表示不同类别的比例。

b.对于每个特征,计算它的条件熵。

条件熵表示在已知一些特征值的条件下,目标变量的不确定性。

条件熵的计算公式为:条件熵=Σ(p*熵),其中p表示特征值的比例。

c.计算信息增益,信息增益表示特征引入后不确定性的减少程度。

信息增益的计算公式为:信息增益=熵-条件熵。

3.选择信息增益最大的特征作为节点:在第2步中,对于每个特征都计算了信息增益,选择信息增益最大的特征作为决策树的节点。

该特征将用于划分数据集,将数据集中的样本分成不同的子集。

4.重复步骤1-3:根据划分后的子集重复执行上述步骤,直到满足终止条件。

终止条件可以是以下几种情况之一:所有的样本都属于同一类别,没有剩余的特征可以选择,或者达到了预先设定的最大深度。

5.构建决策树:通过不断地重复步骤1-4,最终构建出一棵完整的决策树。

ID3算法的核心思想是选择信息增益最大的特征来进行划分。

信息增益越大,说明该特征对于分类的贡献越大。

总体而言,ID3算法是一种自上而下的贪心算法,通过选择最佳特征来划分数据集,并递归地构建决策树。

ID3算法的优点是简单快速,易于理解和实现。

然而,它也有一些缺点,例如对缺失数据敏感,对于具有大量特征和类别的数据集效果不好。

为了解决这些问题,后续的决策树学习算法如C4.5和CART算法进行了改进和优化。

人工智能算法与应用案例实践总结

人工智能算法与应用案例实践总结人工智能(Artificial Intelligence,简称AI)是一门研究如何使计算机能够像人一样思考、学习和决策的科学。

随着计算机技术的飞速发展,人工智能已经成为现代社会的热门话题。

在AI的研究中,算法是至关重要的一环,它们是实现人工智能的核心。

本文将总结几种常见的人工智能算法,并结合实际应用案例进行分析和讨论。

一、决策树算法决策树算法(Decision Tree)是一种常见的分类和回归方法。

它通过构建一个树状的模型,将数据集划分为多个子集,然后根据特征值的不同来进行决策。

决策树算法的优势在于易于理解和解释,适用于处理具有离散特征的数据。

一个典型的决策树案例是银行信用评估,通过对客户的个人信息和财务状况进行分析,决策树可以预测客户是否具备信用还款能力。

二、神经网络算法神经网络算法(Neural Network)是一种模仿人脑神经网络结构和工作原理的算法。

它由多个神经元和相互连接的层级组成,通过学习和训练来识别和分类模式。

神经网络算法的优势在于可以处理大规模和复杂的数据集,适用于图像识别、语音识别等领域。

一个典型的神经网络应用案例是人脸识别,通过训练神经网络模型,可以实现对人脸图像的自动识别和比对。

三、遗传算法遗传算法(Genetic Algorithm)是一种模拟自然进化的算法。

它通过模拟遗传、变异和选择的过程来搜索最优解。

遗传算法的优势在于能够在大规模的搜索空间中找到较优解,适用于优化问题。

一个典型的遗传算法应用案例是旅行商问题,通过遗传算法可以找到最短路径,实现旅行商的最优路径规划。

四、支持向量机算法支持向量机算法(Support Vector Machine,简称SVM)是一种常用的分类和回归方法。

它通过构建一个超平面来对数据进行分类,使得两类数据之间的间隔最大化。

支持向量机算法的优势在于可以处理高维度和非线性的数据,适用于文本分类、图像识别等领域。

一个典型的支持向量机应用案例是垃圾邮件过滤,通过训练SVM模型,可以对邮件进行分类,将垃圾邮件过滤出去。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

决策树 研发二部 文件状态: [ ] 草稿 [ ] 正式发布 [ ] 正在修改 文件标识: 当前版本: 1.0 作者: 张宏超 完成日期: 2019年3月8日 目录 1. 算法介绍 .................................................................................................................................... 1 1.1. 分支节点选取 .............................................................................................................. 1 1.2. 构建树 .......................................................................................................................... 3 1.3. 剪枝 ............................................................................................................................ 10 2. sk-learn中的使用 .................................................................................................................... 12 3. sk-learn中源码分析 ................................................................................................................ 13 1. 算法介绍 决策树算法是机器学习中的经典算法之一,既可以作为分类算法,也可以作为回归算法。决策树算法又被发展出很多不同的版本,按照时间上分,目前主要包括,ID3、C4.5和CART版本算法。其中ID3版本的决策树算法是最早出现的,可以用来做分类算法。C4.5是针对ID3的不足出现的优化版本,也用来做分类。CART也是针对ID3优化出现的,既可以做分类,可以做回归。 决策树算法的本质其实很类似我们的if-elseif-else语句,通过条件作为分支依据,最终的数学模型就是一颗树。不过在决策树算法中我们需要重点考虑选取分支条件的理由,以及谁先判断谁后判断,包括最后对过拟合的处理,也就是剪枝。这是我们之前写if语句时不会考虑的问题。 决策树算法主要分为以下3个步骤: 1. 分支节点选取 2. 构建树 3. 剪枝

1.1. 分支节点选取 分支节点选取,也就是寻找分支节点的最优解。既然要寻找最优,那么必须要有一个衡量标准,也就是需要量化这个优劣性。常用的衡量指标有熵和基尼系数。 熵:熵用来表示信息的混乱程度,值越大表示越混乱,包含的信息量也就越多。比如,A班有10个男生1个女生,B班有5个男生5个女生,那么B班的熵值就比A班大,也就是B班信息越混乱。

基尼系数:同上,也可以作为信息混乱程度的衡量指标。 有了量化指标后,就可以衡量使用某个分支条件前后,信息混乱程度的收敛效果了。使用分支前的混乱程度,减去分支后的混乱程度,结果越大,表示效果越好。 #计算熵值 def entropy(dataSet): tNum = len(dataSet) print(tNum) #用来保存标签对应的个数的,比如,男:6,女:5 labels = {} for node in dataSet: curL = node[-1] #获取标签 if curL not in labels.keys(): labels[curL] = 0 #如果没有记录过该种标签,就记录并初始化为0 labels[curL] += 1 #将标签记录个数加1

#此时labels中保存了所有标签和对应的个数 res = 0 #计算公式为-p*logp,p为标签出现概率 for node in labels: p = float(labels[node]) / tNum res -= p * log(p, 2) return res

#计算基尼系数 def gini(dataSet): tNum = len(dataSet) print(tNum) # 用来保存标签对应的个数的,比如,男:6,女:5 labels = {} for node in dataSet: curL = node[-1] # 获取标签 if curL not in labels.keys(): labels[curL] = 0 # 如果没有记录过该种标签,就记录并初始化为0 labels[curL] += 1 # 将标签记录个数加1

# 此时labels中保存了所有标签和对应的个数 res = 1 # 计算公式为-p*logp,p为标签出现概率 for node in labels: p = float(labels[node]) / tNum res -= p * p return res

1.2. 构建树

ID3算法:利用信息熵增益,决定选取哪个特征作为分支节点。分支前的总样本熵值-分支后的熵值总和=信息熵增益。

T1的信息熵增益:1 – 13/20*0.961 - 7/20*0.863 = 0.073 T2的信息熵增益:1 – 12/20*0.812 - 8/20*0.544 = 0.295 所以使用T2作为分支特征更优。

ID3算法建树: 依据前面的逻辑,递归寻找最优分支节点,直到下面情况结束 1. 叶节点已经属于同一标签 2. 虽然叶节点不属于同一标签,但是特征已经用完了 3. 熵小于预先设置的阈值 4. 树的深度达到了预先设置的阈值 ID3算法的不足:

A:10个 B:10个 特征T1 A:5个 B:8个 A:5个 B:2个 A:10个 B:10个

特征T2 A:3个 B:9个 A:7个 B:1个 1. 取值多的特征比取值少的特征更容易被选取。 2. 不包含剪枝操作,过拟合严重 3. 特征取值必须是离散的,或者有限的区间的。

于是有了改进算法C4.5 C4.5算法:基于ID3算法进行了改进,首先,针对ID3的不足1,采用信息增益率取代ID3中使用信息增益而造成的偏向于选取取值较多的特征作为分裂点的问题。针对ID3的不足2,采用剪枝操作,缓解过拟合问题。针对ID3的不足3,采用将连续值先排列,然后逐个尝试分裂,找到连续值中的最佳分裂点。

信息增益率的计算:先计算信息增益,然后除以spliteInfo。spliteInfo为分裂后的子集合的函数,假设分裂后的子集合个数为sub1和sub2,total为分裂前的个数。spliteInfo = -sub1 / total * log(sub1 / total) – sub2 / total * log(sub2 / total)

#index:特征序号 #value:特征值 #该方法表示将index对应特征的值为value的集合返回,返回集合中不包含index对应的特征 def spliteDataSet(dataSet, index, value): newDataSet = [] for node in dataSet: if node[index] == value: #[0,index)列的数据 newData = node[:index] #[index+1,最后]列的数据 newData.extend(node[index + 1:]) newDataSet.append(newData) return newDataSet;

#选择最优分裂项 def chooseBestFeature(dataSet): #特征个数 featureNum = len(dataSet[0]) - 1 #计算整体样本的熵值 baseEntropy = entropy(dataSet) print("baseEntropy = %f"%(baseEntropy)) #保存最大的信息增益率 maxInfoGainRatio = 0.0 bestFeatureId = -1 for i in range(featureNum): #获取特征所有可能的值 featureValues = [] for node in dataSet: featureValues.append(node[i]) print(featureValues) #将特征值去除重复 uniqueFeatureValues = set(featureValues) print(uniqueFeatureValues) #按照i特征分裂之后的熵值 newEntropy = 0.0 #分裂信息 spliteInfo = 0.0 #按照i所表示的特征,开始分裂数据集 for value in uniqueFeatureValues: #当i属性等于value时的分裂结果 subDataSet = spliteDataSet(dataSet, i, value) print(subDataSet) #计算占比 p = float(len(subDataSet)) / float(len(dataSet)) newEntropy += p * entropy(subDataSet) spliteInfo += -p * log(p, 2) #计算信息增益 infoGain = baseEntropy - newEntropy #计算信息增益率 if spliteInfo == 0: continue infoGainRatio = infoGain / spliteInfo if infoGainRatio > maxInfoGainRatio: maxInfoGainRatio = infoGainRatio bestFeatureId = i return bestFeatureId

C4.5算法的不足: 1. 如果存在连续值的特征需要做排序等处理,计算比较耗时 2. 只能用于分类使用

于是有了CART算法 CART算法:也是基于ID3算法优化而来,支持分类和回归,使用基尼系数(分类

相关文档
最新文档