一个完整决策树的构建案例
"""数据样本展示:#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
一个完整决策树的构建案例相关推荐
- python数据建模案例源代码_一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码)...
原标题:一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码) 来源:数据分析不是个事儿 作者:启方 原文: https://mp.weixin.qq.com/s/_20MN ...
- Flutter 构建一个完整的聊天应用程序
在本教程中,我将向您展示如何使用 Flutter 构建一个完整的聊天应用程序.对于这一部分,我们将创建应用程序的 UI 原型,然后我将向您展示如何使用 firebase 创建后端服务并创建聊天系统. ...
- 机器学习入门系列(2)--如何构建一个完整的机器学习项目(一)
上一篇机器学习入门系列(1)–机器学习概览简单介绍了机器学习的一些基本概念,包括定义.优缺点.机器学习任务的划分等等. 接下来计划通过几篇文章来介绍下,一个完整的机器学习项目的实现步骤会分为几步,最后 ...
- myos1 大学生利用C++构建一个完整的操作系统打印helloworld
myos1 大学生利用C++构建一个完整的操作系统打印helloworld myos2 大学生利用C++构建一个完整的操作系统之响应键盘中断 myos3 大学生利用C++构建一个完整的操作系统之代码重 ...
- 快速构建一个完整的Selenium框架
今天跟大家细讲如何构建一个完整的selenium框架,当你学会了这一篇你就也可以说自己会selenium自动化测试了. 1.新建项目,结构如图: 注意:整个项目除了最外层的是文件夹,其他的都是包(pa ...
- iOS 教你使用MP、AVPlayer、AVPlayerVC构建一个完整的视频播放器
1.前言 标题必须要浮夸!要感觉像是一个大新闻.长者如是说. 其实是前几天去面试的时候,被要求说必须做过视频播放相关项目.有点闹心之余,就花了点时间在家写了一个简单播放器,基本实现了主流播放器的大致功 ...
- 如何构建一个完整的To B应用开发平台
作者丨荣多君 1前言 互联网时代演进到现在,在 5G 和 IOT 的影响下,整个人类社会实现全产业数字互联的愿景变得逐渐清晰,某个行业通过行业标准的制定,采用同一套标准,甚至同一套软件,通过行业领域能 ...
- 测试环境搭建流程_案例解析:一个完整的项目测试方案流程,应该是怎么的?...
作为一名软件测试工程师,为项目制作完成的测试方案并执行,是我们日常工作的重要部分,同时,也是一名合格的软件测试工程师应有的专业素养.那么,很多小白和测试新手肯定要问了:一个完整的项目测试方案流程,应该 ...
- 案例解析:一个完整的项目测试方案流程,应该是怎么的?
作为一名软件测试工程师,为项目制作完成的测试方案并执行,是我们日常工作的重要部分,同时,也是一名合格的软件测试工程师应有的专业素养.那么,很多小白和测试新手肯定要问了:一个完整的项目测试方案流程,应该 ...
最新文章
- c# 线程间操作无效: 从不是创建控件“”的线程访问它,用托管来解决
- B站最火数学视频3Blue1Brown是如何制作的
- 陌陌开源合规审计平台 Bombus
- python websocet回调_python – 线程,非阻塞websocket客户端
- Qt的MDI中多个子窗口响应一个菜单事件的优雅实现(动态slot)
- Asp.net2.0下的表单验证Cookieless属性
- Google Guice 一个轻量级的依赖注入框架
- java开源论坛 discuz_Discuz开源论坛
- 孤读Paper——《CenterNet:Objects as Points》
- 【渝粤教育】国家开放大学2018年秋季 0299-22T中国古代文学(1) 参考试题
- Matlab连接字符串的方法
- 使用Visual Studio编译Geos
- CDR插件开发之GMS插件003 - 编写你的第一个GMS插件
- 【MyEcplise】build workspace卡死
- 每天有8千人在逃离北上广!扎心不?
- java 聊天室 私聊_Java WebSocket实现网络聊天室(群聊+私聊)
- 哥德巴赫猜想 php,哥德巴赫猜想的程序验证
- 数据分析面试题-面试话术
- 泛型的基础概念,T和?的使用方法和区别
- 计算机视觉——相机定位