使用决策树解决分类问题,例如

年龄在30为分界点第一次选择,第二个决策点是长相,第三个决策点是收入,在收入中等的时候还考虑是否是公务员,这就是一颗决策树

引入熵和基尼系数两个概念

熵其实就是混乱度,混乱度越小越好,越清晰,所以每次划分都要让熵尽可能最小,让信息增益最大。
比如我们有如下的十四条数据,我们利用这些数据来构造决策树

共有4个特征和1个主类别,构造决策树到底要用哪个特征当做根节点呢?
第一步要计算一下最初的熵值,也可叫做经验熵

假设我们要选择有n个输出(所给属性的n个值)的检验,把训练样本集T分区成子集T1,T2,T3….Tn。仅有的指导信息是在T和它的子集Ti中的类的分布。如果S是任意样本集,
设freq(Ci,S)代表S中属于类Ci(k个可能的类中的一个)的样本数量,|S|表示集合S中的样本数量。

集合S熵的计算:

本例中计算方法如下:

接下来介绍一个信息增益的公式:

度量了按照检验X进行分区的T所得到的信息。该增益标准选择了使 Gain(X)最大化的检验X,即此标准选择的事具有最高信息增益的那个属性。

我们的经验熵是0.940
下面选择特征来计算条件熵

图为按照不同特征划分
计算出每一种的条件熵值

outlook=sunny条件熵:
-2/5log2(2/5)-3/5log2(3/5)=0.971
outlook=overcast条件熵:0
outlook=rainy条件熵:0.971

条件熵汇总成信息熵
outlook的信息熵是:
5/14x0.971+4/14x0+5/14x0.971=0.693

信息增益Gain是:Gain=经验熵-信息熵
Gain(outlook)=0.940-0.693=0.247
同理我们求出其他特征的信息增益:
Gain(temperature)=0.029
Gain(humidity)=0.152
Gain(windy)=0.048

Gain(outlook)最大(outlook特征在第一步中使系统的信息熵下降的最快),所以决策树的根节点就取outlook

C4.5信息增益率,因为单纯的信息增益是不靠谱的,比如说用ID来划分的话没有任何意义,所以信息增益率可以消除这种失误。

评价决策树的好坏有评价函数:
评价函数(损失值):C(T)


连续值做离散化处理 可以按照中值切分开
我们希望得到一个高度最矮的决策树
如果树分的特别细致反而不好,因为可能会过拟合,也就是过分地为了匹配而学习,导致在训练数据集上表现很好而测试效果不好。
决策树剪枝策略:预剪枝和后剪枝

预剪枝

一般可以提前定好树的深度或者节点数

后剪枝:
在树构建好了之后进行剪枝处理

我们认为在损失值基础上叶子结点个数越多也不好
于是新的评价函数(损失函数)
Cα(T)=C(T)+α·|Tleaf|
当α比较大的时候要让Cα(T)小一些,当α小的时候叶子结点的数目没那么重要

随机森林
众多决策树的组合
Bootstraping采样,是又放回采样
随机的含义
随机指的是:数据选择随机,指定随机比例,
选取特征也是随机的

Python代码:
鸢尾花数据集
数据集截图:

import numpy as np
import pandas as pda
import operatorfilename="iris.csv"
dataf=pda.read_csv(filename)
x=dataf.iloc[:,0:4].as_matrix()
y=dataf.iloc[:,4:5].as_matrix()from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=20)

用到了训练集测试集切分模块
from sklearn.model_selection import train_test_split
测试样本所占比例0.2,随机因子20

from sklearn.tree import DecisionTreeClassifier as DTC
dtc=DTC(criterion="entropy")
dtc.fit(x_train,y_train)
print(dtc.predict(x_test))

用决策树模型训练并进行预测
用到了决策树模块
from sklearn.tree import DecisionTreeClassifier as DTC
预测结果如下图:

还可以更高级一些,把我们的决策树图形界面化
需要电脑安装好graphviz的安装包

from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO
with open("tree.dot","w") as file:file=export_graphviz(dtc,feature_names=["huabanchang","huabankuan","huaechang","huaekuan","zhonglei"],out_file=file)

得到tree.dot文件
打开之后可以看到我们的决策树

决策树算法详解(1)相关推荐

  1. 写给小白的机器学习之决策树算法详解(附实战源码)

    这里是实战源码,里面算法参数解释和数据可视化详解 GitHub慢的话看码云 具体ppt也已上传至csdn和GitHub 可以做分类树和回归树 现在是一个多分类任务 PPT讲解 强壮性是对若有缺失值等其 ...

  2. 【机器学习】Decision Tree 决策树算法详解 + Python代码实战

    文章目录 一.直观理解决策树 二.熵的作用 三.信息增益 四.决策树构造实例 4.1 问题描述 4.2 根节点构造 五.信息增益率和GINI系数 5.1 信息增益存在的问题 5.2 信息增益率 5.3 ...

  3. 机器学习之决策树算法详解

    1-1 基本流程 决策树是一个有监督分类与回归算法. 决策树的生成只考虑局部最优,相对的,决策树剪枝则考虑全局最优. 一.概念: 决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支 ...

  4. 决策树算法详解(3)

    from sklearn.tree import DecisionTreeClassifier # 1.criterion gini or entropy# 2.splitter best or ra ...

  5. 决策树算法详解(2)

    Python决策树原生版参考 #encoding:utf-8 import mathdef createDataSet():#训练数据集dataSet=[['young','myope','no',' ...

  6. CART分类决策树、回归树和模型树算法详解及Python实现

    机器学习经典算法详解及Python实现–CART分类决策树.回归树和模型树 摘要: Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用 ...

  7. 随机森林的特征 是放回抽样么_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...

    一.什么是随机森林 前面我们已经介绍了决策树的基本原理和使用.但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样 ...

  8. 【机器学习】Java 代码实现 CART 决策树算法

    文章目录 一.决策树算法 二.CART 决策树 三.Java 代码实现 3.1 TrainDataSet 3.2 DataType 3.3 PredictResult 3.4 CartDecision ...

  9. 决策树详解python基于Kaggle的Titanic数据实现决策树分类

    决策树详解&&python基于Kaggle的Titanic数据实现决策树分类 一 决策树算法详解 1.前期准备 实验目的准备 2.决策树概述 2.1 决策树 2.2 ID3算法原理 2 ...

最新文章

  1. 豆瓣评分9.1榜首图书:这本经典编程教材,第2版全面升级!
  2. [Flex] 组件Tree系列 —— 阻止用户点击选中Tree中分支节点
  3. 99.两个时钟不同步的设备怎么通信?
  4. php 类的数组对象,javascript、php数组对象互转类
  5. acrobat xi pro 简体中文语言支持包_性能出众佳能PRO-561绘图仪西安优杰报价
  6. java中去掉Sprit(arg0)中正则表达式干扰
  7. .net 使用阿里云RocketMQ
  8. 解决/mnt中有hgfs无共享文件
  9. JAVA虚拟机内存分配原则 (转
  10. Python之 面向对象封装案例
  11. 《Visual C++ 开发从入门到精通》——2.9 技术解惑
  12. SQL Server 游标运用:查看所有数据库所有表大小信息(Sizes of All Tables in All Database)...
  13. 创建 Agg 静态链接库
  14. GLM(广义线性模型) 与 LR(逻辑回归) 详解
  15. 常见端口对应服务及入侵方式
  16. FANUC机器人动作指令的定位类型FINE和CNT详解
  17. js绑定事件和解绑事件的方法
  18. 面试问题:发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?...
  19. 所谓的CDN动态加速技术
  20. pandas创建DataFrame的几种方式(建议收藏)

热门文章

  1. java程序无法连接redis 正常启动但是无法访问
  2. Bioinformatics | 预测药物-药物相互作用的多模态深度学习框架
  3. 第二课.初识机器学习
  4. 第八课.Python面向对象(二)
  5. bazel源码编译Tensorflow
  6. 用apktool批量反编译apk文件
  7. c语言包括在方括号中的序号称为,自考《高级语言程序设计》知识点总结(四)...
  8. c语言错误2015,C语言2015(回答).doc
  9. 生信服务器入门级基本设置
  10. 零基础入门学习Python(15)-序列