机器学习 - 决策树中信息增益、信息增益率计算和最佳特征选择的 Python 实现
最编程
2024-05-19 16:57:31
...
def gain_rate(impurity_t, impurity_before_divide, data_set, probable_feature):
"""
计算信息增益率
相对于信息增益的计算,信息增益率还要求解出由于该特征的不同取值带来的不确度。
- 若由于特征取值带来的不确定度为0,说明无特征取值连续化影响,直接返回信息增益;
- 若特征取值带来的不确定度不是0,则使用信息增益除以特征取证带来的不确定度。
Parameters
----------
impurity_t: str,不纯度的度量方式,只能是{"entropy","gini"}中的一个。
impurity_before_divide: float,表示数据集划分前的不纯度。
data_set: dict,划分前的数据集。
probable_feature: str,用于划分数据集的特征。
Return
------
result: float,表征信息增益值。
"""
impurity_after_divide = 0 # 初始化数据集划分后的不存度为0
for value in set(date_set[probable_feature]): # 获取该特征所有的取值并使用集合去重,遍历之
one_sublabel_array = dividing_data_set( # 获取该子数据集中的标签集数组
date_set = date_set,
node_feature = probable_feature,
node_feature_value = value
)['labels']
impurity_after_divide = impurity(one_sublabel_array,impurity_t) # 累加每个子数据标签集的不存度
gain = impurity_before_divide - impurity_after_divide # 做差得到这个特征的增益
feature_impurity = impurity(data_set[probable_feature],impurity_t)
gain_rate = gain/feature_impurity if feature_impurity > 0 else gain
return gain_rate
impurity_t = "entropy" # 使用信息熵度量混杂度
impurity_before_divide = impurity(date_set["labels"],impurity_t) # 数据集划分前labels的混杂度
probable_feature = "feature_13" # 假设当前划分数据集用该特征
gain_rate(impurity_t, impurity_before_divide, date_set, probable_feature)
上一篇: 一起住在樟树公寓。