def chooseBestFeatureToSplit(dataSet, labels):
时间: 2024-02-18 11:02:16 浏览: 19
该函数用于选择最优的特征进行数据集的划分。
函数参数:
- dataSet:待划分的数据集;
- labels:标签列表,即数据集中所有样本对应的类别标签。
函数返回值:
- bestFeature:最优特征对应的列索引。
函数实现:
```
import math
def chooseBestFeatureToSplit(dataSet, labels):
numFeatures = len(dataSet[0]) - 1 # 特征数量
baseEntropy = calcShannonEnt(dataSet) # 计算原始数据集的信息熵
bestInfoGain = 0.0 # 最优信息增益
bestFeature = -1 # 最优特征对应的列索引
for i in range(numFeatures):
# 获取数据集中第i个特征所有可能的取值
featList = [example[i] for example in dataSet]
uniqueVals = set(featList)
newEntropy = 0.0 # 初始化新的信息熵
for value in uniqueVals:
# 对第i个特征的每个取值划分数据集
subDataSet = splitDataSet(dataSet, i, value)
# 计算子数据集的概率
prob = len(subDataSet) / float(len(dataSet))
# 计算子数据集的信息熵,并加权求和
newEntropy += prob * calcShannonEnt(subDataSet)
# 计算信息增益
infoGain = baseEntropy - newEntropy
# 比较信息增益,更新最优特征
if infoGain > bestInfoGain:
bestInfoGain = infoGain
bestFeature = i
return bestFeature
```
函数实现说明:
- 首先获取数据集中特征的数量numFeatures和原始数据集的信息熵baseEntropy;
- 然后遍历每个特征,获取该特征所有可能的取值,计算每个取值对应的子数据集的信息熵,并加权求和,得到新的信息熵newEntropy;
- 计算信息增益,比较信息增益大小,更新最优特征;
- 最后返回最优特征对应的列索引bestFeature。
该函数的实现流程如下:
1. 计算原始数据集的信息熵;
2. 对每个特征,计算该特征所有可能取值的信息熵,并加权求和,得到新的信息熵;
3. 计算信息增益,选择信息增益最大的特征作为当前节点的划分特征;
4. 返回最优特征的列索引。