"""数据样本展示:#x1,x2,x3, Y是,单身,125,否否,已婚,100,否否,单身,100,否是,已婚,110,否是,离婚,60,否否,离婚,95,是否,单身,85,是否,已婚,75,否否,单身,90,是是,离婚,220,否
"""
import numpy as np
import pandas as pddef 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)
"""找分割点,若先计算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
print('\n')
print('根据信息增益率大的列属性作为构建决策树的起始分割点')# 根据初步分割点计算每个分割点的信息熵,得出以x3左子树为分割点作为第2层根节点;
h0_2 = h31_2   # 根节点的信息熵
# 针对于左子树继续划分找分割点,若先计算x2的信息增益;x2的概率占比:4个单身,3个已婚,3个离婚
# 第二步:找第二层的分割节点,若先计算x2的信息增益;x2的概率占比:4个单身,3个已婚,3个离婚
# x2的左子树:2个单身: 都是----是
p21 = 0.4
h21 = h([1.0])
# x2的中子树,1个已婚: 是
p22 = 0.3
h22 = h([1.0])
# x2的右子树,小于97.5且离婚的样本数目:1个是,1个否
p23 = 0.3
h23 = h([0.5, 0.5])
# x2的信息增益度:h2 = p21 * h21 + p22 * h22 + p23 * h23, g2 = h0 - h2
h2 = p21 * h21 + p22 * h22 + p23 * h23
g2 = h0_2 - h2
print("=" * 100)
print('以x2在x3条件下作为子树分割点的信息增益率:{}'.format(g2))# 第3步:找第3层的分割节点,若计算x1的信息增益;x1的概率占比:4个有房产,6个无房产
# 第3层根节点的信息熵是:x2的右子树,小于97.5且离婚的样本信息熵
h0_3 = h23
# x1的左子树; x1的概率占比:4个有房产
p31 = 0.4
# (前提条件:小于等于97.5且已离婚的样本划分)且有房产:1个
h31 = h([1.0])
# x1的右子树,(前提条件:小于等于97.5且已离婚的样本划分)且无房产:1个
p32 = 0.6
h32 = h([1.0])
# x1(在x2,x3条件下)的信息增益度:h3 = p31 * h31 + p32 * h32, g2 = h0 - h2
h3 = p31 * h31 + p32 * h32
g3 = h0_3 - h3
print("=" * 100)
print('以x1在x2,x3条件下作为子树分割点的信息增益率:{}'.format(g3))

E:\myprogram\anaconda\python.exe E:/XX/机器学习课程/决策树操作/genral.py
--------------------------------------------决策树常用判定方式和构建决策树步骤----------------------------------
=========================================================================
以年收入97.5作为划分特征的时候,信息增益为:0.3958156020033584

根据信息增益率大的列属性作为构建决策树的起始分割点
=========================================================================
以x2在x3条件下作为子树分割点的信息增益率:0.6709505944546685
=========================================================================
以x1在x2,x3条件下作为子树分割点的信息增益率:1.0

一个完整决策树的构建案例相关推荐

  1. python数据建模案例源代码_一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码)...

    原标题:一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码) 来源:数据分析不是个事儿 作者:启方 原文: https://mp.weixin.qq.com/s/_20MN ...

  2. Flutter 构建一个完整的聊天应用程序

    在本教程中,我将向您展示如何使用 Flutter 构建一个完整的聊天应用程序.对于这一部分,我们将创建应用程序的 UI 原型,然后我将向您展示如何使用 firebase 创建后端服务并创建聊天系统. ...

  3. 机器学习入门系列(2)--如何构建一个完整的机器学习项目(一)

    上一篇机器学习入门系列(1)–机器学习概览简单介绍了机器学习的一些基本概念,包括定义.优缺点.机器学习任务的划分等等. 接下来计划通过几篇文章来介绍下,一个完整的机器学习项目的实现步骤会分为几步,最后 ...

  4. myos1 大学生利用C++构建一个完整的操作系统打印helloworld

    myos1 大学生利用C++构建一个完整的操作系统打印helloworld myos2 大学生利用C++构建一个完整的操作系统之响应键盘中断 myos3 大学生利用C++构建一个完整的操作系统之代码重 ...

  5. 快速构建一个完整的Selenium框架

    今天跟大家细讲如何构建一个完整的selenium框架,当你学会了这一篇你就也可以说自己会selenium自动化测试了. 1.新建项目,结构如图: 注意:整个项目除了最外层的是文件夹,其他的都是包(pa ...

  6. iOS 教你使用MP、AVPlayer、AVPlayerVC构建一个完整的视频播放器

    1.前言 标题必须要浮夸!要感觉像是一个大新闻.长者如是说. 其实是前几天去面试的时候,被要求说必须做过视频播放相关项目.有点闹心之余,就花了点时间在家写了一个简单播放器,基本实现了主流播放器的大致功 ...

  7. 如何构建一个完整的To B应用开发平台

    作者丨荣多君 1前言 互联网时代演进到现在,在 5G 和 IOT 的影响下,整个人类社会实现全产业数字互联的愿景变得逐渐清晰,某个行业通过行业标准的制定,采用同一套标准,甚至同一套软件,通过行业领域能 ...

  8. 测试环境搭建流程_案例解析:一个完整的项目测试方案流程,应该是怎么的?...

    作为一名软件测试工程师,为项目制作完成的测试方案并执行,是我们日常工作的重要部分,同时,也是一名合格的软件测试工程师应有的专业素养.那么,很多小白和测试新手肯定要问了:一个完整的项目测试方案流程,应该 ...

  9. 案例解析:一个完整的项目测试方案流程,应该是怎么的?

    作为一名软件测试工程师,为项目制作完成的测试方案并执行,是我们日常工作的重要部分,同时,也是一名合格的软件测试工程师应有的专业素养.那么,很多小白和测试新手肯定要问了:一个完整的项目测试方案流程,应该 ...

最新文章

  1. c# 线程间操作无效: 从不是创建控件“”的线程访问它,用托管来解决
  2. B站最火数学视频3Blue1Brown是如何制作的
  3. 陌陌开源合规审计平台 Bombus
  4. python websocet回调_python – 线程,非阻塞websocket客户端
  5. Qt的MDI中多个子窗口响应一个菜单事件的优雅实现(动态slot)
  6. Asp.net2.0下的表单验证Cookieless属性
  7. Google Guice 一个轻量级的依赖注入框架
  8. java开源论坛 discuz_Discuz开源论坛
  9. 孤读Paper——《CenterNet:Objects as Points》
  10. 【渝粤教育】国家开放大学2018年秋季 0299-22T中国古代文学(1) 参考试题
  11. Matlab连接字符串的方法
  12. 使用Visual Studio编译Geos
  13. CDR插件开发之GMS插件003 - 编写你的第一个GMS插件
  14. 【MyEcplise】build workspace卡死
  15. 每天有8千人在逃离北上广!扎心不?
  16. java 聊天室 私聊_Java WebSocket实现网络聊天室(群聊+私聊)
  17. 哥德巴赫猜想 php,哥德巴赫猜想的程序验证
  18. 数据分析面试题-面试话术
  19. 泛型的基础概念,T和?的使用方法和区别
  20. 计算机视觉——相机定位

热门文章

  1. linux系统日常脚本sh
  2. PDF | 利用Adobe acrobat pro 对PDF进行拆分
  3. [推荐]案例精选:殡仪馆用地评估
  4. 桌面云之VDC资源发布步骤
  5. 计算一个数字的的长度
  6. 2022年最新毕业设计题目汇总
  7. 一级圆柱齿轮减速机装配图三维 CAD图纸 课程设计说明书
  8. 利用阿里云OSS开发一个私人网盘/外链系统,php+js实现
  9. golang http 包 Response.Body.Close
  10. TÜV莱茵提醒: 欧盟发布医疗器械在MDR宽限期的重大变更指南