信息增益率详解

发布时间:2023-05-21

一、信息熵

信息熵是度量样本集合的无序程度的一种指标。如果一个样本集合的纯度较高,那么熵值就比较小;反之,如果一个样本集合的纯度比较低,那么熵值就比较大。 设样本集合 D 中第 k 类样本所占的比例为 pk(k=1,2,…,|y|),则 D 的信息熵的计算公式为:

def calc_entropy(data_set):
    num_entries = len(data_set)
    label_counts = {}
    for feat_vec in data_set:
        current_label = feat_vec[-1]
        if current_label not in label_counts.keys():
            label_counts[current_label] = 0
        label_counts[current_label] += 1
    entropy = 0.0
    for key in label_counts:
        prob = float(label_counts[key])/num_entries
        entropy -= prob * log(prob, 2)
    return entropy

二、信息增益

信息增益是指在得知样本特征 X 的信息所能提供的关于样本类别的信息量,它的计算公式为类别标签的信息熵H(Y)减去在特征 X 已知条件下类别标签的条件熵H(Y|X),用数学式子表示即: 信息增益越大,表示特征对样本分类的重要性越高。在构造决策树时,我们选择信息增益最大的特征作为当前节点对数据进行划分,重复该步骤,直到划分完毕。

def calc_info_gain(data_set, base_entropy, feat_idx):
    num_entries = len(data_set)
    feat_vals = [example[feat_idx] for example in data_set]
    unique_vals = set(feat_vals) 
    new_entropy = 0.0
    for value in unique_vals:
        sub_set = split_data_set(data_set, feat_idx, value)
        prob = len(sub_set)/float(num_entries)
        new_entropy += prob * calc_entropy(sub_set)
    info_gain = base_entropy - new_entropy
    return info_gain

三、信息增益率

信息增益率在选择划分属性时对可选择的属性数进行了惩罚,避免选择取值数目较多的属性,即会将其权值进行降低,计算公式为: 用信息增益率来选择属性时,先从候选划分属性中找出所有能使信息增益高于平均水平的属性,再从中选择信息增益率最高的。

def calc_info_gain_ratio(data_set, base_entropy, feat_idx):
    num_entries = len(data_set)
    feat_vals = [example[feat_idx] for example in data_set]
    unique_vals = set(feat_vals) 
    new_entropy = 0.0
    split_info = 0.0
    for value in unique_vals:
        sub_set = split_data_set(data_set, feat_idx, value)
        prob = len(sub_set)/float(num_entries)
        new_entropy += prob * calc_entropy(sub_set)
        split_info -= prob * log(prob, 2)
    if split_info == 0.0:
        return 0.0
    info_gain = base_entropy - new_entropy
    info_gain_ratio = info_gain / split_info
    return info_gain_ratio

四、实例分析

在使用信息增益率算法建立决策树时,在选择初始特征时,根据信息增益率最高的原则,选取了编号为2(有工作?)的属性进行划分,选择该属性的理由是它能将样本集划分成唯一的三个子集,且每个子集的信息熵都比较小。结果如下图所示: 可以看出,经过信息增益率算法构建的决策树比信息增益算法构建的更为简洁,划分效果更好。