构建决策树根节点的案例

# 决策树的构建方式有多种,这里为了区分方便,只展示根据个别节点划分后的信息增益。

"""
   不同概率分布对信息熵的影响
"""
import numpy as np

def entropy(p):
    """
    信息熵的计算公式
    :param p:
    :return:
    """
    return np.sum([-t * np.log2(t) for t in p])

print(entropy([0.25, 0.25, 0.25, 0.25]))
print('\n')
print(entropy([0.95, 0.15, 0.05, 0.05]))
print('\n')
print(entropy([0.5, 0.5]))
print('\n')
print(entropy([5.0 / 8, 3.0 / 8]))

E:\myprogram\anaconda\python.exe E:/XX机器学习课程/决策树操作/genral.py
2.0


0.9130382009852551


1.0


0.954434002924965

print('----------------------决策树常用判定方式和构建决策树步骤--------------- ')
"""
   1. 常用3种评价概率分布对系统不确定性的影响;
   2. 信息熵的计算过程:
        2.1 将所有的特征属性(x1, x2, x3)看做一个一个树节点,对样本数据进行判断初始根节点的选择。
        2.2 计算整个数据集节点的纯度信息。
        2.3 重复使用第2步,找出最优特征以及该特征的最优划分方式,得出最终子节点N1,N2...Nm。
        2.4 对子节点分别进行2,3步,直到每个子节点都足够“纯”。
"""

# 案例示例

"""
    数据样本展示:
        #x1,x2,x3, Y
        是,单身,125,否
        否,已婚,100,否
        否,单身,100,否
        是,已婚,110,否
        是,离婚,60,否
        否,离婚,95,是
        否,单身,85,是
        否,已婚,75,否
        否,单身,90,是
        是,离婚,220,否
"""
import numpy as np
import pandas as pd

def entropy(p):
    """
    信息熵的计算公式
    :param p:
    :return:
    """
    return np.sum([-t * np.log2(t) for t in p])

def gini(p):
    """
    Gini系数的计算公式
    :param p:
    :return:
    """
    return 1-np.sum([t * t for t in p])

def error(p):
    """
    错误率de公式
    :param p:
    :return:
    """
    return 1-np.max(p)

def h(p):
    """
    决策树中对节点纯度的衡量
    :param p:
    :return:
    """
    return entropy(p)
    # return gini(p)
    # return error(p)


# 第一步:先计算标签Y概率占比:7个是,3个否
h0 = h([0.7, 0.3])
# 第二步:找分割点,若先计算x1的信息增益;x1的概率占比:4个是,6个否
# 4个是: x1的左子树
p11 = 0.4
h11 = h([1.0])
# 6个否:x1的右子树
p12 = 0.6
h12 = h([0.5, 0.5])
# x1的信息增益度:h1 = p11*h11+p12*h12, g = h0 - h1
h1 = p11 * h11 + p12 * h12
g1 = h0 - h1
print("=" * 100)
print('以有无房产作为分割点的信息增益率:{}'.format(g1))   # 以有无房产作为分割点的信息增益率:0.2812908992306927

# 4个单身: x2的左子树
p21 = 0.4
h21 = h([0.5, 0.5])
# 3个已婚: x2的中子树
p22 = 0.3
h22 = h([1.0])
# 3个离婚: x2的右子树
p23 = 0.3
h23 = h([1.0/3, 2.0/3])
# x2的信息增益度:h2 = p21 * h21 + p22 * h22 + p23 * h23, g2 = h0 - h2
h2 = p21 * h21 + p22 * h22 + p23 * h23
g2 = h0 - h2
print("=" * 100)
print('以x2(单身,已婚,离婚)作为分割点的信息增益率:{}'.format(g2))   # 以x2(单身,已婚,离婚)作为分割点的信息增益率:0.2058021490143458

"""
 找分割点,若先计算x3的信息增益;x3的概率占比:要设置分届阈值,因为它是连续特征
 以年收入80作为x3划分值
"""
# 第二步:找分割点,若先计算x3的信息增益;x3的概率占比:要设置分届阈值,因为它是连续特征:假设>80,<=80
# <=80: x3的左子树
p31 = 0.2
h31 = h([1.0])
# >80: x3的右子树:5个否,3个是
p32 = 0.8
h32 = h([5.0/8, 3.0/8])
# x3的信息增益度:h3 = p31 * h31 + p32 * h32, g3 = h0 - h3
h3 = p31 * h31 + p32 * h32
g3 = h0 - h3
print("=" * 100)
print('以年收入80作为划分特征的时候,信息增益为:{}'.format(g3))    
# 以年收入80作为划分特征的时候,信息增益为:0.11774369689072062

"""
  找分割点,若先计算x3的信息增益;x3的概率占比:要设置分届阈值,因为它是连续特征
  以年收入97.5作为x3的划分值
"""
# 第一步:先计算标签Y概率占比:7个是,3个否
h0 = h([0.7, 0.3])
# 第二步:找分割点,若先计算x3的信息增益;x3的概率占比:要设置分届阈值,因为它是连续特征:假设>97.5,<=97.5
# <=97.5: x3的左子树:2个否,3个是
p31_2 = 0.5
h31_2 = h([2.0/5, 3.0/5])
# >97.5: x3的右子树:都是否
p32_2 = 0.5
h32_2 = h([1.0])
# x3的信息增益度:h3_2 = p31_2 * h31_2 + p32_2 * h32_2; g3_2 = h0 - h3_2
h3_2 = p31_2 * h31_2 + p32_2 * h32_2
g3_2 = h0 - h3_2
print("=" * 100)
print('以年收入97.5作为划分特征的时候,信息增益为:{}'.format(g3_2))    
# 以年收入97.5作为划分特征的时候,信息增益为:0.3958156020033584

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设备树的节点(Root Node)包含整个设备树的信息,它是设备树的最顶层节点,也是设备树的起点。节点通常用于描述处理器、主板和总线控制器等硬件设备。 节点可以包含以下信息: 1. 家族(family):用于指定设备树的家族类型,比如ARM、PowerPC、MIPS等。 2. 版本(version):用于指定设备树的版本号。 3. 处理器(processor):用于指定处理器的类型和相关特性。 4. 内存(memory):用于指定系统中的内存信息。 5. 时钟(clock):用于指定系统中的时钟信息,包括时钟频率和时钟源等。 6. 总线(bus):用于描述系统中的总线控制器,包括总线类型、地址范围和连接到总线的设备信息等。 7. 中断控制器(interrupt-controller):用于描述系统中的中断控制器,包括中断控制器类型、中断控制器的寄存器和连接到中断控制器的设备信息等。 8. 时钟控制器(clock-controller):用于描述系统中的时钟控制器,包括时钟控制器类型、时钟控制器的寄存器和连接到时钟控制器的设备信息等。 9. 电源管理(power-management):用于描述系统中的电源管理器,包括电源管理器类型、电源管理器的寄存器和连接到电源管理器的设备信息等。 这些信息可以帮助内核和驱动程序理解硬件系统的结构和特性,从而更好地管理和控制系统。同时,设备树还可以通过添加和修改节点来适应不同的硬件配置和需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值