决策树算法中选择最优特征的代码详解

def chooseBestFeatureToSplit(dataSet):
    numFeatures = len(dataSet[0]) - 1                     #特征数量
    baseEntropy = calcShannonEnt(dataSet)                 #计算数据集的香农熵
    bestInfoGain = 0.0                                    #信息增益
    bestFeature = -1                                      #最优特征的索引值
    for i in range(numFeatures):                          #遍历所有特征
        #获取dataSet的第i个所有特征
        featList = [example[i] for example in dataSet]
        uniqueVals = set(featList)                         #创建set集合{},元素不可重复
        newEntropy = 0.0                                   #经验条件熵
        for value in uniqueVals:                           #计算信息增益
            subDataSet = splitDataSet(dataSet, i, value)           #subDataSet划分后的子集
            prob = len(subDataSet) / float(len(dataSet))           #计算子集的概率
            newEntropy += prob * calcShannonEnt(subDataSet)        #根据公式计算经验条件熵
        infoGain = baseEntropy - newEntropy                        #信息增益
        print('第%d个特征的增益为%.3f' % (i, infoGain))             #打印每个特征的信息增益
        if (infoGain > bestInfoGain):                              #计算信息增益
            bestInfoGain = infoGain                                #更新信息增益,找到最大的信息增益
            bestFeature = i                                        #记录信息增益最大的特征的索引值
    return bestFeature                                             #返回信息增益最大的特征的索引值

该代码实现了决策树算法中选择最优特征的功能,具体解释如下:

  • 第一行计算数据集中特征的数量 numFeatures
  • 第二行计算数据集的香农熵,即数据集中所有样本的分类信息的不确定性,这是计算信息增益的基础。
  • 第三行初始化最优信息增益和最优特征的索引值。
  • 第四行开始遍历所有特征。
  • 第六行获取数据集中第 i 个特征的所有取值。
  • 第七行创建一个空集合 uniqueVals,用于存储不重复的特征取值。
  • 第八行初始化经验条件熵 newEntropy 为 0。
  • 第九行开始遍历特征取值。
  • 第十行调用 splitDataSet 函数,将数据集按照当前特征值划分成子集,得到子集 subDataSet
  • 第十一行计算子集 subDataSet 占总数据集的概率 prob
  • 第十二行计算子集 subDataSet 的经验条件熵,根据公式计算。
  • 第十三行根据公式计算信息增益。
  • 第十四行打印每个特征的信息增益。
  • 第十五行如果当前特征的信息增益大于最优信息增益,更新最优信息增益和最优特征的索引值。
  • 第十六行返回最优特征的索引值。

代码中的关键步骤

  • 计算香农熵: 用于衡量数据集的混乱程度,熵值越大,混乱程度越高。
  • 计算经验条件熵: 针对每个特征的每个取值,计算其对应子集的香农熵,并加权平均得到经验条件熵。
  • 计算信息增益: 信息增益指的是使用某个特征划分数据集后,数据集混乱程度的减少量,信息增益越大,说明该特征划分数据集的效果越好。

代码的应用

该代码可以用于决策树算法中选择最优特征,在构建决策树时,需要选择信息增益最大的特征作为分裂节点,从而得到最优的决策树模型。

决策树算法中选择最优特征的代码详解

原文地址: https://www.cveoy.top/t/topic/n1Uu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录