1、决策树介绍

决策树简单的理解为if-then的集合,其优点主要有分类速度快、可读性等。决策树的生成主要可分为三个步骤:特征的选择、决策树的生成、决策树的剪枝。

1.1特征选择

对于结点的选择,总得需要一个计算方法来实现,这个方法的目标是优先选择分类能力强的特征,这样才提高决策树的效率,如果随机选择特征的话将会产生复杂度或者是结点更多的决策树,显然不是我们想要的。
怎么计算特征的分类能力呢,通常选择的准则是信息增益或信息增益比。
要计算信息增益,首先要知道熵的概念:表示随机变量不确定程度,
设X是一个取有限个值的离散随机变量,其概率分布为:

P(X=xi)=Pi,i=1,2,,,n P ( X = x i ) = P i , i = 1 , 2 , , , n

P(X=x_i)=P_i,i=1,2,,,n
则随机变量的熵定义为:

H(X)=−∑i=1npilog2pi H ( X ) = − ∑ i = 1 n p i l o g 2 p i

H(X)=-\sum_{i=1}^np_ilog_2 p_i
其中对数不一定必须以2为底,也可自然对数e。
如,随机变量只取两个值0,1,则分布为:

P(X=1)=p,P(X=0)=1−p,0<=p<=1 P ( X = 1 ) = p , P ( X = 0 ) = 1 − p , 0 <= p <= 1

P(X=1)=p,P(X=0)=1-p, 0
则,熵为:

H(p)=−plog2p−(1−p)log2(1−p) H ( p ) = − p l o g 2 p − ( 1 − p ) l o g 2 ( 1 − p )

H(p)=-plog_2 p-(1-p)log_2 (1-p)
其次还需要条件熵H(Y|X),其定义为X给定的条件下Y的条件概率分布的熵对X的数学期望:

H(X|Y)=∑i=1npiH(Y|X=xi) H ( X | Y ) = ∑ i = 1 n p i H ( Y | X = x i )

H(X|Y)=\sum_{i=1}^np_iH(Y|X=x_i)
看起来比较难以理解, H(Y|X=xi) H ( Y | X = x i ) H(Y|X=x_i) 可以简单的理解为:在某个特征等于 xi x i x_i 的条件下取类 Yj Y j Y_j的熵。对应如果为二分类,j=1,2.
当熵和条件熵中的概率由数据估计得到时,对应的熵分别成为条件熵和经验条件熵。
信息增益表示得知特征X的信息而使类Y的不确定性减少的程度。定义为:

g(D,A)=H(D)−H(D|A) g ( D , A ) = H ( D ) − H ( D | A )

g(D,A)=H(D)-H(D|A)
信息增益比:信息增益g(D,A)与训练数据集D关于A的值的熵之比,即

gR(D,A)=g(D,A)HA(D) g R ( D , A ) = g ( D , A ) H A ( D )

g_R(D,A)=\frac{g(D,A)}{H_A(D)}

1.2生成决策树

对生成树,ID3算法的方法是从根结点开始,对结点计算所有可能的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点,再递归的计算信息增益建立结点,直到信息增益均很小或者没有特征可以选择为止。
C4.5算法,与ID3算法唯一不同是使用信息增益比来选择特征。

1.3剪枝

当使用训练数据进行生成决策树,而不进行处理时,会出现训练集精度为100%,但测试集上表现不是很好,这是由于对训练集进行生成决策树时过于细分,不进行剪枝,很有可能产生过拟合。剪枝分为两种,1、预剪枝,在构造树的同时停止信息量较少,也就是信息增益或信息增益比较小的枝生长。2、后剪枝,先生成树,再进行剪枝。

2、sklearn

当不进行剪枝时:

#!/user/bin/env python
#-*- coding:utf-8 -*-
from sklearn.tree import export_graphviz
from sklearn.tree import DecisionTreeClassifier
#3:1拆分数据集
from sklearn.model_selection import train_test_split
#乳腺癌数据集
from sklearn.datasets import load_breast_cancer
import pydot
cancer = load_breast_cancer()
#参数random_state是指随机生成器,0表示函数输出是固定不变的
X_train,X_test,y_train,y_test = train_test_split(cancer['data'],cancer['target'],random_state=42)
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train,y_train)
print('Train score:{:.3f}'.format(tree.score(X_train,y_train)))
print('Test score:{:.3f}'.format(tree.score(X_test,y_test)))
#生成可视化图
export_graphviz(tree,out_file="tree.dot",class_names=['严重','轻微'],feature_names=cancer.feature_names,impurity=False,filled=True)
#展示可视化图
(graph,) = pydot.graph_from_dot_file('tree.dot')
graph.write_png('tree.png')

执行结果:

Train score:1.000
Test score:0.930

进行预剪枝时:

#!/user/bin/env python
#-*- coding:utf-8 -*-
from sklearn.tree import export_graphviz
from sklearn.tree import DecisionTreeClassifier
#3:1拆分数据集
from sklearn.model_selection import train_test_split
#乳腺癌数据集
from sklearn.datasets import load_breast_cancer
import pydot
cancer = load_breast_cancer()
#参数random_state是指随机生成器,0表示函数输出是固定不变的
X_train,X_test,y_train,y_test = train_test_split(cancer['data'],cancer['target'],random_state=42)
#设置深度为4,即产生4个问题就停止生长
tree = DecisionTreeClassifier(max_depth=4,random_state=0)
tree.fit(X_train,y_train)
print('Train score:{:.3f}'.format(tree.score(X_train,y_train)))
print('Test score:{:.3f}'.format(tree.score(X_test,y_test)))
#生成可视化图
export_graphviz(tree,out_file="tree.dot",class_names=['严重','轻微'],feature_names=cancer.feature_names,impurity=False,filled=True)
#展示可视化图
(graph,) = pydot.graph_from_dot_file('tree.dot')
graph.write_png('tree.png')

结果

Train score:0.995
Test score:0.951

基于sklearn的决策树算法相关推荐

  1. 机器学习实验:使用sklearn的决策树算法对葡萄酒数据集进行分类

    机器学习实验:使用sklearn的决策树算法对葡萄酒数据集进行分类 问题如下: 使用sklearn的决策树算法对葡萄酒数据集进行分类,要求: ①划分训练集和测试集(测试集占20%) ②对测试集的预测类 ...

  2. 机器学习Sklearn实战——决策树算法

    sklearn-str类型数据量化操作 OrdinalEncoder import numpy as np import pandas as pd from sklearn.neighbors imp ...

  3. FlyAI小课堂:python机器学习笔记:深入学习决策树算法原理

    分类技术(或分类法)是一种根据输入数据建立分类模型的系统方法,分类法的例子包括决策分类法,基于规则的分类法,神经网络,支持向量机和朴素贝叶斯分类法.这些技术都使用一种学习算法(learning alg ...

  4. 决策树算法原理及实现

    决策树算法原理及实现 转载自:https://www.cnblogs.com/sxron/p/5471078.html (一)认识决策树 1.决策树分类原理 决策树是通过一系列规则对数据进行分类的过程 ...

  5. 机器学习(周志华)西瓜书 课后习题4.3 信息熵决策树算法——python实现(包括树的可视化)

    机器学习(周志华)西瓜书 课后习题4.3 信息熵决策树算法--python实现(包括树的可视化) 算法原理 1.信息熵 2.信息增益 我们所以要做的就是不断地从当前剩余的属性当中选取最佳属性对样本集进 ...

  6. ML之DT:基于DT决策树算法(对比是否经特征筛选FS处理)对Titanic(泰坦尼克号)数据集进行二分类预测

    ML之DT:基于DT决策树算法(对比是否经特征筛选FS处理)对Titanic(泰坦尼克号)数据集进行二分类预测 目录 输出结果 设计思路 核心代码 输出结果 初步处理后的 X_train: (984, ...

  7. python实现决策树算法sklearn_GitHub - cbyonder/lihang_algorithms: 用python和sklearn两种方法实现李航《统计学习方法》中的算法...

    lihang_algorithms 用python和sklearn实现李航老师的<统计学习方法>中所提到的算法 实验数据:MNIST数据集,这里用kaggle中处理好的数据 官方下载地址: ...

  8. Python+sklearn决策树算法使用入门

    封面图片:<Python程序设计实验指导书>,董付国编著,清华大学出版社 =========== 在学习决策树算法之前,首先介绍几个相关的基本概念. 决策树算法原理与sklearn实现 简 ...

  9. 《机器学习》西瓜书课后习题4.3——python实现基于信息熵划分的决策树算法(简单、全面)

    <机器学习>西瓜书课后习题4.3--python实现基于信息熵划分的决策树算法 <机器学习>西瓜书P93 4.3 试编程实现基于信息熵进行划分选择的决策树算法,并为表4.3中数 ...

最新文章

  1. C++_类和结构体所占内存大小,静态成员问题
  2. RxJava flatMap操作符用法详解
  3. java nio使用_什么时候使用NIO?
  4. 场景理解_7分钟理解JS的节流、防抖及使用场景
  5. 获取组件的方式(方法)
  6. 【Android 修炼手册】Gradle 篇 -- Android Gradle Plugin 主要流程分析
  7. 程序员自家种水果,新鲜包邮配送
  8. java学习里程碑_记录您的里程和社区运行情况:Java EE 7真实体验
  9. 跨浏览器共享数据_可以让跨域要数据的模式:jsonp
  10. php10天速成培训,十天学会php之第十天
  11. C语言实现植物大战僵尸----学习过程
  12. 【shell】【sed】在行前/行后插入一新行
  13. Python把数据写进html的表格代码里,收件人显示表格
  14. 记一次图片编辑工具pinta二进制包的安装踩坑过程
  15. python中stripped string_22-.strings 和 stripped_strings变量多个文本
  16. XiaoHu日志 9/7~9/17
  17. Android中action的定义
  18. marquee标签_html滚动文字
  19. Wordpress里面的Set Featured Image
  20. (一)图像分类任务介绍 Image Classification

热门文章

  1. 新博智慧救助 | 常州市智慧大救助管理服务平台解决方案案例
  2. python列表与元组和java_Python列表和元组的相同点和不同点是什么
  3. 工地无线视频监控解决方案
  4. 编程语言中的 DUCK TYPING|python、c++、java、go
  5. 回归分析模型检验评估
  6. 兴趣学C:三子棋小游戏
  7. 数据仓库——维度建模
  8. 人脸识别必读论文推荐
  9. 前端需要的免费在线api接口
  10. html进网页自动弹出窗口,如何阻止网页中自动弹出的广告窗口?