机器学习(三)——决策树

本文深入探讨了决策树模型,包括决策树的节点类型、特点和基本算法。重点讲解了如何选择最优划分属性,如信息增益、增益率和基尼指数。还介绍了决策树的代码实现,包括信息熵的Python代码,以及如何创建和可视化决策树。文章结尾总结了三种方法的优缺点,并提供了实验案例。

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

目录

什么是决策树

决策树的节点

决策树的特点

决策树的基本算法

决策树的划分选择

如何选择最优划分属性

方法一:信息增益

信息熵的python代码实现:

用信息增益划分最优属性的python代码:

方法二:增益率

小总结

方法三:基尼指数

决策树相关代码理解

递归创键决策树:

按照给定特征值划分数据集:

 统计并返回出现次数最多的类别:

创建决策树:

实现决策树可视化:

输出结果:

决策树的储存:

 测试:

我的实验:

总结:

利用信息增益生成决策树:

利用增益率生成决策树:

利用基尼指数生成决策树:


什么是决策树

分类决策树模型是一种描述对实例进行分类的树形结构,它由节点有向边组成

决策树的节点

分为内部节点和叶节点

内部节点——代表一个特征或属性

叶节点——代表一个类

如下图 ,黑色的为内部节点,红色的为叶节点:

决策树的特点

1.对属性进行“测试”即对就决策过程中的问题进行判定

2.决策树上的每条路径都是一个判定测试序列

决策树的最终学习目的是为了产生一颗泛化能力强即能够有效处理未知样本的决策树

决策树的基本算法

注意:当某一判定测试序列的结果为空(无对应样本),将当前节点标记为叶子节点并进行回溯——回到父节点,以父节点的测试结果为准


决策树的划分选择

优秀的决策树应该具备优秀的划分属性、高纯度的节点

如何选择最优划分属性

方法一:信息增益

信息熵——度量样本集合纯度的指标之一,信息熵(Ent(D))的值越小,则样本集合(D)的纯度越高,Ent(D)最小为0,最大值为log2|y|

Ent(D)计算公式:

PS:Pk为第k类样本在样本集合D中所占的比例

当p=0或p=1时,样本集合纯度百分百。

原因:

信息熵的python代码实现:

该函数可计算数据集的香农熵,将数据集的最后一列设为键值,并为所有可能的分类创建字典,其中若发现新分类(新键值),则扩展字典并加入新键值。

def calcShannonEnt(dataSet):
    numEntries = len(dataSet)
    labelCounts = {}#字典
    for featVec in dataSet: #the the number of unique elements and their occurance
        currentLabel = featVec[-1]
        #扩展字典添加新键值
        if currentLabel not in labelCounts.keys(): labelCounts[currentLabel] = 0
        labelCounts[currentLabel] += 1#统计键值出现的次数
    shannonEnt = 0.0
    for key in labelCounts:
        prob = float(labelCounts[key])/numEntries#统计某一键值出现频率
        shannonEnt -= prob * log(prob,2) #log base 2
    return shannonEnt

信息增益基于信息熵(Ent(D))

用信息增益划分最优属性的python代码:

以下代码为信息增益公式的代码形式,是实现信息增益划分属性的核心:

baseEntropy = calcShannonEnt(dataSet)#得到总熵值
#得到每种决策属性的比例
prob = len(subDataSet)/float(len(dataSet))
#得到各个特征值对应的熵
newEntropy += prob * calcShannonEnt(subDataSet)

从下列代码我学习到了:

1.python的列表推导式:[表达式 for 变量 in 列表];形如:[example[i] for example in dataSet]

以行的形式遍历数据集,并取出第i列;

2.利用set集合的性质取出列表中的重复元素,得到某一属性的分类标签列表。

def chooseBestFeatureToSplit(dataSet):
    numFeatures = len(dataSet[0]) - 1      #the last column is used for the labels
    baseEntropy = calcShannonEnt(dataSet)#得到总熵值
    bestInfoGain = 0.0; bestFeature = -1
    for i in range(numFeatures):        #iterate over all the features
        featList = [example[i] for example in dataSet]#create a list of all the examples of this feature
        #利用set内值不重复的性质得到某一属性的分类标签列表
        uniqueVals = set(featList)       #get a set of unique values
        newEntropy = 0.0
        #遍历特征值得到相应的数据集
        for value in uniqueVals:
            subDataSet = splitDataSet(dataSet, i, value)
            #得到每种决策属性的比例
            prob = len(subDataSet)/float(len(dataSet))
            #得到各个特征值对应的熵
            newEntropy += prob * calcShannonEnt(subDataSet)
            #计算信息增益     
        infoGain = baseEntropy - newEntropy     #calculate the info gain; ie reduction in entropy
        if (infoGain > bestInfoGain):       #compare this to the best gain so far
            bestInfoGain = infoGain         #if better than current best, set to best
            bestFeature = i
            #返回最优划分属性的索引值
    return bestFeature                      #returns an integer

ID3决策树学习算法就是以信息增益为准则来划分属性的算法

特点:一般而言,信息增益越大,则意味着该属性越适合作为划分属性;信息增益对可取值数目较多的属性有所偏好。


方法二:增益率

IV(a):属性a的固有值,属性a的可能取值数目越大,IV(a)的值通常越大

增益率基于IV(a)

公式如下:

决策树算法是一种广泛应用于分类和回归的机器学习算法,它基于树形结构对样本进行分类或预测。决策树算法的主要思想是通过一系列的判断来对样本进行分类或预测。在决策树中,每个节点表示一个属性或特征,每个分支代表该属性或特征的一个取值,而每个叶子节点代表一个分类或预测结果。 决策树算法的训练过程主要包括以下步骤: 1. 特征选择:根据某种指标(如信息增益或基尼系数)选择最优的特征作为当前节点的分裂属性。 2. 决策树生成:根据选择的特征将数据集分成若干个子集,并递归地生成决策树。 3. 剪枝:通过剪枝操作来提高决策树的泛化性能。 决策树算法的优点包括易于理解和解释、计算复杂度较低、对缺失值不敏感等。但是,决策树算法也存在一些缺点,如容易出现过拟合、对离散数据敏感等。 下面是一个决策树算法的案例:假设我们要根据一个人的年龄、性别、教育程度和职业预测其收入水平(高于或低于50K)。首先,我们需要将这些特征进行编码,将其转换为数值型数据。然后,我们可以使用决策树算法对这些数据进行训练,并生成一个决策树模型。最后,我们可以使用该模型对新的数据进行分类或预测。例如,根据一个人的年龄、性别、教育程度和职业,我们可以使用决策树模型预测该人的收入水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值