当前位置: 首页 > news >正文

【Python机器学习(一)】NumPy/Pandas手搓决策树+使用Graphviz可视化(以西瓜书数据集为例)

下题来源于笔者学校的《模式识别与机器学习》课程的作业题,本文将通过使用NumPy处理数学运算,Pandas处理数据集,Graphviz实现决策树可视化等Python库来实现决策树算法及其格式化。

导入用到的Python库:

import numpy as np
import pandas as pd
from graphviz import Digraph

将数据集整理为DataFrame对象。数据集中除“好瓜”一栏表示类别外,其他栏均为属性和属性值:

data = pd.DataFrame({
"好瓜" : ['是', '是', '是', '是', '是', '是', '是', '是', '否', '否', '否', '否', '否', '否', '否', '否', '否'], 
"色泽" : ['青绿', '乌黑', '乌黑', '青绿', '浅白', '青绿', '乌黑', '乌黑', '乌黑', '青绿', '浅白', '浅白', '青绿', '浅白', '乌黑', '浅白', '青绿'], 
"根蒂" : ['蜷缩', '蜷缩', '蜷缩', '蜷缩', '蜷缩', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '硬挺', '硬挺', '蜷缩', '稍蜷', '稍蜷', '稍蜷', '蜷缩', '蜷缩'], 
"敲声" : ['浊响', '沉闷', '浊响', '沉闷', '浊响', '浊响', '浊响', '浊响', '沉闷', '清脆', '清脆', '浊响', '浊响', '沉闷', '浊响', '浊响', '沉闷'], 
"纹理" : ['清晰', '清晰', '清晰', '清晰', '清晰', '清晰', '稍糊', '清晰', '稍糊', '清晰', '模糊', '模糊', '稍糊', '稍糊', '清晰', '模糊', '稍糊'], 
"触感" : ['硬滑', '硬滑', '硬滑', '硬滑', '硬滑', '软粘', '软粘', '硬滑', '硬滑', '软粘', '硬滑', '软粘', '硬滑', '硬滑', '软粘', '硬滑', '硬滑'], 
"含糖量" : [0.46, 0.376, 0.264, 0.318, 0.215, 0.237, 0.149, 0.211, 0.091, 0.267, 0.057, 0.099, 0.161, 0.198, 0.37, 0.042, 0.103]
})

创建节点类和边类:

class Node:def __init__(self, feature = None, cls = None, data = None):self.feature = feature #若为非叶节点,使用self.feature存储该节点的分类属性self.cls = cls #若为叶节点,使用self.cls存储该节点的分类结果self.data = data #储存分至该节点的样本class edge:def __init__(self, start = None, end = None):self.start = start #父节点self.end = end #子节点

使用全局变量列表和字典分别存储决策树的各节点和边,其中边的存储格式为edge_dict[边的属性值]=边 。

由于数据集中含有属性值为连续值的属性,需使用二分法来处理。使用全局变量best_mid_point 来存储最佳二分点:

node_list = []
edge_dict = {} #属性值作为有向边字典的索引
best_mid_point = 0

决策树学习基本算法如下图所示:

笔者使用信息增益作为划分标准,将其应用至决策树学习基本算法中,计算各属性的信息增益,取信息增益最大者为最优划分属性。

根据属性a对数据集D划分后的信息增益的定义如下:

Gain(D,a)=H(D)-H(D|a)

其中,H(D)表示经验熵:H(D)=-\sum^{|y|}_{k=1}\frac{|D_k|}{D}log_2\frac{D_k}{D}

表示

相关文章:

  • Java EE与Jakarta EE命名空间区别
  • OpenHarmony 5.0读取文件并写入到另一份文件(公共文件夹),并保持原先的格式以及编码类型
  • 案例:塔能科技智启某市“光网计划”——重构城市照明的数字底座与生态价值
  • AudioLab安卓版:音频处理,一应俱全
  • (LeetCode 动态规划(基础版)) 518. 零钱兑换 II (动态规划dp)
  • 安卓9.0系统修改定制化____安卓 9.0系统修改固件 自动开启USB调试教程 开搞篇 六
  • Hadoop HDFS存储机制与块大小选择权衡
  • HTTP1.1
  • OSI 七层网络模型
  • 【C语言】图书管理系统(文件存储版)丨源码+详解
  • AORSA编译指南
  • 智造奇点:AI超级工厂如何重塑制造业DNA
  • 从易用性出发的教育场景音量调节技术方案
  • 天邑TEWA-808AE高安版_S905L3B融合机破解TTL刷机包
  • uni-app项目实战笔记14--给全屏页面添加遮罩层
  • 【整数递增加法拆分】2022-4-11
  • adoc(asciidoc)转为markdown的方法,把.adoc文件转换为markdown格式
  • CentOS7报错:Cannot find a valid baseurl for repo: base/7/x86_64
  • Burgers方程初值问题解的有效区域
  • shell三剑客
  • 网站程序源代码/高质量外链购买
  • 企业网站管理系统破解版/软文营销范文
  • html做电商网站/微信软文模板
  • 怎么用网站建设/台州网站制作维护
  • dede网站模版/如何把品牌推广出去
  • 惠州做棋牌网站建设哪家便宜/如何做网页链接