决策树算法中选择最优特征的代码详解
决策树算法中选择最优特征的代码详解
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 著作权归作者所有。请勿转载和采集!