机器学习:决策树算法(ID3算法)的理解与实现
机器学习:决策树算法(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算法)的理解与实现相关推荐
- 决策树算法ID3算法(Python3实现)
目录 1.数据集准备 2.使用ID3算法递归构建决策树并使用决策树执行分类 2.1 ID3算法概述 2.2 递归终止条件 2.3 代码实现 3.Matplotlib实现决策树可视化 4.决策树的存储与 ...
- 机器学习-决策树算法ID3实现,含例子(红酒分类)
决策树原理实现代码如下所示:(参考自机器学习实践 Peter Harrington). import mathx=[[0,1,"no"],[0,1,"no"], ...
- 决策树算法——ID3算法,C4.5算法
目录(?)[-] 决策树算法 1摘要 2决策树引导 3决策树的构造 31ID3算法 32C45算法 4关于决策树的几点补充说明 41如果属性用完了怎么办 42关于剪枝 决策树算法 1.摘要 在前面两篇 ...
- 决策树准确率低原因_机器学习决策树算法--剪枝算法
一.剪枝算法决策树生成算法递归地产生决策树,直到不能继续下去为止.这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象.过拟合的原因在于学习时过多地考虑如何 ...
- [飞桨机器学习]决策树算法
[飞桨机器学习]决策树算法 一.简介 1.概述 决策树算法是一种逼近离散函数值的方法.它是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析.本质 ...
- 语音识别学习日志 2019-7-16 语音识别基础知识准备5 {决策树算法(ID3、 C4.5、 CART)}
决策树算法(ID3. C4.5. CART) 决策树的定义 决策树学习采用的是自顶向下的递归方法,其基本思想是以信息熵为度量构造一颗熵值下降最快的树,到叶子节点处,熵值为0.其具有可读性.分类速度快的 ...
- ID3和C4.5分类决策树算法 - 数据挖掘算法(7)
(2017-05-18 银河统计) 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来判断其可行性的决策分析方法,是直观运用概率分析的一种图解法.由于这种决策分支画 ...
- 机器学习 决策树算法
4.1 决策树算法简介 学习目标 知道什么是决策树 能够通过sklearn实现决策树分类,进一步认识决策树 1 概念 决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决 ...
- 机器学习——决策树算法
文章目录 一.决策树介绍 二.利用信息增益选择最优划分属性 三.ID3代码实现 1.jupyter下python实现 2. 使用sklearn实现ID3 四.C4.5算法实现 五.CART算法实现 六 ...
最新文章
- 什么是rip协议其优缺点_南京课工场IT培训:常见动态路由协议之———RIP动态路由实验...
- c# dynamic 无法创建 泛型变量的问题
- 软件定义存储的特征及如何工作
- 嵌入式 U 盘自动挂载
- linux vi 编辑器用法
- vb 6 MDI窗体图片自适应源码
- php 余额冻结设计_加密货币交易所:微服务架构设计
- 从Linux基础到k8s进阶,马哥_K8s进阶实战(11)Kubernetes系统扩展
- C#与Javascript变量、函数之间的相互调用
- Java 读取文件方法大全
- html5实现拖拽上传图片,JS HTML5拖拽上传图片预览
- 兴达易控Profinet转TCP以太网模块
- 医院信息科面试题和笔试题汇总(计算机相关专业)
- 最简单、最傻瓜化的虚拟主机管理软件-LuManager主机管理系统
- -TEST 16 for NOIP 让scar_lyw都绝望的T3(120-300)
- Java 首字母转大写,StringUtils.capitalize
- 后代选择器和子选择器
- [分享]浅谈分布式数据库
- 计算机组成北大,计算机组成原理-PKUSEI.PDF
- Chrome的无痕浏览实现初探