3-3 选择最好的数据集划分方式
1. 该函数实现选取特征、划分数据集、计算得出最好的划分数据集的特征。
2. 算法思想:
(1)遍历数据集中所有特征,创建一个无序不重复的set集合。
(2)遍历当前特征中的所有唯一属性值,对每个唯一的属性值划分数据集,然后计算数据集的新熵值,并对所有唯一特征值得到的熵求和。
(3)比较所有特征中的信息增益,返回最好特征划分的索引值。
3. 函数的实现:
def chooseBestFeatureToSplit(dataSet):
numFeatures = len(dataSet[0]) - 1 # 特征数量,减去最后一列
baseEntropy = calcShannonEnt(dataSet) # 计算数据集的香农熵
bestInfoGain = 0.0 # 信息增益
bestFeature = -1 # 最优特征的索引值,初始化为-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划分后的子集