西瓜书第四章(决策树)

西瓜书第四章(决策树)


一、决策树学习的目的

决策树学习的目的是为了产生一棵泛化能力强(机器学习的重要目的),即处理未见示例能力强的决策树,其基本流程遵循简 单且直观的 “分而治之” (divide-and-conquer) 策略

二、决策树的原理

1.决策树的组成

一棵决策树包含一个根结点、若干个内部结点和若干个叶结点;
例如:
在这里插入图片描述

2. 决策过程:

  • if…else…else…

构建决策树的过程(以上面图表为例)

如果性别为“男”,则进入左子节点。
如果性别为“女”,则进入右子节点。
叶节点:
左子节点(性别为“男”):所有样本的“是否喜欢运动”都是“是”,形成一个叶节点;否”,形成一个叶节点。
右子节点(性别为“女”):所有样本的“是否喜欢运动”都是“是”,形成一个叶节点;“否”,形成一个叶节点。在这里插入图片描述

补充:

分枝:特征/属性的取值
非叶节点: 特征/属性
叶节点:决策/标签/类别/概念
conjunction 和Disjunction 可解释性强(决策树)


3.节点的选择

基本原则:

简洁—>impurity(混杂度)
使用简洁的具有较少节点的树

划分依据(如何衡量混杂度):

信息熵 (Entropy):

衡量系统中不确定性或混乱程度。正态分布 – 具有最大的熵值
计算公式: H ( S ) = − ∑ i = 1 c p i log ⁡ 2 ( p i ) H(S) = -\sum_{i=1}^{c} p_i \log_2(p_i) H(S)=i=1cpilog2(pi)
( p i ) 是类别 ( i ) 出现的概率, ( c ) 是类别的总数。 ( p_i ) 是类别 ( i ) 出现的概率,( c ) 是类别的总数。 (pi)是类别(i)出现的概率,(c)是类别的总数。
举例计算:

  • eg.有三个事件分别是a,b,c
    当P(a)的概率确定了,假如是1,则发生a的事件是不是确定了,那么纯度就是最高的。
    如果三个事件的概率的都是1/3,这个时候,我们是不是不能确定是哪一个事件,所以这个时候纯度最低
    在这里插入图片描述
基尼混杂度 (Gini Impurity):

衡量数据集的纯度,值越小表示纯度越高。
计算公式: G ( S ) = 1 − ∑ i = 1 c p i 2 = ∑ i = ! j c ( p i ) ( p j ) G(S) = 1 - \sum_{i=1}^{c} p_i^2 = \sum_{i=!j}^{c} (p_i )(p_j) G(S)=1i=1cpi2=i=!jc(pi)(pj)

错分类混杂度 (Misclassification Rate):

衡量分类错误的比例。
计算公式: R ( S ) = 1 − max ⁡ ( p i ) R(S) = 1 - \max(p_i) R(S)=1max(pi)
其中 ( max ⁡ ( p i ) ) 是最大类别的概率。 其中 ( \max(p_i) ) 是最大类别的概率。 其中(max(pi))是最大类别的概率。

度量混杂度的变化ΔI(N) — 信息增益(IG)

在这里插入图片描述


4.停止分裂的条件(2个):

1. 完全相同的输出类别

例子:假设我们正在构建一个决策树来预测一个人是否喜欢运动。
如果在一个结点中,所有的样本都是“喜欢运动”的人,那么这个结点就不再需要进一步划分了,因为它已经达到了纯度。(所以我们划分下一个节点)

def is_pure(samples):
    labels = [sample['label'] for sample in samples]
    return len(set(labels)) == 1

2.完全相同的输入特征

例子:假设我们有三个属性:年龄、性别和职业。
如果在一个结点中,所有样本的年龄、性别和职业都相同,或者我们已经用完了所有可用的属性,但是有两个结果,比如是yes ,no,

def no_more_attributes(attributes, samples):
    if not attributes:
        return True
    for attr in attributes:
        values = [sample[attr] for sample in samples]
        if len(set(values)) > 1:
            return False
    return True
排除方式
  • noise:噪声混入,看数据量
    —大(数据清洗)
    —小(保留)
  • feature

5.代码–基于对率回归(Logistic Regression)进行划分选择的决策树算法

import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import LabelEncoder

# 数据预处理
data = {
   
   
    '年龄': [25, 35, 45, 20, 30, 50],
    '收入': ['30K', '50K', '70K', '20K', '40K', '60K'],
    '教育程度': [</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oisflo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值