基于决策树的分类算法
基于决策树方法的突发事件新闻分类

数据库技术Database Technology电子技术与软件工程Electronic Technology&Software Engineering 基于决策树方法的突发事件新闻分类文/闫宏丽罗永莲(晋中学院信息技术与工程学院山西省晋中市030619)摘要:本文针对突发事件新闻语料处理问题,提出了一种基于决策树的突发事件新闻分类方法。
该方法将成组出现的类别关键词作为决策树的属性项,通过判定文档的类别关键词组合情况实现分类。
算法通过词语组合以减少属性项个数,实现快速、准确地对文档进行分类。
实验结果表明,该方法的分类准确率达到87.8%,且易于实现,对其他新闻文本信息挖掘具有一定的借鉴意义。
关键词:文本分类;决策树方法;事件新闻1引言决策树学习是以实例为基础的归纳学习算法⑴,它着眼于从一组无次序、无规则的事例中推理出决策树表示形式的分类规则,通常用来对未知数据进行分类或预测⑵。
在J.R.Quinlan于1986年提出ID3算法以后,决策树方法在机器学习、知识发现领域得到了进一步应用及巨大的发展⑴。
突发事件新闻可分为多个类别,不同类别的新闻用词差别较大。
如交通事故新闻中出现“公路”、“侧翻”、“超速”、“客车”等的频率较高;疾病传染类的新闻则常出现“疫苗”、“隔离”、“预防”、“病毒”、“疗效”等词。
上述词语在一则新闻中很少单独出现,即一些相关词汇常同时出现在一个事件新闻中⑷役通过分析发现突发事件新闻文档具有以下特点:(1)事件新闻描述有许多相似之处。
(2)同一类事件用词类似,语句格式也很相似。
(3)不同事件有各自特殊的用语,可以用图1表示其部分层次结构。
根据上述特点,设计基于决策树的分类算法将成组出现的类别关键词作为决策树的属性项,本组词语在一篇新闻文档中同时出现的词数作为属性项的值,通过判定文档的词语组合情况实现分类。
2突发事件新闻的文档表示2.1提取类别组合词串对于训练样本集中的每一个类别,分别选取与此类别相关的词条作为本类特征词。
基于规则集划分的多决策树报文分类算法

/ / 返回至 i f ( c l a s s i f i e r= = ) 处
规则集划分完 成后 , 对 每个 规则 子集 分 别建 立 决策 树 。 传统 的决策树算法从根 节点开始 , 利用 选择 切分维度 和切分 点的启发式算法 , 连续 切分 多维 规则 空间 , 直至节点对应规则 子集包含 的规则数量不 大于预先 设定 的门限 , 该节 点为决策
树 的一 个 叶节 点 。
3 . 2 . 3 规 则 集 划 分 算 法描 述
以 表示 预先设定 的规则 子集 数量 。划分 过程 采 用递
归方 式 实 现 , 最 终 将 规 则 集划 分 为 个 规 则 子 集 , 5 [ 0 ] , , 5 [ 1 ] , , s [ 2 ] , …, [ M 一1 ] , 算法实现的伪码如下 :
— — — —
/ / 最后剩余的规则放人第 M 个规则 子集
i s [ i 】
M+ 一i :
s u bc l a s s i i f e r . p u s h b a c k ( t c mp — ol r e ) ;
c l a s s i i f e r ;
/ / 删除 c l a s s i i f e r中与 t e m p — r u l e 有交叠的规则
/ / 初始化: M个规则子集均为空
i n i t i a l i z e : i 0,s u b
—
本文对传统决策树结 构进行 改进 , 提 出两级决策 树级联
;
c l a s s i i f e r [ 0 】
算法 … : 1 ) 对每棵决策树 的根节 点 , 由于其对 应规则 集 中的
经典算法CART

经典算法CARTCART(Classification And Regression Trees)是一种经典的算法,用于建立分类和回归树模型。
它是由Leo Breiman在1984年首次提出的,目前被广泛应用于数据挖掘和机器学习领域。
CART算法基于决策树的思想,可以将输入数据集分割成多个小的子集,每个子集代表一个决策树节点。
通过对特征的选择和分割,可以使得每个子集的纯度更高,即同一类别的样本更多。
最终,CART算法会生成一棵满足纯度要求的决策树模型。
CART算法的主要步骤如下:1. 特征选择:CART算法使用其中一种准则来选择最佳的特征。
常用的准则包括基尼指数(Gini index)和信息增益(information gain)。
基尼指数衡量了数据集的不纯度,而信息增益衡量了特征对数据集纯度的贡献程度。
选择具有最大基尼指数或信息增益的特征作为当前节点的划分特征。
2.划分数据集:根据划分特征的取值将数据集分成多个子集。
对于离散特征,每个取值对应一个子集;对于连续特征,可以选择一个划分点将数据集分成两个子集。
3.递归建立子树:对每个子集,重复步骤1和步骤2,递归地建立子树。
直到达到停止条件,例如达到最大深度或纯度要求。
4.剪枝处理:为了避免过拟合,CART算法会对生成的决策树进行剪枝处理。
根据其中一种评估准则,剪去部分子树或合并子树。
CART算法具有一些优点,使得它成为一种经典的算法。
首先,CART算法可以处理离散特征和连续特征,非常灵活。
其次,CART算法生成的决策树易于理解和解释,可以用于预测和决策解释。
此外,CART算法还能处理多分类和回归问题。
然而,CART算法也存在一些限制。
首先,CART算法只能生成二叉树,即每个节点只有两个分支。
这可能会导致决策树过于复杂,需要更多的分支来表示复杂的决策边界。
其次,CART算法在处理高维数据和数据不平衡的情况下可能会遇到困难,需要进行特殊处理。
总结起来,CART算法是一种经典的算法,用于建立分类和回归树模型。
clementine算法原理

clementine算法原理Clementine算法原理Clementine算法是一种常用的数据挖掘算法,用于发现数据集中的隐含模式和关联规则。
它是一种基于决策树的分类算法,可以用于预测未知数据的类别。
本文将介绍Clementine算法的原理及其应用。
一、Clementine算法的基本原理Clementine算法的基本原理是通过对已知数据集的学习,构建一个决策树模型,然后利用该模型对未知数据进行分类。
算法的核心思想是将数据集划分为多个子集,每个子集对应一个决策树节点,通过比较不同特征的取值来划分数据。
在构建决策树的过程中,算法会根据某种准则选择最佳的特征作为划分依据,直到所有数据都被正确分类或无法继续划分为止。
二、Clementine算法的具体步骤1. 数据预处理:对原始数据进行清洗、去噪、缺失值处理等操作,保证数据的质量和完整性。
2. 特征选择:根据特征的重要性和相关性对数据进行特征选择,筛选出对分类结果有影响的特征。
3. 数据划分:将数据集划分为训练集和测试集,通常采用70%的数据作为训练集,30%的数据作为测试集。
4. 构建决策树:根据训练集的数据,利用信息增益、基尼系数等准则选择最佳的特征进行划分,递归地构建决策树。
5. 决策树剪枝:为了避免过拟合现象,需要对决策树进行剪枝操作,去除一些不必要的节点和分支。
6. 模型评估:使用测试集对构建好的决策树模型进行评估,计算分类准确率、召回率、F1值等指标,评估模型的性能。
三、Clementine算法的应用领域Clementine算法在数据挖掘领域有着广泛的应用。
它可以用于市场分析、客户分类、信用评估等多个领域。
1. 市场分析:通过对市场数据的分析,可以预测产品的销售情况、消费者的购买偏好等,为企业的市场决策提供依据。
2. 客户分类:通过对客户的个人信息、购买记录等进行分析,可以将客户划分为不同的类别,为企业的客户管理和营销活动提供指导。
3. 信用评估:通过对个人信用记录、收入状况等进行分析,可以评估个人的信用水平,为银行等金融机构的信贷决策提供参考。
如何使用决策树算法进行分类

如何使用决策树算法进行分类决策树算法是一种常用的机器学习算法,被广泛用于分类问题。
它通过将数据集划分为不同的子集,基于特征的不同取值进行决策,并最终生成一棵树结构来实现分类。
在本文中,我们将探讨如何使用决策树算法进行分类。
首先,我们需要了解决策树算法的工作原理。
决策树以树的形式表示,由根节点、内部节点和叶节点组成。
根节点表示最重要的特征,内部节点表示其他重要特征,而叶节点表示最终分类结果。
决策树的构建过程通过递归地选择最佳特征对数据进行划分,直到满足停止条件。
以下是使用决策树算法进行分类的步骤:1. 数据预处理:首先,我们需要对数据进行预处理。
这包括处理缺失值、异常值和重复值,以及对连续特征进行离散化等。
预处理是数据挖掘过程中的关键步骤,能够提高模型的准确性和鲁棒性。
2. 特征选择:选择合适的特征对分类结果有至关重要的影响。
可以使用相关性分析、信息增益等指标来评估特征的重要性。
选择具有较高信息增益或相关性的特征作为决策树的划分依据。
3. 决策树构建:决策树的构建是递归进行的过程。
从根节点开始,根据选定的特征将数据集划分成不同的子集。
可以使用多种划分准则,如基尼指数和信息增益等。
重复此过程,直到满足停止条件。
4. 停止条件:决策树构建的停止条件是根据实际需求进行定义的。
可以根据树的深度、节点的样本数或其他指标来进行判断。
过拟合是常见的问题,所以需要合理设置停止条件以避免过拟合。
5. 决策树剪枝:决策树构建完成后,可能出现过拟合的情况。
剪枝是通过裁剪决策树的一些子树来减少过拟合。
剪枝可以通过预剪枝或后剪枝来实现。
预剪枝是在构建树的过程中进行剪枝,而后剪枝是在构建完成后再进行剪枝。
6. 分类预测:完成决策树的构建和剪枝后,我们可以使用分类预测来对新样本进行分类。
从根节点开始,根据特征的取值进行递归判断,直到达到叶节点。
叶节点的分类结果即为预测结果。
决策树算法的优点在于易于理解和解释,而且可以处理非线性关系。
基于决策树的算法分析与应用示例

基于决策树的算法分析与应用示例在机器学习领域,决策树是一个经典的算法,它可以在面对大量数据时进行快速且可靠的分类或回归。
本文将介绍决策树算法的原理与应用,并通过一个具体的案例来展示其实际应用价值。
一、什么是决策树算法决策树是一种树形结构的分类模型,它的构建过程就像是一次“递归”的决策过程。
假设我们有一组数据,每个数据点都有若干个特征(即不同的属性),我们要根据这些特征来决定其类别(如是/否、高/中/低等)。
而决策树的生成就是一个逐步“分治”的过程,将原始数据分成不同子集,并根据不同特征来分别处理,最终得到一棵带有判定条件的树形结构。
决策树的构建过程可以分为三个步骤:特征选择、决策树生成和决策树剪枝。
其中,特征选择是指从所有特征中选出一个最佳特征来作为当前的分类依据;决策树生成是指利用选定的特征对数据进行划分,生成一棵完整的决策树;决策树剪枝是指对已经生成的决策树进行优化,去除一些不必要的节点和分枝,以避免过拟合等问题。
除了常见的二叉树决策树外,还有多叉树、CART树、C4.5树、ID3树等多种类型的决策树算法。
它们在特征选择、剪枝等方面有所不同,但本质上都是基于“树形结构”来完成分类或回归任务的。
二、决策树算法的应用示例决策树算法有许多实际应用,如金融风险评估、医学诊断、信用卡反欺诈等。
这里我们以一个简单的基于决策树的鸢尾花分类为例来说明决策树的应用过程。
鸢尾花数据集是机器学习中常用的一个数据集,它包含了150条记录,每条记录都有四个特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度。
根据这些特征,我们需要判断鸢尾花属于哪种类型:山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)或维吉尼亚鸢尾(Iris-virginica)。
以下是如何用Python和sklearn库来实现这一任务:```python# 引入相关库和数据集from sklearn.datasets import load_irisfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_splitiris = load_iris()X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=42)# 构建决策树模型并进行训练clf = DecisionTreeClassifier(criterion='entropy', max_depth=10, random_state=42)clf.fit(X_train, y_train)# 预测并评估模型准确率y_pred = clf.predict(X_test)score = clf.score(X_test, y_test)print(score)```上述代码首先引入了相关的Python库和鸢尾花数据集,并将数据集分为训练集和测试集。
决策树的经典算法ID3与C45

决策树的经典算法ID3与C45决策树是一种常用的机器学习算法,用于分类和回归任务。
决策树算法可以看作是一种基于树结构的分类方法,它将数据集拆分成若干个子集,每个子集对应一个属性测试条件,通过不断递归地划分数据集,最终形成一棵决策树。
经典的决策树算法包括ID3和C5,本文将对这两种算法进行介绍。
ID3(Iterative Dichotomiser 3)是由Ross Quinlan提出的,它是最早的决策树算法之一。
ID3算法采用了信息增益作为属性选择度量,通过计算每个属性的信息增益,选择信息增益最大的属性进行分裂。
我们计算每个属性的信息增益。
信息增益被定义为父节点与子节点之间的信息差异,计算公式为:Gain(S,A)=H(S)-sum(P(a) * H(S_a))其中,H(S)表示节点S的熵,P(a)表示属性A的取值a在节点S中出现的概率,H(S_a)表示子节点S_a的熵。
选择信息增益最大的属性作为当前节点的分裂属性。
根据当前节点的分裂属性将数据集划分成若干个子集,对每个子集递归地执行步骤1和步骤2,直到满足停止条件(例如子集中所有样本都属于同一类别,或每个属性都已使用过)。
C5算法是ID3算法的改进版,它使用了增益率作为属性选择度量,以解决ID3算法中偏好于选择取值较多的属性的问题。
增益率定义为信息增益与分裂信息的比值,分裂信息被定义为:split_info(S,A)=-sum(P(a) * log2(P(a)))其中,P(a)表示属性A 的取值a在节点S中出现的概率。
C5算法的步骤与ID3算法类似,但在选择分裂属性时优先考虑增益率较高的属性。
C5算法还引入了剪枝技术,通过设置一个置信度阈值来避免过拟合,从而生成更加健壮的决策树。
ID3算法和C5算法都是经典的决策树算法,它们在处理分类问题时具有较高的准确率和可解释性。
然而,这两种算法也存在一些局限性,例如对于连续属性和处理缺失值的处理能力有限。
后续的许多研究者对决策树算法进行了改进和优化,如CART、CHD、BOOSTING等,这些算法在处理复杂问题、提高分类准确率和处理连续属性方面做出了更多的探索和实践。
决策树分类算法

决策树分类算法⼀、决策树原理决策树是⽤样本的属性作为结点,⽤属性的取值作为分⽀的树结构。
决策树的根结点是所有样本中信息量最⼤的属性。
树的中间结点是该结点为根的⼦树所包含的样本⼦集中信息量最⼤的属性。
决策树的叶结点是样本的类别值。
决策树是⼀种知识表⽰形式,它是对所有样本数据的⾼度概括决策树能准确地识别所有样本的类别,也能有效地识别新样本的类别。
决策树算法ID3的基本思想:⾸先找出最有判别⼒的属性,把样例分成多个⼦集,每个⼦集⼜选择最有判别⼒的属性进⾏划分,⼀直进⾏到所有⼦集仅包含同⼀类型的数据为⽌。
最后得到⼀棵决策树。
J.R.Quinlan的⼯作主要是引进了信息论中的信息增益,他将其称为信息增益(information gain),作为属性判别能⼒的度量,设计了构造决策树的递归算法。
举例⼦⽐较容易理解:对于⽓候分类问题,属性为:天⽓(A1) 取值为:晴,多云,⾬⽓温(A2) 取值为:冷,适中,热湿度(A3) 取值为:⾼,正常风 (A4) 取值为:有风,⽆风每个样例属于不同的类别,此例仅有两个类别,分别为P,N。
P类和N类的样例分别称为正例和反例。
将⼀些已知的正例和反例放在⼀起便得到训练集。
由ID3算法得出⼀棵正确分类训练集中每个样例的决策树,见下图。
决策树叶⼦为类别名,即P 或者N。
其它结点由样例的属性组成,每个属性的不同取值对应⼀分枝。
若要对⼀样例分类,从树根开始进⾏测试,按属性的取值分枝向下进⼊下层结点,对该结点进⾏测试,过程⼀直进⾏到叶结点,样例被判为属于该叶结点所标记的类别。
现⽤图来判⼀个具体例⼦,某天早晨⽓候描述为:天⽓:多云⽓温:冷湿度:正常风:⽆风它属于哪类⽓候呢?-------------从图中可判别该样例的类别为P类。
ID3就是要从表的训练集构造图这样的决策树。
实际上,能正确分类训练集的决策树不⽌⼀棵。
Quinlan的ID3算法能得出结点最少的决策树。
ID3算法:⒈对当前例⼦集合,计算各属性的信息增益;⒉选择信息增益最⼤的属性A k;⒊把在A k处取值相同的例⼦归于同⼀⼦集,A k取⼏个值就得⼏个⼦集;⒋对既含正例⼜含反例的⼦集,递归调⽤建树算法;⒌若⼦集仅含正例或反例,对应分枝标上P或N,返回调⽤处。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 分类的概念及分类器的评判分类是数据挖掘中的一个重要课题。
分类的目的是学会一个分类函数或分类模型(也常常称作分类器),该模型能把数据库中的数据项映射到给定类别中的某一个。
分类可用于提取描述重要数据类的模型或预测未来的数据趋势。
分类可描述如下:输入数据,或称训练集(training set)是一条条记录组成的。
每一条记录包含若干条属性(attribute),组成一个特征向量。
训练集的每条记录还有一个特定的类标签(类标签)与之对应。
该类标签是系统的输入,通常是以往的一些经验数据。
一个具体样本的形式可为样本向量:(v1,v2,…,…vn:c)。
在这里vi表示字段值,c表示类别。
分类的目的是:分析输入数据,通过在训练集中的数据表现出来的特性,为每一个类找到一种准确的描述或者模型。
这种描述常常用谓词表示。
由此生成的类描述用来对未来的测试数据进行分类。
尽管这些未来的测试数据的类标签是未知的,我们仍可以由此预测这些新数据所属的类。
注意是预测,而不能肯定。
我们也可以由此对数据中的每一个类有更好的理解。
也就是说:我们获得了对这个类的知识。
对分类器的好坏有三种评价或比较尺度:预测准确度:预测准确度是用得最多的一种比较尺度,特别是对于预测型分类任务,目前公认的方法是10番分层交叉验证法。
计算复杂度:计算复杂度依赖于具体的实现细节和硬件环境,在数据挖掘中,由于操作对象是巨量的数据库,因此空间和时间的复杂度问题将是非常重要的一个环节。
模型描述的简洁度:对于描述型的分类任务,模型描述越简洁越受欢迎;例如,采用规则表示的分类器构造法就更有用。
分类技术有很多,如决策树、贝叶斯网络、神经网络、遗传算法、关联规则等。
本文重点是详细讨论决策树中相关算法。
2 基于决策树的数据分类算法及其性能2.1 ID3和C4.5算法决策树技术是用于分类和预测的主要技术,决策树学习是以实例为基础的归纳学习算法。
它着眼于从一组无次序、无规则的事例中推理除决策树表示形式的分类规则。
它采用自顶向下的递归方式,在决策树的内部节点进行属性值的比较并根据不同属性判断从该节点向下的分支,然后进行剪枝,最后在决策树的叶节点得到结论。
所以从根到叶节点就对应着一条合取规则,整棵树就对应着一组析取表达式规则。
基于决策树的分类有很多实现算法。
ID3和C4.5是较早提出并普遍使用的决策树算法。
Quinlan提出的著名的ID3学习算法是较早的经典算法。
它通过选择窗口来形成决策树,是利用信息论中的互信息寻找训练集具有最大信息量的属性字段,建立决策树的一个节点,再根据该属性字段的不同取值建立树的分支;在每个分支子集中重复建立树的下层节点和分支过程。
C4.5算法和ID3算法相似,它是对ID3算法的一种改进,它是根据信息增益(Information Gain)值选择作为分裂结点的属性及标准,按照此标准将训练集分成若干个子集。
这两中种方法的优点是描述简单,分类速度快,分类较准确特别适合大规模的数据处理。
但这两种算法是借用信息论中的互信息或信息增益作为单一属性能力的度量,试图减少树的平均深度,忽略了叶子数目的研究,其启发式函数并不是最优的,存在的主要问题还有:(1)抗噪性差,训练例子中正例和反例较难控制。
(2)在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。
(3)这两种算法只适合于能够驻留于内存的数据集使用,当训练集大得无法在内存容纳时程序无法运行。
2.2 SLIQ算法SLIQ算法对C4.5决策树分类算法的实现方法进行了改进。
一般决策树中,使用信息量作为评价节点分裂质量的参数,SLIQ算法中使用gini指标代替信息量,gini指标比信息量性能更好,且计算方便,对数据集包含n个类的数据集S,gini(S)定义为:gini(S) = 1 - ∑pj*pjpj是S中第j类数据的频率gini越小,Information Gain越大。
区别于一般的决策树SLIQ采用二分查找树结构对每个节点都需要先计算最佳分裂方案,然后执行分裂。
对于数值型连续字段分裂的形式A<=v。
所以,可以先对数值型字段排序,假设排序后的结果为v1,v2,…,…vn,因为分裂只会发生在两个节点之间,所以有n-1种可能性。
通常取中点(vi + vi+1)/2作为分裂点,从小到大依次取不同的split point,取Information Gain 指标最大(gini最小)的一个就是分裂点,因为每个节点都需要排序,所以这项操作的代价极大。
对于离散型字段(categorical attribute),设S(A)为A的所有可能的值,分裂测试将要取遍S的所有子集S'。
寻找当分裂成S'和S-S'两块时的gini指标,取到gini最小的时候,就是最佳分裂方法。
显然,这是一个对集合S的所有子集进行遍历的过程共需要计算2|S| 次,代价也是很大的。
SLIQ算法对此采用了预排序的技术,以便能够消除在决策树的每个结点对数据集进行排序的需要。
所谓预排序,就是针对每个属性的取值,把所有的记录按照从小到大的顺序进行排序。
在C4.5中,树的构造是按照深度优先策略完成的,需要对每个属性列表在每个结点处都进行一遍扫描,费时很多。
SLIQ采用广度优先策略构造决策树,即在决策树的每一层只需对每个属性列表扫描一次,就可以为当前决策树中每个叶子结点找到最优分裂标准。
SLIQ的剪枝算法MDL属于迟滞剪枝(post-prunning)算法,通常的迟滞剪枝的数据源采用一个Training Set的一个子集或者与Training Set独立的数据集进行操作。
SLIQ算法具体实现输入与输出:输入与输出采用下面的方案输入数据包括训练集配置信息(决策树大小) 输出数据包括用线性方式表示的二分决策树算法的控制:算法的控制结构是一个队列,这个队列存放当前的所有叶子节点。
这是为了控制广度优先搜索的结束。
当队列空时,说明所有的叶子都已经被处理过,这时建树算法结束。
(1)数据准备系统输入是训练集,训练集是样本向量(v1,v2,…,…vn :c)组成的集合,每个属性对应训练集的一列,训练集进入以后,分成一个一个的属性表:(Attribute List){(vi,i)| i<=training data num && i>=0}i是属性vi的记录索引号,将所有类标识放入类表,类表中的leaf字段指向该记录对应的决策树的叶子,初始状态下,所有记录指向树根,对属性表进行预排序,交换属性值vi,同时交换I,生成有序的属性表序列。
排序完成后属性表中的i是属性值指向类表的指针。
完成属性表的排序后,数据初始化工作就完成。
(2)计算最佳分裂当完成数据预处理之后算法进入往复的求最佳分裂指标的阶段。
这一阶段经过一次对所有属性表的遍历,可以找出所有叶子节点的最佳分裂方案,在这个阶段有一个重要的结构,类直方图(class histogram),它位于决策树的每个顶点内,存放每个节点当前的类信息——左、右子树的每个类各拥有多少节点。
当前属性A是数值型字段时每次作遍历时类直方图亦随之改变,随时表征以当前属性A的当前值v为阈值的节点分裂方式对叶子L的分裂状况由Class Histogram即可算出某个分裂方案的gini值,完成对A的遍历后,gini值最小既Information Gain最高的A的值就是用属性A分裂的最佳阈值。
新方案可以存入决策树节点。
当前属性是离散型字段时,在遍历过程中记录下每个属性值对应的类的个数,遍历完成后,利用贪心算法得到Information Gain最高的A的子集,即为所求的用A的分裂方案,新方案可以存入决策树节点。
对整个属性表的每个属性进行一次完全的遍历之后对每个节点而言,最佳分裂方案包括用哪个属性进行分类以及分类的阈值是什么已经形成。
并且存放在决策树的节点内。
(3)升级节点当最佳分裂参数已经存放在节点中以后,算法的下一步是创建子节点,执行节点分裂(升级类表)。
这一步的主要任务是对应该分裂的类表进行更改。
(4)结果输出算法生成的决策树通过前序遍历的方式存入输出表。
SLIQ的优点有:(1)运算速度快,对属性值只作一次排序。
(2)利用整个训练集的所有数据,不作取样处理,不丧失精确度。
(3)轻松处理磁盘常驻的大型训练集,适合处理数据仓库的海量历史数据。
(4)更快的更小的目标树。
(5)低代价的MDL剪枝算法。
SLIQ的存在的缺点有:(1)由于需要将类别列表存放于内存,而类别列表的长度与训练集的长度是相同的,这就一定程度上限制了可以处理的数据集的大小。
(2)由于采用了预排序技术,而排序算法的复杂度本身并不是与记录个数成线性关系,因此使得SLIQ算法不可能达到随记录数目增长的线性可扩展性。
2.3 SPRINT算法为了减少数据量,SPRINT算法改进了SLIQ决策树算法实现时的数据结构,去掉驻留于内存的类别列表,将其合并到每个属性列表中。
这样,在寻找当前结点的最优分裂标准时,遍历每个属性列表就不必参照其他信息。
但是,对非分裂属性的属性列表进行分裂变得很困难,需要用哈希表记录下每个记录属于个孩子结点。
SPRINT串行算法算法的基本步骤如下:Procedure BuildTree (S , A )(S:训练样本集,A:分类属性集合)初始化样本集S,生成有序属性列表和直方图,创建节点队列,放人Nwhile队列不为空从队列中取出第一个节点Nif N纯or为空then标记为叶节点,continuefor N的每一个分割点F计算该节点F上的gini值,选出最佳分割点F* ,N长出分支节点N1,N2,放人队列中.将该分割点的属性列表分割,并用该列表的rids生成记录所在节点的哈希表,用哈希表分割其他属性列表,列表分割同时生成属性直方图。
串行环境下,刚开始SPRINT比SLIQ时间消耗高一些,样本继续增加后,SLIQ时间消耗要比SPRINT高。
在并行环境下采用并行算法,相同处理器时相应时间SLIQ要大于SPRINT。
SPRINT算法具备以下优点:(1)训练样本量不受内存限制。
(2)具有优秀的伸缩性、加速性和扩容性。
(3)并行实现容易,效率高。
SPRINT算法具备以下缺点:(1)使用属性列表,存储代价是原来的三倍。
(2)节点分割要创建哈希表,加大系统负担。
(3)节点分割处理相对复杂。
以上是几种常用的基于决策树的分类算法,随着算法研究的进行,出现了许多其他基于决策树的算法,它们与神经网络、遗传算法等技术结合,从不同的方面对算法进行了提高。
相信以后会出现更多效率更好、准确度更高的算法。