机器学习:决策树算法(ID3算法)的理解与实现

文章目录

  • 机器学习:决策树算法(ID3算法)的理解与实现
    • 1.对决策树算法的理解
      • 1.概述
      • 2.算法难点
        • 选择最优划分属性
          • 1.信息熵
          • 2.信息增益
    • 2.使用sklearn实现ID3算法构建西瓜分类决策树:
      • 1.创建txt数据集
      • 2.python实现

1.对决策树算法的理解

1.概述

1.分类决策树模型是一种描述对实例进行分类的树形结构。 决策树由结点和有向边组成。结点有两种类型:内部结点和叶 节点。内部结点表示一个特征或属性,叶节点表示一个类。决策树学习的目的是为了产生一个泛化能力强的决策树,用来预测未知事例。

2.经典的决策树算法有ID3、C4.5、CART、RF等,由于本人是初学者,所以以下示例由ID3展开

ID3作为一种经典的决策树算法,是基于信息熵来选择最佳的测试属性,其选择了当前样本集中具有最大信息增益值的属性作为测试属性。
样本集的划分则依据了测试属性的取值进行,测试属性有多少种取值就能划分出多少的子样本集;同时决策树上与该样本集相应的节点长出新的叶子节点。
ID3算法根据信息论理论,采用划分后样本集的不确定性作为衡量划分样本子集的好坏程度,用“信息增益值”度量不确定性——信息增益值越大,不确定性就更小,这就促使我们找到一个好的非叶子节点来进行划分。

2.算法难点

选择最优划分属性

由于样本通常都是具有多个属性的,要使构建出的决策树尽可能简洁,即使分支节点包含的类别尽量少,要选定其中的一个较能满足上述条件的属性来作为一个结点,然后再依次下分,所以优先选用哪个属性就是一个难点。

在ID3算法中,利用信息增益来选择属性的最优划分,某个属性的信息增益越大,意味着用这个属性进行划分所获得的分支节点更少。因此,优先选择信息增益最大的属性来划分。

让我们用以下所示例的表格的为数据,来了解一下信息增益以及其相关概念及计算方法:

1.信息熵

“信息熵”是度量样本集合纯度最常用的一种指标,假定 当前样本集合D中第k类样本所占的比例为 pk (K=1, 2, …, |y|) ,则D的信息熵定义为

2.信息增益

使用属性a对样本集D进行划分所获得的“信息增益”的计算方法是,用样本集的总信息熵减去属性a的每个分支的信息熵与权重(该分支的样本数除以总样本数)的乘积

以上述数据的属性“色泽”为例,它有3个取值{青绿、乌黑、浅白}

按此可计算出其他属性的信息增益,然后每个分支中再次计算剩下属性的信息增益,循环构建出决策树。

2.使用sklearn实现ID3算法构建西瓜分类决策树:

1.创建txt数据集

2.python实现

1.导包

import graphviz
import numpy as np
import pandas as pd
from sklearn import tree

2.读取数据集

data = pd.read_csv('F:\work\机器学习\code\watermelondata.txt')
data.head(10)

3.将特征值转化成整形

data['色泽']=data['色泽'].map({'浅白':1,'青绿':2,'乌黑':3})
data['根蒂']=data['根蒂'].map({'稍蜷':1,'蜷缩':2,'硬挺':3})
data['敲声']=data['敲声'].map({'清脆':1,'浊响':2,'沉闷':3})
data['纹理']=data['纹理'].map({'清晰':1,'稍糊':2,'模糊':3})
data['脐部']=data['脐部'].map({'平坦':1,'稍凹':2,'凹陷':3})
data['触感'] = np.where(data['触感']=="硬滑",1,2)
data['好瓜'] = np.where(data['好瓜']=="是",1,0)

4.读入特征与标签,开始训练

x_train=data[['色泽','根蒂','敲声','纹理','脐部','触感']]
y_train=data['好瓜']
print(data)
Tree=tree.DecisionTreeClassifier(criterion='entropy')
Tree=Tree.fit(x_train,y_train)

5.用graphviz绘制树的结构图

labels = ['色泽', '根蒂', '敲击', '纹理', '脐部', '触感']
dot_data = tree.export_graphviz(Tree,feature_names=labels,class_names=["好瓜","坏瓜"],filled=True,rounded=True)
graph = graphviz.Source(dot_data)
graph.render('graph', view=True)

在此之前需要手动安装Graphviz,并将其添加到系统的PATH中,然后在python中pip 安装Graphviz的依赖包,才可以使用绘图功能

Graphviz下载地址:Download | Graphviz

安装教程:Graphviz安装及使用-决策树可视化 - 知乎 (zhihu.com)

同时有可能出现汉字显示乱码问题,解决教程:python graphviz中文乱码

6.完整代码

import graphviz
import numpy as np
import pandas as pd
from sklearn import treedata = pd.read_csv('F:\work\机器学习\code\watermelondata.txt')
data.head(10)data['色泽']=data['色泽'].map({'浅白':1,'青绿':2,'乌黑':3})
data['根蒂']=data['根蒂'].map({'稍蜷':1,'蜷缩':2,'硬挺':3})
data['敲声']=data['敲声'].map({'清脆':1,'浊响':2,'沉闷':3})
data['纹理']=data['纹理'].map({'清晰':1,'稍糊':2,'模糊':3})
data['脐部']=data['脐部'].map({'平坦':1,'稍凹':2,'凹陷':3})
data['触感'] = np.where(data['触感']=="硬滑",1,2)
data['好瓜'] = np.where(data['好瓜']=="是",1,0)
x_train=data[['色泽','根蒂','敲声','纹理','脐部','触感']]
y_train=data['好瓜']
print(data)
Tree=tree.DecisionTreeClassifier(criterion='entropy')
Tree=Tree.fit(x_train,y_train)
# print(Tree)labels = ['色泽', '根蒂', '敲击', '纹理', '脐部', '触感']
dot_data = tree.export_graphviz(Tree,feature_names=labels,class_names=["好瓜","坏瓜"],filled=True,rounded=True)
graph = graphviz.Source(dot_data)
graph.render('graph', view=True) 

7.运行结果及绘制的效果图:

机器学习:决策树算法(ID3算法)的理解与实现相关推荐

  1. 决策树算法ID3算法(Python3实现)

    目录 1.数据集准备 2.使用ID3算法递归构建决策树并使用决策树执行分类 2.1 ID3算法概述 2.2 递归终止条件 2.3 代码实现 3.Matplotlib实现决策树可视化 4.决策树的存储与 ...

  2. 机器学习-决策树算法ID3实现,含例子(红酒分类)

    决策树原理实现代码如下所示:(参考自机器学习实践 Peter Harrington). import mathx=[[0,1,"no"],[0,1,"no"], ...

  3. 决策树算法——ID3算法,C4.5算法

    目录(?)[-] 决策树算法 1摘要 2决策树引导 3决策树的构造 31ID3算法 32C45算法 4关于决策树的几点补充说明 41如果属性用完了怎么办 42关于剪枝 决策树算法 1.摘要 在前面两篇 ...

  4. 决策树准确率低原因_机器学习决策树算法--剪枝算法

    一.剪枝算法决策树生成算法递归地产生决策树,直到不能继续下去为止.这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象.过拟合的原因在于学习时过多地考虑如何 ...

  5. [飞桨机器学习]决策树算法

    [飞桨机器学习]决策树算法 一.简介 1.概述 决策树算法是一种逼近离散函数值的方法.它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析.本质 ...

  6. 语音识别学习日志 2019-7-16 语音识别基础知识准备5 {决策树算法(ID3、 C4.5、 CART)}

    决策树算法(ID3. C4.5. CART) 决策树的定义 决策树学习采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一颗熵值下降最快的树,到叶子节点处,熵值为0.其具有可读性.分类速度快的 ...

  7. ID3和C4.5分类决策树算法 - 数据挖掘算法(7)

    (2017-05-18 银河统计) 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来判断其可行性的决策分析方法,是直观运用概率分析的一种图解法.由于这种决策分支画 ...

  8. 机器学习 决策树算法

    4.1 决策树算法简介 学习目标 知道什么是决策树 能够通过sklearn实现决策树分类,进一步认识决策树 1 概念 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决 ...

  9. 机器学习——决策树算法

    文章目录 一.决策树介绍 二.利用信息增益选择最优划分属性 三.ID3代码实现 1.jupyter下python实现 2. 使用sklearn实现ID3 四.C4.5算法实现 五.CART算法实现 六 ...

最新文章

  1. 什么是rip协议其优缺点_南京课工场IT培训:常见动态路由协议之———RIP动态路由实验...
  2. c# dynamic 无法创建 泛型变量的问题
  3. 软件定义存储的特征及如何工作
  4. 嵌入式 U 盘自动挂载
  5. linux vi 编辑器用法
  6. vb 6 MDI窗体图片自适应源码
  7. php 余额冻结设计_加密货币交易所:微服务架构设计
  8. 从Linux基础到k8s进阶,马哥_K8s进阶实战(11)Kubernetes系统扩展
  9. C#与Javascript变量、函数之间的相互调用
  10. Java 读取文件方法大全
  11. html5实现拖拽上传图片,JS HTML5拖拽上传图片预览
  12. 兴达易控Profinet转TCP以太网模块
  13. 医院信息科面试题和笔试题汇总(计算机相关专业)
  14. 最简单、最傻瓜化的虚拟主机管理软件-LuManager主机管理系统
  15. -TEST 16 for NOIP 让scar_lyw都绝望的T3(120-300)
  16. Java 首字母转大写,StringUtils.capitalize
  17. 后代选择器和子选择器
  18. [分享]浅谈分布式数据库
  19. 计算机组成北大,计算机组成原理-PKUSEI.PDF
  20. Chrome的无痕浏览实现初探

热门文章

  1. Nexpose漏洞扫描器
  2. 服务器进入bios修改硬盘启动项,【BIOS设置】硬盘第一启动项修改
  3. cv rgb2gray python_实施mat2gray OpenCV中与Python
  4. 五大常用算法入门(一)——贪心算法
  5. c语言rand函数生成随机数,详解C语言生成随机数rand函数的用法
  6. java在线比较两个word文件
  7. [BJDCTF 2nd]假猪套天下第一 1
  8. 浮点数单精度双精度存储
  9. CF786C Till I Collapse
  10. 凭什么他26岁就年薪30W+?