欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

机器学习 - 决策树中信息增益、信息增益率计算和最佳特征选择的 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)