机器学习 决策树(ID3)算法及案例

合集下载

机器学习--决策树算法(ID3C4.5)

机器学习--决策树算法(ID3C4.5)

机器学习--决策树算法(ID3C4.5)在⽣活中,“树”这⼀模型有很⼴泛的应⽤,事实证明,它在机器学习分类和回归领域也有着深刻⽽⼴泛的影响。

在决策分析中,决策树可以明确直观的展现出决策结果和决策过程。

如名所⽰,它使⽤树状决策模型。

它不仅仅是在数据挖掘中⽤户获取特定⽬标解的策略,同时也被⼴泛的应⽤于机器学习。

如何使⽤树来表⽰算法为此,我们考虑使⽤泰坦尼克号数据集的⽰例,以预测乘客是否会⽣存。

下⾯的模型使⽤数据集中的3个特征/属性/列,即性别,年龄和SIBSP(配偶或⼉童的数量)。

这是⼀棵体现了⼈性光辉的决策树。

树的形状是⼀棵上下颠倒的决策树,叶⼦节点在下,根节点在上。

在图像中,⿊⾊中的粗体⽂本表⽰条件/内部节点,基于树分成分⽀/边缘。

不再分裂的分⽀结束是决策/叶⼦,在这种情况下,乘客是否被死亡或幸存,分别表⽰为红⾊和绿⾊⽂本。

虽然,⼀个真实的数据集将有很多功能,这只是⼀个更⼤的树中的部分分⽀,但你不能忽略这种算法的简单性。

该特征重要性是明确的,可以轻易查看决策关系。

该⽅法更常见于来⾃数据的学习决策树,并且在树上被称为分类树,因为⽬标是将乘客分类为幸存或死亡,上⾯所展⽰的决策树就是分类树。

回归树以相同的⽅式表⽰,例如⽤于预测房⼦价格的连续价值。

通常,决策树算法被称为CART或分类和回归树。

那么,算法⽣成的背后发⽣了什么呢?如何⽣成⼀个决策树取决于选择什么特征和在何种情况下进⾏分裂,以及在什么时候停⽌。

因为⼀棵树通常是随意⽣长的,你需要修剪它,让它看起来漂亮(研究如何⽣成决策树)。

ID3算法ID3算法⽣成决策树ID3算法(Iterative Dichotomiser 3)是决策树⽣成算法的⼀种,基于奥卡姆剃⼑原理(简约原则) 1。

是Ross Quinlan发明的⼀种决策树算法,这个算法的基础就是上⾯提到的奥卡姆剃⼑原理,越是⼩型的决策树越优于⼤的决策树,尽管如此,也不总是⽣成最⼩的树型结构,⽽是⼀个启发式算法。

id3算法对天气-打球关系的决策树

id3算法对天气-打球关系的决策树

ID3算法是一种用于构建决策树的经典机器学习算法,它可以根据给定的数据集,自动构建出一个决策树模型,用于对未知数据进行分类。

在实际应用中,ID3算法被广泛应用于各种领域,包括天气预测和决策制定。

本文将以天气和是否适合打球这一主题为例,具体介绍ID3算法对于天气-打球关系的决策树。

1. 背景介绍天气对于人们的日常生活有着重要的影响,尤其是对于室外活动,比如打球。

在实际生活中,人们往往会根据当天的天气情况来决定是否适合进行打球活动。

而要根据天气来进行决策,就需要建立一个天气-打球的决策模型。

而ID3算法正是用来构建这样的决策模型的利器。

2. 数据采集为了构建天气-打球的决策树模型,首先需要收集一定量的天气相关数据和打球相关数据。

可以记录每天的天气情况(如晴天、阴天、下雨)、温度、湿度等天气指标,以及当天是否适合进行打球活动(是/否)。

通过收集大量的这样的数据,就可以构建出一个合适的数据集。

3. 分析数据在收集到足够的数据后,就可以开始分析这些数据,寻找天气与打球之间的关系。

ID3算法的核心思想是选择最佳的属性来进行划分,以便对数据进行分类。

在本例中,可以将天气指标(如晴天、阴天、下雨)作为属性,将打球活动(是/否)作为分类结果,然后根据ID3算法来选择最佳的属性进行数据划分,从而构建出决策树模型。

4. 构建决策树在进行数据分析后,就可以利用ID3算法来构建天气-打球的决策树。

ID3算法通过计算信息增益来确定最佳的属性,然后进行递归地对数据进行划分,直到构建出完整的决策树模型。

在这个过程中,ID3算法会根据不同的属性值来确定最佳的决策点,从而使得对于未知天气情况的打球决策变得更加准确。

5. 评估和优化构建出决策树模型后,还需要对模型进行评估和优化。

可以利用交叉验证等方法来检验模型的准确性,并根据验证结果对模型进行调整和优化。

这一步骤是非常重要的,可以帮助进一步提高决策树模型的预测能力。

6. 应用和推广构建出决策树模型后,可以将其应用到实际的天气预测和打球决策中。

id3决策树算法python程序

id3决策树算法python程序

id3决策树算法python程序关于ID3决策树算法的Python程序。

第一步:了解ID3决策树算法ID3决策树算法是一种常用的机器学习算法,用于解决分类问题。

它基于信息论的概念,通过选择最佳的特征来构建决策树模型。

ID3算法的核心是计算信息增益,即通过选择最能区分不同类别的特征来构建决策树。

第二步:导入需要的Python库和数据集在编写ID3决策树算法的Python程序之前,我们需要导入一些必要的Python库和准备好相关的数据集。

在本例中,我们将使用pandas库来处理数据集,并使用sklearn库的train_test_split函数来将数据集拆分为训练集和测试集。

pythonimport pandas as pdfrom sklearn.model_selection import train_test_split# 读取数据集data = pd.read_csv('dataset.csv')# 将数据集拆分为特征和标签X = data.drop('Class', axis=1)y = data['Class']# 将数据集拆分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) 第三步:实现ID3决策树算法的Python函数在此步骤中,我们将编写一个名为ID3DecisionTree的Python函数来实现ID3决策树算法。

该函数将递归地构建决策树,直到满足停止条件。

在每个递归步骤中,它将计算信息增益,并选择最佳特征作为当前节点的分裂依据。

pythonfrom math import log2from collections import Counterclass ID3DecisionTree:def __init__(self):self.tree = {}def calc_entropy(self, labels):label_counts = Counter(labels)entropy = 0for count in label_counts.values():p = count / len(labels)entropy -= p * log2(p)return entropydef calc_info_gain(self, data, labels, feature):feature_values = data[feature].unique()feature_entropy = 0for value in feature_values:subset_labels = labels[data[feature] == value]feature_entropy += len(subset_labels) / len(labels) * self.calc_entropy(subset_labels)return self.calc_entropy(labels) - feature_entropydef choose_best_feature(self, data, labels):best_info_gain = 0best_feature = Nonefor feature in data.columns:info_gain = self.calc_info_gain(data, labels, feature)if info_gain > best_info_gain:best_info_gain = info_gainbest_feature = featurereturn best_featuredef build_tree(self, data, labels):if len(set(labels)) == 1:return labels[0]elif len(data.columns) == 0:return Counter(labels).most_common(1)[0][0] else:best_feature = self.choose_best_feature(data, labels)sub_data = {}for value in data[best_feature].unique():subset = data[data[best_feature] == value].drop(best_feature, axis=1)sub_labels = labels[data[best_feature] == value]sub_data[value] = (subset, sub_labels)tree = {best_feature: {}}for value, (subset, sub_labels) in sub_data.items():tree[best_feature][value] = self.build_tree(subset, sub_labels)return treedef fit(self, data, labels):self.tree = self.build_tree(data, labels)def predict(self, data):predictions = []for _, row in data.iterrows():node = self.treewhile isinstance(node, dict):feature = list(node.keys())[0]value = row[feature]node = node[feature][value]predictions.append(node)return predictions第四步:使用ID3决策树模型进行训练和预测最后一步是使用我们实现的ID3DecisionTree类进行训练和预测。

仿照例题,使用id3算法生成决策树

仿照例题,使用id3算法生成决策树

标题:使用ID3算法生成决策树一、概述在机器学习领域,决策树是一种常见的分类和回归算法。

它基于一系列属性对数据进行划分,最终生成一棵树状图来表示数据的分类规则。

在本文中,我们将介绍ID3算法,一种经典的决策树生成算法,并演示如何使用ID3算法生成决策树。

二、ID3算法概述ID3算法是一种基于信息论的决策树生成算法,其全称为Iterative Dichotomiser 3。

它由Ross Quinlan于1986年提出,是C4.5算法的前身。

ID3算法的核心思想是在每个节点选择最佳的属性进行划分,使得各个子节点的纯度提高,从而最终生成一棵有效的决策树。

ID3算法的主要步骤包括计算信息增益、选择最佳属性、递归划分数据集等。

在这一过程中,算法会根据属性的信息增益来确定最佳的划分属性,直到满足停止条件为止。

三、使用ID3算法生成决策树的步骤使用ID3算法生成决策树的步骤如下:1. 收集数据集:需要收集一个包含多个样本的数据集,每个样本包含多个属性和一个类别标签。

2. 计算信息增益:对每个属性计算信息增益,信息增益越大表示该属性对分类的贡献越大。

3. 选择最佳属性:选择信息增益最大的属性作为当前节点的划分属性。

4. 划分数据集:根据选择的属性值将数据集划分成若干子集,每个子集对应属性的一个取值。

5. 递归生成子节点:对每个子集递归调用ID3算法,生成子节点,直到满足停止条件。

6. 生成决策树:将所有节点连接起来,生成一棵完整的决策树。

四、使用ID3算法生成决策树的示例为了更好地理解ID3算法的生成过程,我们以一个简单的示例来说明。

假设有一个包含天气、温度和湿度三个属性的数据集,我们希望使用ID3算法生成一个决策树来预测是否适合外出活动。

我们需要计算每个属性的信息增益。

然后选择信息增益最大的属性进行划分,将数据集划分成若干子集。

接着递归调用ID3算法,直到满足停止条件为止。

经过计算和递归划分,最终我们得到一棵决策树,可以根据天气、温度和湿度来预测是否适合外出活动。

(完整版)ID3算法

(完整版)ID3算法
23
(2)用信息增益作为属性选择量存在一个假设, 即训 练例子集中的正, 反例的比例应与实际问题领域里正、 反例比例相同。一般情况不能保证相同, 这样计算训练 集的信息增益就有偏差。
(3)ID3在建树时, 每个节点仅含一个属性, 是一种单 变元的算法, 属性间的相关性强调不够。虽然它将多个 属性用一棵树连在一起, 但联系还是松散的。
该算法的计算时间是例子个数、属性个数、结点个数 之积的线性函数。对有4761个关于苯的质谱例子作了试验。 其中正例2361个, 反例2400个, 每个例子由500个属性描述, 每个属性取值数目为6, 得到一棵1514个结点的决策树。对 正、反例各100个测试例作了测试, 正例判对82个, 反例判对 80个, 总预测正确率81%, 效果是令人满意的。
J.R.Quinlan的工作主要是引进了信息论中的信息增益, 他将其称为信息增益(information gain), 作为属性 判别能力的度量, 设计了构造决策树的递归算法。
下面通过一个例子, 说明ID3算法的基本思想。
5
一、ID3基本思想
对于气候分类问题,属性为: 天气(A1) 取值为: 晴,多云,雨 气温(A2) 取值为: 冷 ,适中,热 湿度(A3) 取值为: 高 ,正常 风 (A4) 取值为: 有风, 无风
16
Gain(S, A1) Entropy(S) v晴,多云,雨
Sv S
Entropy(Sv )
Entropy(S
)
5 14
Entropy(S晴
)
4 14
Entropy(S多云
)
5 14
Entropy(S雨
)

Entropy(S晴 )
2 5
log

决策树id3算法例题

决策树id3算法例题

决策树id3算法例题决策树ID3算法是一种常用的分类算法,用于根据已知的一组特征和标签数据,构建一个决策树模型来进行分类预测。

下面我将以一个示例来介绍决策树ID3算法的基本步骤和过程。

假设我们想要构建一个决策树模型来帮助我们判断一个人是否会购买一款新的智能手机。

我们已经收集了一些关于个体的特征数据和对应的购买结果数据,包括性别、年龄、收入和是否购买。

首先,我们需要计算每个特征对于分类结果的信息增益。

信息增益是指通过使用某个特征来对数据进行分类,所能获得的关于数据的新的信息量。

计算信息增益的公式如下:信息增益 = 熵(D) - ∑(Dv/D) * 熵(Dv)其中,熵(D)表示数据集D的混乱程度,熵的计算公式为:熵(D) = - ∑(pi * log2(pi))Dv表示特征A的某个取值,D表示数据集D的标签集合,pi表示标签i在数据集D中的比例。

我们首先计算整个数据集的熵D,然后计算每个特征的条件熵,最后将它们相加得到信息增益。

选择信息增益最大的特征作为当前节点的划分特征。

接下来,我们根据选择的特征将数据集划分成不同的子集。

每个子集都对应一个特征值的取值,例如性别特征可能有男和女两个取值。

我们对每个子集重复上述过程,以递归的方式构建子树。

在每个子树中,我们需要选择一个特征进行划分。

如果所有的特征都已经使用完毕,或者剩余的数据集已经完全属于同一类别,那么我们停止划分,将当前节点标记为叶节点,并将最常见的类别作为该节点的预测结果。

否则,我们选择信息增益最大的特征作为当前节点的划分特征,并继续递归构建子树。

最终,我们得到了一个完整的决策树模型。

我们可以使用该模型来对新的个体进行分类预测。

从根节点开始,根据个体的特征值选择相应的子节点,直到到达叶节点,将叶节点的预测结果作为最终的分类结果。

在本示例中,决策树模型可能会根据最佳特征先根据性别划分,接着根据年龄划分,最后根据收入划分。

我们可以根据决策树模型将一个新的个体划分到某个叶节点,并预测其是否会购买手机。

id3决策树算法例题

id3决策树算法例题

ID3决策树算法例题简介决策树是一种常见的机器学习算法,用于解决分类和回归问题。

其中,ID3(Iterative Dichotomiser 3)决策树算法是最早被提出的决策树算法之一。

本文将以一个例题为例,深入探讨ID3决策树算法的原理和应用。

例题描述假设我们要根据以下特征来判断一个水果是苹果还是橘子: 1. 颜色:红、橙 2. 直径:大、中等、小 3. 纹理:平滑、凹凸我们已经收集到了一些水果的样本数据,如下所示:编号颜色直径纹理类别1 红大平滑苹果2 红大凹凸苹果3 橙大平滑橘子4 橙小平滑橘子5 红中等平滑苹果我们希望构建一个决策树模型,通过输入颜色、直径和纹理这3个特征,能够预测水果的类别。

ID3决策树算法原理ID3决策树算法的核心思想是选择每次划分时信息增益最大的特征作为决策节点。

它采用自顶向下的贪心策略,递归地构建决策树。

下面详细介绍ID3算法的原理。

1. 计算信息熵首先,我们需要计算每个特征的信息熵,以此来衡量特征对分类结果的纯度影响。

信息熵的计算公式如下:H (D )=−∑p i Ni=1log 2p i其中,H (D )表示数据集D 的信息熵,N 表示类别的个数,p i 表示类别i 在数据集D 中的比例。

2. 计算信息增益接下来,对于每个特征A ,我们需要计算其信息增益Gain (D,A )。

信息增益是指特征A 对于数据集D 的纯度提升程度,计算公式如下:Gain (D,A )=H (D )−∑|D v ||D |Vv=1H (D v ) 其中,V 表示特征A 的取值个数,D v 表示特征A 取值为v 的样本子集。

3. 选择最佳划分特征根据计算得到的信息增益,选择信息增益最大的特征作为决策节点。

4. 递归构建决策树将选择的特征作为决策节点,以该特征的不同取值作为分支,递归地构建决策树。

计算步骤根据上面的原理,我们来逐步计算示例中的决策树。

1. 计算初始数据集的信息熵H (D )根据表格中的数据,我们可以计算出初始数据集的信息熵H (D ),其中苹果出现的概率为35,橘子出现的概率为25。

day-7sklearn库实现ID3决策树算法

day-7sklearn库实现ID3决策树算法

day-7sklearn库实现ID3决策树算法 本⽂介绍如何利⽤决策树/判定树(decision tree)中决策树归纳算法(ID3)解决机器学习中的回归问题。

⽂中介绍基于有监督的学习⽅式,如何利⽤年龄、收⼊、⾝份、收⼊、信⽤等级等特征值来判定⽤户是否购买电脑的⾏为,最后利⽤python和sklearn库实现了该应⽤。

1、决策树归纳算法(ID3)实例介绍 2、如何利⽤python实现决策树归纳算法(ID3)1、决策树归纳算法(ID3)实例介绍 ⾸先介绍下算法基本概念,判定树是⼀个类似于流程图的树结构:其中,每个内部结点表⽰在⼀个属性上的测试,每个分⽀代表⼀个属性输出,⽽每个树叶结点代表类或类分布。

树的最顶层是根结点。

决策树的优点:直观,便于理解,⼩规模数据集有效 决策树的缺点:处理连续变量不好,类别较多时,错误增加的⽐较快,可规模性⼀般 以如下测试数据为例: 我们有⼀组已知训练集数据,显⽰⽤户购买电脑⾏为与各个特征值的关系,我们可以绘制出如下决策树图像(绘制⽅法后⾯介绍) 此时,输⼊⼀个新的测试数据,就能根据该决策树很容易判定出⽤户是否购买电脑的⾏为。

有两个关键点需要考虑:1、如何决定分⽀终⽌;2如何决定各个节点的位置,例如根节点如何确定。

1、如何决定分⽀终⽌如果某个节点所有标签均为同⼀类,我们将不再继续绘制分⽀,直接标记结果。

或者分⽀过深,可以基于少数服从多数的算法,终⽌该分⽀直接绘制结果。

例如,通过年龄划分,所有middle_aged对象,对应的标签都为yes,尽管还有其它特征值,例如收⼊、⾝份、信⽤等级等,但由于标签所有都为⼀类,所以该分⽀直接标注结果为yes,不再往下细分。

2、如何决定各个节点的位置,例如根节点如何确定。

在说明这个问题之前,我们先讨论⼀个熵的概,信息和抽象,如何度量?1948年,⾹农提出了 “信息熵(entropy)”的概念,⼀条信息的信息量⼤⼩和它的不确定性有直接的关系,要搞清楚⼀件⾮常⾮常不确定的事情,或者是我们⼀⽆所知的事情,需要了解⼤量信息==>信息量的度量就等于不确定性的多少 例⼦:猜世界杯冠军,假如⼀⽆所知,猜多少次?每个队夺冠的⼏率不是相等的,也就说明该信息熵较⼤。

决策树ID3算法的实例解析

决策树ID3算法的实例解析


根据票数排名筛选出10大算法 (如果票数相同,则按字母顺序进行排名)
数据挖掘10大算法产生过程
1 2 3 4
三步鉴定流程 18种通过审核的候选算法 算法陈述 数据挖掘10大算法:一览
5
开放式讨论
18种通过审核的候选算法
§分类(Classification)
1. C4.5: Quinlan, J. R. 1993. C4.5: Programs for Machine Learning. Morgan Kaufmann Publishers Inc. 2. CART: L. Breiman, J. Friedman, R. Olshen, and C. Stone. Classification and Regression Trees. Wadsworth, Belmont, CA, 1984. 3. K Nearest Neighbours (kNN): Hastie, T. and Tibshirani, R. 1996. Discriminant Adaptive Nearest Neighbor Classification. IEEE Trans. Pattern Anal. Mach. Intell. (TPAMI). 18, 6 (Jun. 1996), 607-616. 4. Naive Bayes Hand, D.J., Yu, K., 2001. Idiot's Bayes: Not So Stupid After All? Internat. Statist. Rev. 69, 385-398.
共有145人参加了ICDM 2006 Panel (会议的专题讨论),并对18种 候选算法进行投票,选出了数据挖掘10大算法
排名 挖掘主题

机器学习-决策树之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中的数据数量。

决策树算法原理及应用举例

决策树算法原理及应用举例

决策树算法原理及应用举例决策树算法是一种基于树形结构的机器学习算法,用于分类和回归问题。

它通过构建一个树形模型来对实例进行决策,每个节点代表一个特征,每个分支代表一个特征的取值,叶节点代表最终的决策结果。

决策树算法的主要优点包括易于理解和解释、能够处理各种类型的数据、对缺失值和异常值具有较好的容忍度、能够很好地处理多分类问题、能够处理大规模数据集等。

传统的决策树算法包括ID3、C4.5、CART等。

下面以ID3算法为例,详细介绍决策树算法的原理及应用。

决策树算法的原理:1. 特征选择:决策树算法通过选择最优的特征对数据进行分割,使得每个分支的纯度(或不确定性)最大程度上降低。

常用的特征选择指标有信息增益、信息增益率、基尼指数等。

2. 特征划分:根据选择的特征对数据进行划分,生成子节点。

对于离散特征,每个取值生成一个分支;对于连续特征,可以选择一个阈值进行划分,将数据分为大于等于阈值和小于阈值两个分支。

3. 递归生成子树:对每个子节点递归地执行上述过程,直到满足停止条件。

停止条件可以是节点中的样本数小于某个阈值,或者分支纯度达到100%等。

决策树算法的应用:决策树算法在各个领域都有广泛的应用,以下是一些典型的应用举例:1. 银行信用评估:通过对客户的个人信息、财务状况等特征进行分析,构建决策树模型来评估客户的信用等级。

特征选择可以基于历史数据中客户违约情况的信息增益,通过对新客户的特征进行划分,预测他们是否有违约的风险。

2. 医疗诊断:在医疗诊断中,决策树可以用于帮助医生判断患者是否患有某种疾病。

通过收集患者的症状、体征、检查结果等特征,构建决策树模型,根据不同节点判断患者的诊断结果。

特征选择可以基于疾病的相关性、特定症状的重要性等,帮助医生快速准确地做出诊断。

3. 电子商务推荐:决策树可以用于电子商务中的个性化推荐系统。

通过分析用户的购买历史、浏览行为等特征,构建决策树模型来预测用户是否对某个商品感兴趣。

机器学习--决策树(ID3)算法及案例

机器学习--决策树(ID3)算法及案例

机器学习--决策树(ID3)算法及案例1基本原理决策树是一个预测模型。

它代表的是对象属性与对象值之间的一种映射关系。

树中每个节点表示某个对象,每个分支路径代表某个可能的属性值,每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。

一般情况下,决策树由决策结点、分支路径和叶结点组成。

在选择哪个属性作为结点的时候,采用信息论原理,计算信息增益,获得最大信息增益的属性就是最好的选择。

信息增益是指原有数据集的熵减去按某个属性分类后数据集的熵所得的差值。

然后采用递归的原则处理数据集,并得到了我们需要的决策树。

2算法流程检测数据集中的每个子项是否属于同一分类:If 是,则返回类别标签;Else计算信息增益,寻找划分数据集的最好特征划分数据数据集创建分支节点(叶结点或决策结点)for 每个划分的子集递归调用,并增加返回结果到分支节点中return 分支结点算法的基本思想可以概括为:1)树以代表训练样本的根结点开始。

2)如果样本都在同一个类.则该结点成为树叶,并记录该类。

3)否则,算法选择最有分类能力的属性作为决策树的当前结点.4 )根据当前决策结点属性取值的不同,将训练样本根据该属性的值分为若干子集,每个取值形成一个分枝,有几个取值形成几个分枝。

匀针对上一步得到的一个子集,重复进行先前步骤,递归形成每个划分样本上的决策树。

一旦一个属性只出现在一个结点上,就不必在该结点的任何后代考虑它,直接标记类别。

5)递归划分步骤仅当下列条件之一成立时停止:①给定结点的所有样本属于同一类。

②没有剩余属性可以用来进一步划分样本.在这种情况下.使用多数表决,将给定的结点转换成树叶,并以样本中元组个数最多的类别作为类别标记,同时也可以存放该结点样本的类别分布[这个主要可以用来剪枝]。

③如果某一分枝tc,没有满足该分支中已有分类的样本,则以样本的多数类生成叶子节点。

算法中2)步所指的最优分类能力的属性。

这个属性的选择是本算法种的关键点,分裂属性的选择直接关系到此算法的优劣。

决策树的经典算法ID3与C45

决策树的经典算法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算法例题经典

决策树id3算法例题经典

决策树id3算法例题经典一、决策树ID3算法例题经典之基础概念决策树ID3算法就像是一个超级聪明的小侦探,在数据的世界里寻找线索。

它是一种用来分类的算法哦。

比如说,我们要把一群小动物分成哺乳动物和非哺乳动物,就可以用这个算法。

它的基本思想呢,就是通过计算信息增益来选择特征。

就好比是在一堆乱糟糟的东西里,先找到那个最能区分开不同类别的特征。

比如说在判断小动物的时候,有没有毛发这个特征可能就很关键。

如果有毛发,那很可能就是哺乳动物啦。

二、经典例题解析假设我们有这样一个数据集,是关于一些水果的。

这些水果有颜色、形状、是否有籽等特征,我们要根据这些特征来判断这个水果是苹果、香蕉还是橙子。

首先看颜色这个特征。

如果颜色是红色的,那可能是苹果的概率就比较大。

但是仅仅靠颜色可不够准确呢。

这时候就需要计算信息增益啦。

通过计算发现,形状这个特征对于区分这三种水果的信息增益更大。

比如说圆形的可能是苹果或者橙子,弯弯的可能就是香蕉啦。

再考虑是否有籽这个特征。

苹果和橙子有籽,香蕉没有籽。

把这个特征也加入到决策树的构建当中,就可以更准确地判断出到底是哪种水果了。

三、决策树ID3算法的优缺点1. 优点这个算法很容易理解,就像我们平常做选择一样,一步一步来。

它的结果也很容易解释,不像有些复杂的算法,结果出来了都不知道怎么回事。

它不需要太多的计算资源,对于小数据集来说,速度很快。

就像小马拉小车,轻松就能搞定。

2. 缺点它很容易过拟合。

就是在训练数据上表现很好,但是一到新的数据就不行了。

比如说我们只根据训练数据里的几个苹果的特征构建了决策树,新的苹果稍微有点不一样,就可能判断错了。

它只能处理离散型的数据。

如果是连续型的数据,就需要先进行离散化处理,这就多了一道工序,比较麻烦。

四、实际应用场景1. 在医疗领域,可以用来判断病人是否患有某种疾病。

比如说根据病人的症状、年龄、性别等特征来判断是否得了感冒或者其他疾病。

就像医生的小助手一样。

【报告】id3算法实验报告

【报告】id3算法实验报告

【关键字】报告id3算法实验报告篇一:ID3算法实验报告一、实验原理决策树通过把实例从根节点排列到某个叶子节点来分类实例,叶子节点即为实例所属的分类。

树上的每一个节点说明了对实例的某个属性的尝试,并且该节点的每一个后继分支对应于该属性的一个可能值,例如下图。

构造好的决策树的关键在于如何选择好的逻辑判断或属性。

对于同样一组例子,可以有很多决策树能符合这组例子。

人们研究出,一般情况下或具有较大概率地说,树越小则树的预测能力越强。

要构造尽可能小的决策树,关键在于选择恰当的逻辑判断或属性。

由于构造最小的树是NP-难问题,因此只能采取用启发式策略选择好的逻辑判断或属性。

用信息增益度量期望熵最低,来选择分类属性。

公式为ID3算法创建树的Root结点如果Examples都为正,那么返回label=+中的单结点Root 如果Examples都为反,那么返回lable=-单结点树Root如果Attributes为空,那么返回单节点树Root,lable=Examples中最普遍的目标属性值否则开始A目标属性值lable=Examples中最普遍的否则在这个新分支下加一个子树ID3(example-vi,target-attribute,attributes-|A|)结束返回Root二、算法实现训练数据存放在Data.txt 中第一行为训练样本数量和每个样本中属性的数量第二行为每个属性取值的数量之后n行为所有样本节点数据结构struct DTNode{int name; //用1,2,3...表示选择的属性,0表示不用分类,即叶节点int data[D_MAX+1]; //表示此节点包含的数据,data[i]=1,表示包含二维数组data[][]中的第i条数据int leaf;//leaf=1 正例叶节点;leaf=2 反例叶节点;leaf=0不是节点int c; //c=1 正类;c=0 反类DTNode *child[P+1];//按属性值的个数建立子树};定义函数void Read_data() //从数据文件Data.txt中读入训练数据DT_pointer Create_DT(DT_pointer Tree,int name,int value)//创建决策树int chose(int *da)//选择分类属性float Gain(int *da,int p) //计算以p属性分类的期望熵float Entropy(int *da) //计算数据的熵int test_leaf(int *da) //尝试节点属性void Out_DT(DT_pointer Tree) //用线性表形式输出建立的决策树int Class(int *da) //对输入的尝试样本分类全局变量FILE *fp;int p_num; //属性的数量int pi[P_MAX+1]; //每个属性有几种取值int d_num;//数据的数量int data[P_MAX+1][D_MAX+1];//存储训练数据三、程序不足1.、默认训练数据是正确的,对是否发生错误不予考虑2、没有考虑训练数据可以包含缺少属性值的实例3、只能分正反两类四、程序源码#include#include#include#include#include#define P_MAX 10#define D_MAX 50#define P 5//一条数据包括所有属性的取值(1,2,3...)和分类的值(0或1)FILE *fp;int p_num; //属性的数量int pi[P_MAX+1]; //每个属性有几种取值int d_num;//数据的数量int data[P_MAX+1][D_MAX+1];//存储训练数据//定义结点类型struct DTNode{int name; //此节点分类属性的名称int data[D_MAX+1]; //表示此节点包含的数据int leaf; //leaf=1 正例叶节点;leaf=2 反例叶节点;叶节点int c; //c=1 正类;c=0 反类DTNode *child[P+1];//按属性值的个数建立子树};typedef struct DTNode *DT_pointer;DT_pointer DT = NULL;int root = 0;int test_leaf(int *da) leaf=0不是int i;int a,b;a = 0;// a=0表示没有0类a=1表示有0类for(i = 1; i { if(*(da+i) ==1 && data[i][0] == 0){a = 1;break;}}b = 0;//b=0表示没有1类b=1表示有1类for(i = 1;i { if(*(da+i) == 1 && data[i][0] == 1){b = 1;break;}}if(a == 0 && b == 1)return 1;//是1叶节点else if(a == 1 && b == 0)return 2;//是0叶节点else if(a == 0 && b == 0)return 2;//此节点无数据elsereturn 0;//不是叶节点}int test_c(int a) //给叶节点附属性值{if(a == 1)return 1;elsereturn 0;}float Entropy(int *da) //计算数据的熵{int i;篇二:ID3算法实验报告装订线:ID3算法分析与实现学院xxxxxxxxxxxxxxxxxxxx 专业xxxxxxxxxxxxxxxx 学号xxxxxxxxxxx 姓名xxxx 指导教师xxxxXX年x月xx日题目ID3算法分析与实现摘要:决策树是对数据进行分类,以此达到预测的目的。

ID3算法例题

ID3算法例题

14
14
14
基于天气决定是否打网球的信息增益为:
gain(天气) = inf o([9,5]) − inf o([2,3],[4,0],[3,2]) = 0.25
gain(气温) = 0.03
gain(风)= 0.05
gain(湿度)= 0.15
天 气 湿 风 打网
气温度

gain (天气) = 0.25
inf o([0,2],[1,1],[1,0]) = 0.40
gain(气温) = 0.57
天气 气温 湿度 风 打网球
gain(风) = 0.02
gain(湿度) = 0.97
gain(气温) = 0.57
gain(风) = 0.02
ID3
在生成决策树 后,可以方便地提 取决策树描述的知 识,并表示成ifthen形式的分类规 则。沿着根节点到 叶节点的每一条路 径对应一条决策规 则。
inf o([9,5]) = − 9 log 9 − 5 log 5 = 0.94 14 14 14 14
序天 打 号气 网

序天 打 号气 网

1晴 N 8 晴 N
2晴 N 9 晴 Y
3 多云 Y 10 雨 Y
4 雨 Y 11 晴 Y
5 雨 Y 12 多云 Y
6 雨 N 13 多云 Y

inf
o([27,3])多=ain(风)= 0.05
gain(湿度)= 0.15
天气晴的条件下打网球的期望增益:
gain(气温) = inf o([2,3]) − inf o([0,2],[1,1],[1,0]) = 0.57
天 气 湿 风 打网
气温度

决策树算法之ID3(基于信息增益的最优特征选取)

决策树算法之ID3(基于信息增益的最优特征选取)

决策树算法之ID3(基于信息增益的最优特征选取)决策树(Decision Tree)是一种常用的机器学习算法,用于解决分类和回归问题。

决策树通过对数据集进行递归分割,将数据集划分为更小的子集,使得每个子集内的样本具有更纯的类别。

ID3算法是决策树算法中的一种,它是基于信息增益的最优特征选取算法,它的核心思想是选择能够带来最大信息增益的特征作为划分标准。

下面将详细介绍ID3算法的原理、步骤和示例。

1.原理:在ID3算法中,使用信息增益来度量特征对数据集的划分能力。

信息增益是一种统计量,表示在已知特征值的条件下,熵的减少量。

熵是度量系统无序程度的指标,熵越大表示系统越无序,熵越小表示系统越有序。

2.步骤:(1) 计算数据集的熵。

熵的计算公式为H(D) = -Σ(p(i) *log2(p(i))),其中p(i)表示第i类样本在数据集中的比例,log2为以2为底的对数。

(2) 选择最优特征划分数据集。

对于每个特征,计算其信息增益,信息增益的计算公式为Gain(D, A) = H(D) - Σ(,Di, / ,D,) *H(Di),其中D表示数据集,A表示特征,Di表示在特征A上取值为i的样本子集,Di,表示Di的样本个数,D,表示数据集的样本个数。

(3)递归构建决策树。

选择信息增益最大的特征作为根节点,将数据集根据该特征的不同取值划分为多个子数据集,对每个子数据集使用步骤(1)和(2),直到满足停止条件为止。

(4)停止条件。

停止条件可以是所有样本属于同一类别,或者所有特征已经被遍历完。

3.示例:天气,玩是否尽兴,是否去游乐场------,---------,-----------晴天,是,是晴天,是,是阴天,是,否小雨,否,否小雨,是,否首先计算数据集的熵:H(D) = - (2/5 * log2(2/5) + 3/5 *log2(3/5)) ≈ 0.971然后计算每个特征的信息增益:- 对于天气特征,计算H(D,天气),根据天气的取值将数据集划分为晴天、阴天和小雨三个子数据集,分别求其熵并加权求和,得到H(D,天气) ≈ (2/5 * 0 + 1/5 * log2(1/5) + 2/5 * log2(2/5)) ≈ 0.918、然后计算信息增益Gain(D, 天气) = H(D) - H(D,天气) ≈ 0.971 -0.918 ≈ 0.053- 对于玩是否尽兴特征,计算H(D,玩是否尽兴),根据玩是否尽兴的取值将数据集划分为是和否两个子数据集,分别求其熵并加权求和,得到H(D,玩是否尽兴) ≈ (3/5 * 0 + 2/5 * log2(2/5)) ≈ 0.971、然后计算信息增益Gain(D, 玩是否尽兴) = H(D) - H(D,玩是否尽兴) ≈ 0.971 - 0.971 ≈ 0。

id3决策树算法例题

id3决策树算法例题

id3决策树算法例题
以下是一个使用ID3决策树算法的例题:
假设我们有一个关于公司销售数据的集,包含每个公司的销售记录,每个公司销售的年份和每个年份的销售额。

我们可以用这些记录创建ID3决策树。

1. 选择基础特征:每个公司的销售记录中的年份。

2. 选择特征:每个公司的销售记录中的每个年份的销售额。

3. 选择操作:将销售额设置为0,表示这个公司从来没有销售过产品。

将销售额设置为1,表示这个公司最近一年没有销售过产品。

将销售额设置为2,表示这个公司在过去两年中销售过产品。

4. 选择操作:将销售额除以平均销售额,得到每个类别的平均销售额和变异系数。

5. 选择操作:将变异系数设置为-1,表示所有公司的销售额都是0。

6. 建立ID3决策树:输入年份特征,按顺序输出每个类别的销售额特征,再输出类别对应的变异系数。

例如,当输入年份为2018年时,ID3决策树的输出如下:
- 类别1:2018年销售过产品,平均销售额3,变异系数-0.25;
- 类别2:2019年销售过产品,平均销售额2,变异系数-0.12;
- 类别3:2020年销售过产品,平均销售额1,变异系数0.18;
- 类别4:2019年没有销售过产品,平均销售额3,变异系数-0.3; - 类别5:2020年没有销售过产品,平均销售额2,变异系数-0.2。

输出结果即为每个类别的销售额特征和对应的变异系数,这可以帮助我们更好地理解公司的销售额分布和趋势。

分类决策树_ID3算法(精华-理论加实例)

分类决策树_ID3算法(精华-理论加实例)

学生
否 否 否 否 是 是 是
信誉
良 优 良 良 良 优 优
归类:买计算机?
不买 不买 买 买 买 不买 买 学生? 否 不买 是 买 买 优 不买 信誉? 良 买 青
谁在买计算机?
年龄? 老

128
64 132 64 32 32 63 1

青 老 青 中 中 老 老

低 中 中 中 高 中 中

是 是 是 否 是 否 否
分类任务的输入数据是纪录的集合,每条记录也称为实例 或者样例。用元组(X,y)表示,其中,X 是属性集合,y是一个 特殊的属性,指出样例的类标号(也称为分类属性或者目标属性)
第6章 决策树
关于分类问题
名称 人类 海龟 鸽子 鲸 体温 恒温 冷血 恒温 恒温 表皮覆 盖 毛发 鳞片 羽毛 毛发
决策树基本概念
1、Hunt,Marin和Stone 于1966年研制的CLS学习系统,用于学习单个概 念。 2、1979年, J.R. Quinlan 给出ID3算法,并在1983年和1986年对ID3 进行 了总结和简化,使其成为决策树学习算法的典型。 3、Schlimmer 和Fisher 于1986年对ID3进行改造,在每个可能的决策树 节点创建缓冲区,使决策树可以递增式生成,得到ID4算法。 4、1988年,Utgoff 在ID4基础上提出了ID5学习算法,进一步提高了效 率。 1993年,Quinlan 进一步发展了ID3算法,改进成C4.5算法。 5、另一类决策树算法为CART,与C4.5不同的是,CART的决策树由二 元逻辑问题生成,每个树节点只有两个分枝,分别包括学习实例的正 例与反例。
第6章 决策树
决策树算法
CLS算法
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

机器学习--决策树(ID3)算法及案例1基本原理决策树是一个预测模型。

它代表的是对象属性与对象值之间的一种映射关系。

树中每个节点表示某个对象,每个分支路径代表某个可能的属性值,每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。

一般情况下,决策树由决策结点、分支路径和叶结点组成。

在选择哪个属性作为结点的时候,采用信息论原理,计算信息增益,获得最大信息增益的属性就是最好的选择。

信息增益是指原有数据集的熵减去按某个属性分类后数据集的熵所得的差值。

然后采用递归的原则处理数据集,并得到了我们需要的决策树。

2算法流程检测数据集中的每个子项是否属于同一分类:If是,则返回类别标签;Else计算信息增益,寻找划分数据集的最好特征划分数据数据集创建分支节点(叶结点或决策结点)for每个划分的子集递归调用,并增加返回结果到分支节点中return分支结点算法的基本思想可以概括为:1)树以代表训练样本的根结点开始。

2)如果样本都在同一个类.则该结点成为树叶,并记录该类。

3)否则,算法选择最有分类能力的属性作为决策树的当前结点.4)根据当前决策结点属性取值的不同,将训练样本根据该属性的值分为若干子集,每个取值形成一个分枝,有几个取值形成几个分枝。

匀针对上一步得到的一个子集,重复进行先前步骤,递归形成每个划分样本上的决策树。

一旦一个属性只出现在一个结点上,就不必在该结点的任何后代考虑它,直接标记类别。

5)递归划分步骤仅当下列条件之一成立时停止:①给定结点的所有样本属于同一类。

②没有剩余属性可以用来进一步划分样本.在这种情况下.使用多数表决,将给定的结点转换成树叶,并以样本中元组个数最多的类别作为类别标记,同时也可以存放该结点样本的类别分布[这个主要可以用来剪枝]。

③如果某一分枝tc,没有满足该分支中已有分类的样本,则以样本的多数类生成叶子节点。

算法中2)步所指的最优分类能力的属性。

这个属性的选择是本算法种的关键点,分裂属性的选择直接关系到此算法的优劣。

一般来说可以用比较信息增益和信息增益率的方式来进行。

其中信息增益的概念又会牵扯出熵的概念。

熵的概念是香农在研究信息量方面的提出的。

它的计算公式是:Info(D)=-p1log(p1)/log(2.0)-p2log(p2)/log(2.0)-p3log(p3)/log(2.0)+...-pNlog(pN) /log(2.0)(其中N表示所有的不同类别)而信息增益为:Gain(A)=Info(D)-Info(Da)其中Info(Da)数据集在属性A的情况下的信息量(熵)。

3算法的特点优点:计算复杂度不高,输出结果易于理解,对中间值的缺失不敏感,可以处理不相关特征数据。

缺点:可能会产生过度匹配问题适用数据范围:数值型和标称型。

4python代码实现1、创建初始数据集,用于测试#######################################功能:创建数据集#输入变量:空#输出变量:data_set,labels数据集,标签######################################def create_data_set():data_set=[[1,1,'yes'],[1,1,'yes'],[1,0,'no'],[0,1,'no'],[0,1,'no']]#数据集最后一列表示叶结点,也称类别标签labels=['no surfacing','flippers']#表示决策结点,也称特征标签return data_set,labels2、计算给定数据集的信息熵##############################功能:计算信息熵#输入变量:data_set数据集#输出变量:shannon_ent信息熵#############################def calc_shannon_ent(data_set):num_entries=len(data_set)label_counts={}for feat_vec in data_set:current_label=feat_vec[-1]#get相当于一条if...else...语句#如果参数current_label不在字典中则返回参数0,#如果current_label在字典中则返回current_label对应的value值label_counts[current_label]=label_counts.get(current_label,0)+1shannon_ent=0.0for key in label_counts:prob=float(label_counts[key])/num_entriesshannon_ent-=prob*log(prob,2)return shannon_ent3、按照给定特征划分数据集。

分类算法除了需要测量信息熵,还需要划分数据集,这就需要对每个特征划分数据集的结果计算一次信息熵,然后判断按照哪个特征划分数据集是最好的划分方式。

##################################功能:划分数据集#输入变量:data_set,axis,value#数据集,数据集的特征,特征的值#输出变量:ret_data_set,划分后的数据集#################################def split_data_set(data_set,axis,value):ret_data_set=[]for feat_vec in data_set:if feat_vec[axis]==value:#把axis特征位置之前和之后的特征值切出来#没有使用del函数的原因是,del会改变原始数据reduced_feat_vec=feat_vec[:axis]reduced_feat_vec.extend(feat_vec[axis+1:])ret_data_set.append(reduced_feat_vec)return ret_data_set4、遍历整个数据集,循环划分数据并计算信息熵,通过计算最大信息增益来找到最好的特征划分方式。

具体做法是,遍历当前特征中的所有唯一属性值,对每个特征划分一次数据集,然后计算数据集的新熵值,并对所有唯一特征值得到的熵求和。

最后用所求的和值与原始信息熵相减,计算寻找最大信息增益。

#######################################功能:选择最好的数据集划分方式#输入变量:data_set待划分的数据集#输出变量:best_feature计算得出最好的划分数据集的特征######################################def choose_best_feature_to_split(data_set):num_features=len(data_set[0])-1#最后一个是类别标签,所以特征属性长度为总长度减1base_entropy=calc_shannon_ent(data_set)#计算数据集原始信息熵best_info_gain=0.0best_feature=-1for i in xrange(num_features):#feat_vec[i]代表第i列的特征值,在for循环获取这一列的所有值feat_list=[feat_vec[i]for feat_vec in data_set]unique_vals=set(feat_list)#set函数得到的是一个无序不重复数据集new_entropy=0.0#计算每种划分方式的信息熵for value in unique_vals:sub_data_set=split_data_set(data_set,i,value)prob=len(sub_data_set)/float(len(data_set))new_entropy+=prob*calc_shannon_ent(sub_data_set)info_gain=base_entropy-new_entropyif info_gain>best_info_gain:best_info_gain=info_gainbest_feature=ireturn best_feature5递归构建决策树工作原理:得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。

第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据。

因此我们可以采用递归的原则处理数据集。

递归结束条件是:第一、所有的类别标签(叶结点)完全相同。

第二、使用完了所有的特征,仍然不能将数据集划分成仅包含唯一类别的分组,则挑选出次数最多的类别作为返回值。

#######################################功能:多数表决分类#输入变量:class_list所有数据的标签数组#输出变量:sorted_class_count[0][0]出现次数最多的分类名称######################################def majority_vote_sort(class_list):class_count={}for vote in class_list:class_count[vote]=class_count.get(vote,0)+1#items以列表方式返回字典中的键值对,iteritems以迭代器对象返回键值对,而键值对以元组方式存储,即这种方式[(),()]#operator.itemgetter(0)获取对象的第0个域的值,即返回的是key值#operator.itemgetter(1)获取对象的第1个域的值,即返回的是value 值#operator.itemgetter定义了一个函数,通过该函数作用到对象上才能获取值#reverse=True是按降序排序sorted_class_count=sorted(class_count.iteritems(),key=operator.itemgetter(1),reverse=True)return sorted_class_count[0][0]#######################################功能:创建数#输入变量:data_set,labels待分类数据集,标签#输出变量:my_tree决策树######################################def create_tree(data_set,labels):class_list=[example[-1]for example in data_set]#判断类别标签是否完全相同#count()是列表内置的方法,可以统计某个元素在列表中出现的次数if class_list.count(class_list[0])==len(class_list):return class_list[0]#遍历完所有特征时返回出现次数最多的if len(data_set[0])==1:return majority_vote_sort(class_list)best_feat=choose_best_feature_to_split(data_set)best_feat_label=labels[best_feat]my_tree={best_feat_label:{}}del(labels[best_feat])#得到列表包含的所有属性值feat_values=[example[best_feat]for example in data_set]unique_vals=set(feat_values)for value in unique_vals:sub_labels=labels[:]#:复制特征标签,为了保证循环调用函数create_tree()不改变原始的内容ret_data_set=split_data_set(data_set,best_feat,value)my_tree[best_feat_label][value]=create_tree(ret_data_set,sub_labels) return my_tree6测试代码def main():my_data,my_labels=create_data_set()#my_data[0][-1]='maybe'print'my_data=',my_dataprint'my_labels=',my_labelsshannon_ent=calc_shannon_ent(my_data)print'shannon_ent=',shannon_entret_data_set=split_data_set(my_data,1,1)#由第1个特征且特征值为1的数据集划分出来print'ret_data_set=',ret_data_setbest_feature=choose_best_feature_to_split(my_data)print'best_feature=',best_featuremy_tree=create_tree(my_data,my_labels)print'my_tree=',my_treeif__name__=='__main__':main()在进行案例分析前,先对决策树算法的分类函数进行测试。

相关文档
最新文档