决策树ID3算法python实现代码及详细注释

本文介绍了决策树算法的重要性和特性,包括计算复杂度不高、易于理解和处理不相关特征数据等。通过详细注释的Python代码,展示了如何实现ID3决策树算法,包括计算香浓熵、划分数据集、选择最佳特征、创建决策树和分类功能。同时,文章提到了决策树可能存在的过度匹配问题,并指出其不适用于数值型数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kNN算法可以完成很多分类任务,但是最大的缺点就是不能给出数据的内在含义,决策树算法的主要优势就在于数据形式非常容易理解。

决策树的一个重要任务就是理解数据中所蕴含的知识信息。它可以使用不熟悉的数据集合,从中提取出一系列规则。

这些根据数据集创建规则的过程,就是机器学习的过程,在专家系统中经常应用这一原理。

决策树的特性:

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

缺点:可能会产生过度匹配问题;

使用数据:数值型和标称型。

代码实现:

1、计算给定数据集的香浓熵

def calcShannonEnt(dataSet):
numEntries = len(dataSet) #获得数据集中实例总数
labelCounts = {} #创建空字典(键-值为‘label’-‘数目’)
for featVec in dataSet: #遍历数据集
currentLabel = featVec[-1] #将label赋值给currentLabel
if currentLabel not in labelCounts.keys(): #如果字典里没有此label
labelCounts[currentLabel] = 0 #数目置0
labelCounts[currentLabel] += 1 #如果字典里已有此label,数目+1
shannonEnt = 0.0 #初始化香浓变量
for keys in labelCounts: #遍历字典(键-值为‘label’-‘数目’)
prop = float(labelCounts[key]) / numEntries #计算p
shannonEnt -= prop * log(prop, 2) #计算熵
return shannonEnt #返回熵值

2、按照给定特征划分数据集

def splitDataSet(dataSet, axis, value):
retDataSet = [] #创建空表
for featVec in dataSet: #遍历数据集
if featVec[axis] == value: #当第axis个特征值为value
reduedFeatVec = featVec[: axis] #列表0-axis元素复制
reduedFeatVec.extend(featVec[axis+1: ]) #列表axis-最后元素复制
retDataSet.append(reduedFeatVec) #复制的完整样本接入表中
return retDataSet #返回表

3、选择最好的数据集划分方式

 def chooseBestFeatureToSplit(dataSet):
  numFeatures = len(dataSet[0] - 1) #获取特征数目
  baseEntropy = calcShannonEnt(dataSet) #计算原始数据集香浓熵
  bes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值