当前位置:首页 > 代码 > 正文

决策树算法代码(决策树算法伪代码)[20240505更新]

admin 发布:2024-05-05 03:04 101


本篇文章给大家谈谈决策树算法代码,以及决策树算法伪代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

决策树算法如何将连续值转化为离散值处理,我要Python实现的代码,希望完整一点

切断就行了。。。比如某个特征的值,预期会在1-100之间。。。那么你可以人为的切片,1-10的,就算1。。。

决策树(DecisionTree)和随机森林(Random Forests)

    令N为训练样例的个数,则单棵决策树的输入样例的个数为N个从训练集中有放回的 随机 抽取N个训练样例。

    令训练样例的输入特征的个数为M,我们在每颗决策树的每个节点上进行分裂时,从M个输入特征里 随机 选择m个输入特征,且m远远小于M。然后从这m个输入特征里选择一个最好的进行分裂。 m在构建决策树的过程中不会改变 。

构建决策树的算法主要有以下三种,且根据决策树的输出结果,决策树可以分为 分类树 和 回归树 ,分类树输出的结果为具体的类别,而回归树输出的结果为一个确定的数值。其中 ID3 和 C4.5 是分类树, CART 是分类回归树,且 在ID3 和 C4.5 中,特征(属性)只能选一次,而 CART 没有这样的要求 :

    a. ID3    在决策树生成过程中,以 信息增益 为特征选择的准则。

    b. C4.5    在决策树生成过程中,以 信息增益比 为特征选择的准则。

    c. CART    对回归树用 平方误差最小化准则 ,对分类树用 基尼指数 (Gini index) 最小化准则 ,进行特征选择,生成二叉树。

例:

图1左中的信息增益InfoGain1 及信息增益比 InfoRatio1为:

 

同理,图1右的信息增益 InfoGain2 及 InfoRatio2 分别为:

由于 InfoGain1  InfoGain2, 所以由ID3算法选择第一种方法;

由于InfoRatio1  InfoRatio2 ,所以根据C4.5算法选择第一种方法

    当节点的数据量小于一个指定的数量时,不继续分裂。两个原因:一是数据量较少时,再做分裂容易强化噪声数据的作用;二是降低树生长的复杂性。提前结束分裂一定程度上有利于降低过拟合的影响。

    由上述可知,熵和基尼值的大小表示数据的复杂程度,当熵或者基尼值过小时,表示数据的纯度比较大,如果熵或者基尼值小于一定程度数,节点停止分裂。

    节点的深度可以理解为节点与决策树跟节点的距离,如根节点的子节点的深度为1,因为这些节点与跟节点的距离为1,子节点的深度要比父节点的深度大1。决策树的深度是所有叶子节点的最大深度,当深度到达指定的上限大小时,停止分裂。

    按照1生成t个决策树之后,对于每个新的测试样例,综合多个决策树的分类结果来作为随机森林的分类结果。

    (1)目标特征为 数字类型 :取t个决策树的 平均值 作为分类结果。

    (2)目标特征为 类别类型 : 少数服从多数 ,取单棵树分类结果最多的那个类别作为整个随机森林的分类结果。

在随机森林中,无需交叉验证来评价其分类的准确性,随机森林自带 OOB(out-of-bag)错误估计 :

OOB:在构造单棵决策树时我们只是随机有放回的抽取了N个样例,所以可以用没有抽取到的样例来测试这棵决策树的分类准确性,这些样例大概占总样例数目的三分之一。

所以对于每个样例j,都有大约三分之一的决策树(记为SetT(j))在构造时没用到该样例,我们就用这些决策树来对这个样例进行分类。我们对于所有的训练样例 j,用SetT(j)中的树组成的森林对其分类,然后看其分类结果和实际的类别是否相等,不相等的样例所占的比例就是OOB错误估计。OOB错误估计被证明是无偏的。

基于R语言的分类算法之决策树

基于R语言的分类算法之决策树

ID3 《= 最大信息熵增益,只能处理离散型数据

C4.5 《= 信息增益率,可处理连续性和离散型数据,相比ID3,减少了因变量过多导致的过拟合

C5.0 《= 信息增益率,运算性能比C4.5更强大

CART 《= 基尼指数最小原则,连续性和离散型数据均可

信息熵体现的是数据的杂乱程度,信息越杂乱,信息熵越大,反之越小。 例如:拥有四种连续型变量的特征变量的信息熵一定比拥有三种的要大。

特征变量的N种可能性,每种可能性的概率相同,N越大,信息熵越大。

每种可能性的概率不同,越偏态,信息熵越小。

所有特征变量中,信息增益率的,就是根节点(root leaf),根节点一般是选择N越大的特征变量,因为N越大,信息熵越大。

信息增益率是在信息熵的基础上作惩罚计算,避免特征变量可能性多导致的高信息增益。

代码相关

library(C50)

C5.0(x,y, trials = 1, rules=FALSE,weights=NULL,control=C5.0Control(),costs=NULL)

x为特征变量,y为应变量

trials 为迭代次数(这个值根据不同数据而不同,并非越大越好,一般介于5-15之间,可以用遍历来寻找最高准确率的模型,对模型准确率的提升效果中等)

cost 为损失矩阵,R中应该传入一个矩阵(据说是对准确率矩阵约束猜测错误的项,但是并没特别明显的规律,可以使用遍历来寻找最好的cost,准确率提升效果小)

costs - matrix(c(1,2,1,2),

ncol = 2, byrow = TRUE,

dimnames = list(c("yes","no"), c("yes","no")))

control 设置C5.0模型的其他参数,比如置信水平和节点最小样本等(水很深,参数很多,可以自行查阅R的帮助文档,我只设置了一个CF,准确率提升效果小)

control = C5.0Control(CF = 0.25)

library(C50)

#对iris随机划分训练集和测试集

set.seed(1234)

index - sample(1:nrow(iris), size = 0.75*nrow(iris))

train - iris[index,]

test - iris[-index,]

#查看训练集和测试集分布是否合理

prop.table(table(train$Species))

prop.table(table(test$Species))

#不设置任何参数

fit1 - C5.0(x = train[,1:4], y = train[,5])

pred1 - predict(fit1, newdata = test[,-5])

freq1 - table(pred1, test[,5])

accuracy - sum(diag(freq1))/sum(freq1)

pred1 setosa versicolor virginica

setosa 16 0 0

versicolor 0 13 1

virginica 0 0 8

准确率为0.9736842,只有一个错误。。。显然150个iris太少了,优化都省了。

决策树之ID3算法及其Python实现

决策树之ID3算法及其Python实现

1. 决策树背景知识

??决策树是数据挖掘中最重要且最常用的方法之一,主要应用于数据挖掘中的分类和预测。决策树是知识的一种呈现方式,决策树中从顶点到每个结点的路径都是一条分类规则。决策树算法最先基于信息论发展起来,经过几十年发展,目前常用的算法有:ID3、C4.5、CART算法等。

2. 决策树一般构建过程

??构建决策树是一个自顶向下的过程。树的生长过程是一个不断把数据进行切分细分的过程,每一次切分都会产生一个数据子集对应的节点。从包含所有数据的根节点开始,根据选取分裂属性的属性值把训练集划分成不同的数据子集,生成由每个训练数据子集对应新的非叶子节点。对生成的非叶子节点再重复以上过程,直到满足特定的终止条件,停止对数据子集划分,生成数据子集对应的叶子节点,即所需类别。测试集在决策树构建完成后检验其性能。如果性能不达标,我们需要对决策树算法进行改善,直到达到预期的性能指标。

??注:分裂属性的选取是决策树生产过程中的关键,它决定了生成的决策树的性能、结构。分裂属性选择的评判标准是决策树算法之间的根本区别。

3. ID3算法分裂属性的选择——信息增益

??属性的选择是决策树算法中的核心。是对决策树的结构、性能起到决定性的作用。ID3算法基于信息增益的分裂属性选择。基于信息增益的属性选择是指以信息熵的下降速度作为选择属性的方法。它以的信息论为基础,选择具有最高信息增益的属性作为当前节点的分裂属性。选择该属性作为分裂属性后,使得分裂后的样本的信息量最大,不确定性最小,即熵最小。

??信息增益的定义为变化前后熵的差值,而熵的定义为信息的期望值,因此在了解熵和信息增益之前,我们需要了解信息的定义。

??信息:分类标签xi 在样本集 S 中出现的频率记为 p(xi),则 xi 的信息定义为:?log2p(xi) 。

??分裂之前样本集的熵:E(S)=?∑Ni=1p(xi)log2p(xi),其中 N 为分类标签的个数。

??通过属性A分裂之后样本集的熵:EA(S)=?∑mj=1|Sj||S|E(Sj),其中 m 代表原始样本集通过属性A的属性值划分为 m 个子样本集,|Sj| 表示第j个子样本集中样本数量,|S| 表示分裂之前数据集中样本总数量。

??通过属性A分裂之后样本集的信息增益:InfoGain(S,A)=E(S)?EA(S)

??注:分裂属性的选择标准为:分裂前后信息增益越大越好,即分裂后的熵越小越好。

4. ID3算法

??ID3算法是一种基于信息增益属性选择的决策树学习方法。核心思想是:通过计算属性的信息增益来选择决策树各级节点上的分裂属性,使得在每一个非叶子节点进行测试时,获得关于被测试样本最大的类别信息。基本方法是:计算所有的属性,选择信息增益最大的属性分裂产生决策树节点,基于该属性的不同属性值建立各分支,再对各分支的子集递归调用该方法建立子节点的分支,直到所有子集仅包括同一类别或没有可分裂的属性为止。由此得到一棵决策树,可用来对新样本数据进行分类。

ID3算法流程:

(1) 创建一个初始节点。如果该节点中的样本都在同一类别,则算法终止,把该节点标记为叶节点,并用该类别标记。

(2) 否则,依据算法选取信息增益最大的属性,该属性作为该节点的分裂属性。

(3) 对该分裂属性中的每一个值,延伸相应的一个分支,并依据属性值划分样本。

(4) 使用同样的过程,自顶向下的递归,直到满足下面三个条件中的一个时就停止递归。

??A、待分裂节点的所有样本同属于一类。

??B、训练样本集中所有样本均完成分类。

??C、所有属性均被作为分裂属性执行一次。若此时,叶子结点中仍有属于不同类别的样本时,选取叶子结点中包含样本最多的类别,作为该叶子结点的分类。

ID3算法优缺点分析

优点:构建决策树的速度比较快,算法实现简单,生成的规则容易理解。

缺点:在属性选择时,倾向于选择那些拥有多个属性值的属性作为分裂属性,而这些属性不一定是最佳分裂属性;不能处理属性值连续的属性;无修剪过程,无法对决策树进行优化,生成的决策树可能存在过度拟合的情况。

决策树算法代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于决策树算法伪代码、决策树算法代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/1120.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载