决策树

决策树分为分类树和回归树,用于分类和预测。构建决策树的关键是属性选择,常用方法有信息增益、信息增益比率和基尼系数。信息增益可能偏向于属性值多的属性,而增益比率通过引入分裂信息避免了这一问题,但可能导致不平衡划分。基尼系数度量数据集的不纯度,CART算法常使用基尼系数构造二叉决策树。
摘要由CSDN通过智能技术生成

决策树

  决策树分为分类树和回归树,分类树用于分类,如晴天/阴天/雨天,用户性别、邮件是否垃圾邮件,回归树用于预测实数值,如明天的温度,用户的年龄。

  构建决策树重要步骤是选择最佳属性,使得基于该属性分裂后,每个分支的记录类别尽可能纯。

  构建的决策树是否是严格的二叉树由属性选择度量确定,某些属性选择度量,如基尼系数强制结果树是二叉树,其他度量,如信息增益、信息增益比率并非如此,它允许多路划分。

属性选择方法

  属性选择方法总是选择最好的属性作为分裂属性,即让每个分支的记录的类别尽可能纯。它将所有属性列表的属性按某个标准排序,从而选出最好的属性。属性选择方法很多,常用的有3中:

1、信息增益(ID.3即Iterative Dichotomiser 3,迭代二叉树3代)

信息增益基于香浓的信息论,它找出的属性R具有这样的特点:以属性R分裂前后的信息增益最大。信息定义(熵)为:
信息量定义公式
其中:m表示数据集D中类别C的个数,pi表示D中任意一个记录属于Ci的概率,info(D)表示将数据集D不同的类分开需要的信息量。
上式中info实际上就是信息论中的熵,熵表示的是不确定度的度量,如果某个数据集的类别的不确定度越高,则熵越大。
信息增益:假设我们选择属性R作为分裂属性,数据集D中,R有k个不同的取值{V1,V2,…,Vk},于是可将D根据R的值分成k组{D1,D2,… ,Dk},按R进行分裂后,将数据集D不同的类分开还需要的信息量为:
属性R分裂后信息量 ,该式中|Dj|表示D中属性R的值为Dj的个数。
信息增益定义为:分裂前后信息量的差,
信息增益
信息增益Gain(R)表示属性R给分类带来的信息量,我们寻找Gain最大的属性,就能使分类尽可能纯。由于对所有的属性Info(D)是相同的,计算最新的InfoR(D)就可以了。
选择最佳特征的python代码如下:

def calculate_shannon_entropy(data_set):
    '''计算香农熵

    :param data_set: 输入数据集
    :return: 香农熵的值
    '''
    num_entry = len(data_set)
    label_count = {}
    for feather_vec in data_set:
        current_label = feather_vec[-1]
        if current_label not in label_count.keys():
            label_count[current_label] = 0
        label_count[current_label] += 1

    shannon_entropy = 0.0
    for k, v in label_count.items():
        prob = float(v)/num_entry
        shannon_entropy -= prob * log(prob, 2)
    return shannon_entropy


def split_data_set(data_set, axis, value):
    '''抽取出数据集中第axis维中值等于value的行,并且该行中去除掉第axis维

    :param data_set: 输入数据集
    :param axis: 维度
    :param value: 数值
    :return:
    '''
    ret_data_set = []
    for feather_vector in data_set:
        if feather_vector[axis] == value:
            reduced_vector = feather_vector[:axis]
            reduced_vector.extend(feather_vector[axis + 1:])
            ret_data_set.append(reduced_vector)
    return ret_data_set


def choose_best_feature_to_split(dataSet):
    '''选择最好的特征

    :param dataSet:
    :return: 最好的特征
    '''
    num_feature = len(dataSet[0]) - 1
    base_entropy = calculate_shannon_entropy(dataSet)
    best_info_gain = 0.0</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值