1. Cart树简介¶

Cart模型是一种决策树模型,它即可以用于分类,也可以用于回归,其学习算法分为下面两步:

(1)决策树生成:用训练数据生成决策树,生成树尽可能大

(2)决策树剪枝:基于损失函数最小化的剪枝,用验证数据对生成的数据进行剪枝。

分类和回归树模型采用不同的最优化策略。Cart回归树使用平方误差最小化策略,Cart分类生成树采用的基尼指数最小化策略。

Scikit-learn中有两类决策树,他们均采用优化的Cart决策树算法。一个是DecisionTreeClassifier一个是DecisionTreeRegressor回归。

2. 基尼指数计算公式¶

  1. 信息增益(ID3)、信息增益率值越大(C4.5),则说明优先选择该特征。

  2. 基尼指数值越小(cart),则说明优先选择该特征。

3. 基尼指数计算举例¶

3.1 是否有房¶

计算过程如下:根据是否有房将目标值划分为两部分:

  1. 计算有房子的基尼值: 有房子有 1、4、7 共计三个样本,对应:3个no、0个yes

是否有房,是否有房,Gini(是否有房,yes )=1−(03)2−(33)2=0

  1. 计算无房子的基尼值:无房子有 2、3、5、6、8、9、10 共七个样本,对应:4个no、3个yes

是否有房,是否有房,Gini⁡(是否有房,no )=1−(37)2−(47)2=0.4898

  1. 计算基尼指数:第一部分样本数量占了总样本的 3/10、第二部分样本数量占了总样本的 7/10:

是否有房是否有房Gini-⁡index⁡(D, 是否有房 )=710∗0.4898+310∗0=0.343

3.2 婚姻状况¶

  1. 计算 {married} 和 {single,divorced} 情况下的基尼指数:

结婚的基尼值,有 2、4、6、9 共 4 个样本,并且对应目标值全部为 no:

Gini_index⁡(D,{married})=0

不结婚的基尼值,有 1、3、5、7、8、10 共 6 个样本,并且对应 3 个 no,3 个 yes:

Gini_index⁡(D, {single,divorced} )=1−(36)2−(36)2=0.5

以 married 作为分裂点的基尼指数:

Gini_index⁡(D, married )=410∗0+610∗[1−(36)2−(36)2]=0.3

  1. 计算 {single} | {married,divorced} 情况下的基尼指数

婚姻状况婚姻状况Gini_index⁡(D,婚姻状况)=410∗0.5+610∗[1−(16)2−(56)2]=0.367

  1. 计算 {divorced} | {single,married} 情况下基尼指数

婚姻状况婚姻状况Gini_index⁡(D, 婚姻状况 )=210∗0.5+810∗[1−(28)2−(68)2]=0.4

  1. 最终:该特征的基尼值为 0.3,并且预选分裂点为:{married} 和 {single,divorced}

3.3 年收入¶

先将数值型属性升序排列,以相邻中间值作为待确定分裂点:

以年收入 65 将样本分为两部分,计算基尼指数:

节点为时年收入节点为时年收入节点为65时:年收入=110∗0+910∗[1−(69)2−(39)2]=0.4

以此类推计算所有分割点的基尼指数,我们发现最小的基尼指数为 0.3。

此时,我们发现:

  1. 以是否有房作为分裂点的基尼指数为:0.343
  2. 以婚姻状况为分裂特征、以 married 作为分裂点的基尼指数为:0.3
  3. 以年收入作为分裂特征、以 97.5 作为分裂点的的基尼指数为:0.3

最小基尼指数有两个分裂点,我们随机选择一个即可,假设婚姻状况,则可确定决策树如下:

重复上面步骤,直到每个叶子结点纯度达到最高.

4. Cart分类树原理¶

如果目标变量是离散变量,则是classfication Tree分类树。

分类树是使用树结构算法将数据分成离散类的方法。

(1)分类树两个关键点:

将训练样本进行递归地划分自变量空间进行建树‚用验证数据进行剪枝。

(2)对于离散变量X(x1…xn)处理:

分别取X变量各值的不同组合,将其分到树的左枝或右枝,并对不同组合而产生的树,进行评判,找出最佳组合。如果只有两个取值,直接根据这两个值就可以划分树。取值多于两个的情况就复杂一些了,如变量年纪,其值有“少年”、“中年”、“老年”,则分别生产{少年,中年}和{老年},{少年、老年}和{中年},{中年,老年}和{少年},这三种组合,最后评判对目标区分最佳的组合。因为CART二分的特性,当训练数据具有两个以上的类别,CART需考虑将目标类别合并成两个超类别,这个过程称为双化。这里可以说一个公式,n个属性,可以分出(2^n-2)/2种情况。

CART树生成

输入:数据集 D ,特征 A ,样本个数阈值、基尼系数阈值

输出:CART决策树T

(1)对于当前节点的数据集为D,如果样本个数小于阈值或者没有特征,则返回决策子树,当前节点停止递归;

(2)计算样本集D的基尼系数,如果基尼系数小于阈值,则返回决策树子树,当前节点停止递归;

(3)计算当前节点现有的各个特征的各个特征值对数据集D的基尼系数;

(4)在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择基尼系数最小的特征A和对应的特征值α。根据这个最优特征和最优特征值,把数据集划分成两部分D1和,D2同时建立当前节点的左右节点,左节点的数据集D为D1,右节点的数据集D为D2;

(5)对左右的子节点递归的调用前面1-4步,生成决策树。

CART树剪枝

我们知道,决策树算法对训练集很容易过拟合,导致泛化能力很差,为解决此问题,需要对CART树进行剪枝。CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变小,从而能够对未知数据有更准确的预测,也就是说CART使用的是后剪枝法。一般分为两步:先生成决策树,产生所有可能的剪枝后的CART树,然后使用交叉验证来检验各种剪枝的效果,最后选择泛化能力好的剪枝策略。

2.3 使用CART算法构建决策树¶

import numpy as np
import matplotlib.pyplot as pltfrom sklearn import datasetsiris = datasets.load_iris()
X = iris.data[:,2:]
y = iris.targetfrom sklearn.tree import DecisionTreeClassifier#注意:此处传入的是"gini"而不是"entropy",默认criterion='gini'
tree = DecisionTreeClassifier(max_depth=2,criterion="gini")
tree.fit(X,y)def plot_decision_boundary(model,axis):x0,x1 = np.meshgrid(np.linspace(axis[0],axis[1],int((axis[1]-axis[0])*100)).reshape(-1,1),np.linspace(axis[2],axis[3],int((axis[3]-axis[2])*100)).reshape(-1,1))X_new = np.c_[x0.ravel(),x1.ravel()]y_predict = model.predict(X_new)zz = y_predict.reshape(x0.shape)from matplotlib.colors import ListedColormapcustom_map = ListedColormap(["#EF9A9A","#FFF59D","#90CAF9"])plt.contourf(x0,x1,zz,linewidth=5,cmap=custom_map)plot_decision_boundary(tree,axis=[0.5,7.5,0,3])
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.scatter(X[y==2,0],X[y==2,1])
plt.show()

分析上图可知:

  • X[1] <=0.8 作为第一次分割的依据,满足条件的所有样本均为同一类别,gini系数为0.667

  • X[1]>0.8的,依据 X[1]<=0.75 为划分依据

CART 分类决策树相关推荐

  1. 实验三:CART分类决策树python实现(两个测试集)(一)|机器学习

    目录 python实现 分步 源代码(全部) 测试集1(鸢尾花集) 测试集2(红酒品类数据集) 总结 python实现 分步 划分数据子集(注意区分离散特征值和连续特征值) #获取数据子集,分类与回归 ...

  2. CART分类决策树:kaggle泰坦尼克号存活率预测(不调库,手工推)

    一.数据来源 1.数据来源:kaggle-competitions 2.数据分析说明 该竞赛提供了两份文件,一份为训练集数据,另一份为测试集数据. 通过训练集数据训练模型,然后预测测试集里每一位乘客是 ...

  3. 经典算法详解--CART分类决策树、回归树和模型树

    Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Reg ...

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

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

  5. 机器学习十大算法之-CART分类决策树、回归树和模型树

    转载(http://blog.163.com/zhoulili1987619@126/blog/static/35308201201542731455261/) Classification And ...

  6. 监督学习 | CART 分类回归树原理

    文章目录 CART 算法 1. CART 生成 1.1 回归树生成 最小二乘回归树生成算法 1.2 分类树生成 基尼指数 CART 生成算法 参考文献 相关文章: 机器学习 | 目录 监督学习 | I ...

  7. 实验三:CART回归决策树python实现(两个测试集)(二)|机器学习

    目录 python实现 分步 源代码(全部) 测试集1(波士顿房价数据集) 测试集2(糖尿病数据集) 总结 python实现 分步 划分数据子集(左子树划分比指定值小的样本集合,右子树划分比指定值大的 ...

  8. Lesson 8.1Lesson 8.2 决策树的核心思想与建模流程CART分类树的建模流程与sklearn评估器参数详解

    Lesson 8.1 决策树的核心思想与建模流程 从本节课开始,我们将介绍经典机器学习领域中最重要的一类有监督学习算法--树模型(决策树). 可此前的聚类算法类似,树模型也同样不是一个模型,而是一类模 ...

  9. 决策树之CART分类树

    目录 一.基尼系数 (1)离散型属性 (2)连续型属性 二.cart算法的步骤 三.举个栗子 四.代码实现过程 总结: 一.基尼系数 基尼系数(Gini)是一种不等性的度量,经济学上用基尼系数度量收入 ...

  10. 基于CART分类方法的决策树(机器学习)

    目录 一.实验内容 二.实验过程 1.算法思想 2.算法原理 3.算法分析 三.源程序代码 四.运行结果及分析 五.实验总结 一.实验内容 熟知决策树的概念和基本算法思想. 理解信息增益的计算方法,比 ...

最新文章

  1. layering-cache
  2. Jquery操作基本筛选过滤器
  3. 【JSP笔记】第三章 JSP内置对象【上】
  4. Qt文档阅读笔记-QUdpSocket基本表述及简单实现
  5. 【特别版】考证与学习,结构与功能,之间的因果关系
  6. 将Windows网络适配器共享网络的ip:192.168.137.1 改为其他IP
  7. Atitit.故障排除系列-----apache 不能启动的排除
  8. 《jdk8u源码分析》jvm.dll接口列表
  9. 【视频】离职创业感悟
  10. 平均17.1K?2022软件测试员平均薪资出炉,看看你被平均了没~
  11. Excel 实现多列文本合并/合并单元格内容 的三种方法
  12. PAT甲级 1151 LCA in a Binary Tree (30分) LCA算法/C++
  13. 客户满意度调查表怎么做?
  14. 嵌入式开发 SRAM SROM DRAM DROM DDR NAND FLASH EMMC 区别
  15. 工作流(Flowable)
  16. 【C++】getchar()有什么用
  17. JS流程控制语句 反反复复(while循环) 和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足。...
  18. 4. 彤哥说netty系列之Java NIO实现群聊(自己跟自己聊上瘾了)
  19. 《亚利桑那阳光》的临场感、逼真性和震撼性
  20. 冯诺依曼 计算机名言,约翰·冯·诺伊曼留给我们的名言之一

热门文章

  1. 14行代码教你制作自己的有道词典单词本(python)
  2. 3DMAX渲染慢?一些小方法提升3DMAX渲染速度~
  3. aforge java_基于Aforge摄像头调用简单实例
  4. Python调用搜狗语音API实现文字转音频
  5. 前端开发:报错Error in created hook:”SyntaxError:Unexpected token u in JSON at position 0”…解决方法
  6. 8uftp,8uFTP是什么软件
  7. 怎么把小写字母(英文)转换成大写
  8. spark安装以及hive on spark和spark on hive 的配置
  9. 动力节点Docker视频教程从入门到精通
  10. 【真人手势动画制作软件】万彩手影大师教程 | 预览、保存及发布视频