决策树算法详解(1)
使用决策树解决分类问题,例如
年龄在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)相关推荐
- 写给小白的机器学习之决策树算法详解(附实战源码)
这里是实战源码,里面算法参数解释和数据可视化详解 GitHub慢的话看码云 具体ppt也已上传至csdn和GitHub 可以做分类树和回归树 现在是一个多分类任务 PPT讲解 强壮性是对若有缺失值等其 ...
- 【机器学习】Decision Tree 决策树算法详解 + Python代码实战
文章目录 一.直观理解决策树 二.熵的作用 三.信息增益 四.决策树构造实例 4.1 问题描述 4.2 根节点构造 五.信息增益率和GINI系数 5.1 信息增益存在的问题 5.2 信息增益率 5.3 ...
- 机器学习之决策树算法详解
1-1 基本流程 决策树是一个有监督分类与回归算法. 决策树的生成只考虑局部最优,相对的,决策树剪枝则考虑全局最优. 一.概念: 决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支 ...
- 决策树算法详解(3)
from sklearn.tree import DecisionTreeClassifier # 1.criterion gini or entropy# 2.splitter best or ra ...
- 决策树算法详解(2)
Python决策树原生版参考 #encoding:utf-8 import mathdef createDataSet():#训练数据集dataSet=[['young','myope','no',' ...
- CART分类决策树、回归树和模型树算法详解及Python实现
机器学习经典算法详解及Python实现–CART分类决策树.回归树和模型树 摘要: Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用 ...
- 随机森林的特征 是放回抽样么_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...
一.什么是随机森林 前面我们已经介绍了决策树的基本原理和使用.但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样 ...
- 【机器学习】Java 代码实现 CART 决策树算法
文章目录 一.决策树算法 二.CART 决策树 三.Java 代码实现 3.1 TrainDataSet 3.2 DataType 3.3 PredictResult 3.4 CartDecision ...
- 决策树详解python基于Kaggle的Titanic数据实现决策树分类
决策树详解&&python基于Kaggle的Titanic数据实现决策树分类 一 决策树算法详解 1.前期准备 实验目的准备 2.决策树概述 2.1 决策树 2.2 ID3算法原理 2 ...
最新文章
- 豆瓣评分9.1榜首图书:这本经典编程教材,第2版全面升级!
- [Flex] 组件Tree系列 —— 阻止用户点击选中Tree中分支节点
- 99.两个时钟不同步的设备怎么通信?
- php 类的数组对象,javascript、php数组对象互转类
- acrobat xi pro 简体中文语言支持包_性能出众佳能PRO-561绘图仪西安优杰报价
- java中去掉Sprit(arg0)中正则表达式干扰
- .net 使用阿里云RocketMQ
- 解决/mnt中有hgfs无共享文件
- JAVA虚拟机内存分配原则 (转
- Python之 面向对象封装案例
- 《Visual C++ 开发从入门到精通》——2.9 技术解惑
- SQL Server 游标运用:查看所有数据库所有表大小信息(Sizes of All Tables in All Database)...
- 创建 Agg 静态链接库
- GLM(广义线性模型) 与 LR(逻辑回归) 详解
- 常见端口对应服务及入侵方式
- FANUC机器人动作指令的定位类型FINE和CNT详解
- js绑定事件和解绑事件的方法
- 面试问题:发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?...
- 所谓的CDN动态加速技术
- pandas创建DataFrame的几种方式(建议收藏)
热门文章
- java程序无法连接redis 正常启动但是无法访问
- Bioinformatics | 预测药物-药物相互作用的多模态深度学习框架
- 第二课.初识机器学习
- 第八课.Python面向对象(二)
- bazel源码编译Tensorflow
- 用apktool批量反编译apk文件
- c语言包括在方括号中的序号称为,自考《高级语言程序设计》知识点总结(四)...
- c语言错误2015,C语言2015(回答).doc
- 生信服务器入门级基本设置
- 零基础入门学习Python(15)-序列