python决策树-1

本文主要内容:

  1. 通过简单的示例说明决策树,以及决策树的定义

  2. 信息熵概念,以及决策树,树生成节点划分的依据。三种计算方法方法:

    • 1.信息增益(由ID3算法作为特征选取标准)

    • 2.信息增益比/率(由C4.5算法作为特征选取标准)

    • 3.基尼指数(由CART作为特征选取标准)

  3. 树的生成ID3算法,C4.5算法

  4. 算法python实现以及示例


决策树示例,以及决策树的定义

下图决策树预测贷款用户是否具有偿还贷款的能力,其中贷款用户主要具备三个属性:是否拥有房产,是否结婚,平均月收入。

这里写图片描述

每一个内部节点都表示一个属性条件判断,叶子节点表示贷款用户是否具有偿还能力(即类别)。
例如:用户甲没有房产,没有结婚,月收入5K。通过决策树的根节点判断,用户甲符合右边分支 (拥有房产为“否”);再判断是否结婚,用户甲符合左边分支(是否结婚为否);然后判断月收入是否大于 4k,用户甲符合左边分支 (月收入大于4K),该用户落在“可以偿还”的叶子节点上。所以预测用户甲具备偿还贷款能力。

定义(决策树)

分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)有向边(directed edge)组成。结点有两种类型:内部结点(internal node )和叶结点(leaf node)。内部结点表示一个特征或属性叶结点表示一个

分类过程

使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。


信息熵,决策树,树生成节点划分的依据

在信息论里面,熵(entropy)是信息不确定性的一个测度,熵越大则表示信息的不确定程度越高。这么说好像的确有点抽象,还是用公式解释吧:

这里写图片描述

这里H是熵,U可以理解为所有可能事件的集合,P(x)则是某一具体事件x发生的概率,对数的底一般取2。举个例子,预测明天的天气,如果能100%确定明天一定是晴天,那么熵就是-1*log1=0,也就是说不确定性为零。如果说明天有50%概率晴天,50%概率下雨,那么熵就是2*(-0.5)log0.5=2*(-0.5)(-1)=1,可以说不确定性为1。而如果明天有25%概率晴天,25%概率下雨,25%概率阴天,25%概率下雪,那么熵就是4*(-0.25)(log0.25)=2, 也就是说随着不确定程度的增加,熵也在不断地增大。

多少信息用信息量来衡量,我们接受到的信息量跟具体发生的事件有关。信息的大小跟随机事件的概率有关。越小概率的事情发生了产生的信息量越大,如四川发生地震了;越大概率的事情发生了产生的信息量越小,如太阳从东边升起来了(肯定发生嘛,没什么信息量)。这很好理解!

当随机变量只能取两个值,例如1,0即X的分布为:

P(X=1)=p, P(X=0)=1-p, 0<=p<=1

这里写图片描述

当p=0.5时,熵取值最大,随机变量不确定性最大(这个概率对我们”分类基本没什么用”)

计算增益,有三种方法:

  1. 信息增益(由ID3算法作为特征选取标准)

  2. 信息增益比/率(由C4.5算法作为特征选取标准)

  3. 基尼指数(由CART作为特征选取标准)

信息增益

首先说明下条件熵:

这里写图片描述

定义(信息增益(information gain))

信息增益表示的是:得知特征X的信息而使得类Y的信息的不确定性减少的程度。

具体定义如下:
特征A对训练数据集D的信息增益g(D,A)定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即g(D,A)=H(D)-H(D|A)

根据信息增益准则进行特征选择的方法是:对训练数据集D,计算其每个特征的信息增益,选择信息增益最大的特征。

这里写图片描述

信息增益算法:

输入:训练数据集D和特征A;

输出:特征A对训练数据集D的信息增益g(D,A)

(1)计算数据集D的经验熵H(D).

这里写图片描述

(2)计算特征A对数据集D的经验条件熵H(D|A).

这里写图片描述

(3)计算信息增益: g(D, A) = H(D) - H(D|A)

下面给出李航书中贷款申请判断的数据,以及计算示例。四个属性:

年龄: 0 -> 青年, 1 -> 中年, 2 -> 老年

有工作: 0 -> 否, 1 -> 是

有房子: 0 -> 否, 1 -> 是

信贷情况: 0 -> 一般, 1 -> 好, 2 -> 非常好

对应的Y类别0 -> 不能提供贷款, 1 -> 能提供贷款,

def get_loan_data_lh():
    x = np.array([
        [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2],
        [0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0],
        [0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0],
        [0, 1, 1, 0, 0, 0, 1, 1, 2, 2, 2, 1, 1, 2, 0]
    ])

    x = x.T
    y = np.array([0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0])
    return x, y

首先计算类别的经验熵:

这里写图片描述

对应的代码如下:

def _cal_class_entropy(self, y):
    num = len(y)
    print num  # 15
    unique_class, counter = np.unique(y, return_counts=True)
    print unique_class, counter
    # [0 1] [6 9]
    # calculate each class probability
    class_prob = [c * 1.0 / num for c in counter]
    print class_prob
    # [0.40000000000000002, 0.59999999999999998]
    print self._cal_entropy(class_prob)
    # 0.970950594455

def _cal_entropy(self, arr_prob):
    """
    for example  arr_prob like [0.5, 0.5]
    return -1 * 0.5 *log0.5 + -1 * 0.5 * log0.5 = 1
    """
    # -1 * sum(Pi * logPi)
    return np.sum(-1 * np.log2(arr_prob) * arr_prob)

def test_cal_class_entropy():
    from create_data import get_loan_data_lh
    X, Y = get_loan_data_lh()
    dt = DTree()
    dt._cal_class_entropy(Y)

树的生成ID3算法,C4.5算法


算法python实现以及示例

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python提供了多种库来实现决策树,其中最常用的是scikit-learn库。使用scikit-learn库中的DecisionTreeClassifier类可以实现分类决策树,使用DecisionTreeRegressor类可以实现回归决策树。 以下是一个简单的示例代码,演示了如何使用scikit-learn库中的DecisionTreeRegressor类来构建回归决策树模型并进行预测: ```python from sklearn.tree import DecisionTreeRegressor X = [[1,2],[3,4],[5,6],[7,8],[9,10]] y = [1,2,3,4,5] model = DecisionTreeRegressor(max_depth=2, random_state=0) model.fit(X, y) prediction = model.predict([[9,9]]) print(prediction) # 输出 [4.5] ``` 在这个示例中,我们首先导入了DecisionTreeRegressor类,然后定义了训练数据X和对应的目标值y。接下来,我们创建了一个DecisionTreeRegressor对象,并通过fit()方法对模型进行训练。最后,我们使用predict()方法对新的数据[[9,9]]进行预测,并打印出预测结果[4.5]。 决策树的概念并不复杂,它主要通过连续的逻辑判断得出最后的结论。在每个节点上,决策树会根据某个属性的取值将数据集划分成不同的子集。划分的方法可以是基于Gini系数的CART决策树算法,Gini系数可以测量数据集的纯度。通过不断划分和递归建立决策树的过程,最终得到一棵具有判断能力的树形结构。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [决策树python)](https://blog.csdn.net/herry57/article/details/125431770)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [决策树模型及案例(Python)](https://blog.csdn.net/qq_42433311/article/details/124171221)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值