文章目录

  • 1.Crat算法(分类树)
    • 1.1基尼系数
    • 1.2连续型特征处理
    • 1.3CART算法
    • 1.5 举例说明
    • 1.5 代码
  • 2.回归树

1.Crat算法(分类树)

1.1基尼系数

CART是基于基尼(Gini)系数最小化准则来进行特征选择,生成二叉树。

基尼系数代表了模型得不纯度,基尼系数越小,则不纯度越低,特征越好。这点和信息增益是相反的。

在分类问题中,假设有K各类别,第k个类别概率为pkp_{k}pk​,则基尼系数的表达式为:

Gini(D)=1−∑k=1Kpk2Gini(D)=1-\sum_{k=1}^{K}p_{k}^{2}Gini(D)=1−k=1∑K​pk2​

若给定样本D,如果根据特征A的某个值a,把D分为D1和D2两个部分,则在特征条件A下,D的基尼系数表达式为:

GiniA(D)=D1DGini(D1)+D2DGini(D2)Gini_{A}{(D)}=\frac{D_{1}}{D}Gini(D_{1})+\frac{D_{2}}{D}{Gini(D_2)}GiniA​(D)=DD1​​Gini(D1​)+DD2​​Gini(D2​)

1.2连续型特征处理

CART处理连续值问题与C4.5一样,都是将连续的特征离散化,唯一区别在于,C4.5采用信息增益率而CART算法采取的是基尼系数。

具体思路如下:有m个样本的连续的特征A有m个,从小到大排序。取相邻两个样本值的平均数,则会得到m-1个二分类点。分别计算这m-1

个点分别作为二分类点时的基尼系数。选择基尼系数最小的点作为该连续型特征的二元分类点。与ID3和C4.5不同的是如果当前节点为连续属性,则该属性在后面还可以参与子节点的产生选择过程。

在ID3和C4.5中,特征A被选取建立决策树结点,如果他有A1,A2和A3三种类别,我们会在决策树上建立一个三叉节点,从而创建一颗多叉树。但CART分类树则不一样,它采用不停的二分,CART分类树会考虑把A分成{A1}和{A2,A3},{A2}和{A1,A3},{A3}和{A1,A2}三种情况,找到基尼系数最小的组合,如{A2}和{A1,A3},然后建立二叉树节点,一个节点是A2对应的样本,另一个节点是{A1,A3}对应的节点。同时,由于这次没有把特征A的取值完全划分开,后面还有机会在子节点中继续在特征A中划分A1和A3.

1.3CART算法


来自李航《统计学原理》一书。

1.5 举例说明

如下图所示的一组数据,其中样本特征有三个分别为是否有房,婚姻状况和年收入,其中有房情况和婚姻状况是离散型的取值,而年收入是连续型取值。是否拖欠贷款属于分类的结果。

对于是否有房这个特征,他是一个二分类离散数据,其基尼系数为:

Gini=310Gini(有房)+710Gini(无房)Gini=\frac{3}{10}Gini(有房)+\frac{7}{10}Gini(无房)Gini=103​Gini(有房)+107​Gini(无房)

=310(1−((33)2+(03)2)+710(1−((47)2+(37)2)=\frac{3}{10}(1-((\frac{3}{3})^{2}+(\frac{0}{3})^{2})+\frac{7}{10}(1-((\frac{4}{7})^{2}+(\frac{3}{7})^{2})=103​(1−((33​)2+(30​)2)+107​(1−((74​)2+(73​)2)=0.343

对于婚姻状况这个有三个取值的离散型特征,他有三种分类情况,要计算出每一种对于的基尼指数:

单身或已婚 离婚
是否拖欠贷款 6 1
2 1

Gini=210Gini(离婚)+810Gini(单身或已婚)Gini=\frac{2}{10}Gini(离婚)+\frac{8}{10}Gini(单身或已婚)Gini=102​Gini(离婚)+108​Gini(单身或已婚)

=210(1−((12)2+(12)2)+810(1−((68)2+(28)2)=\frac{2}{10}(1-((\frac{1}{2})^{2}+(\frac{1}{2})^{2})+\frac{8}{10}(1-((\frac{6}{8})^{2}+(\frac{2}{8})^{2})=102​(1−((21​)2+(21​)2)+108​(1−((86​)2+(82​)2)=0.4

单身或离婚 已婚
是否拖欠贷款 3 4
3 0

Gini=410Gini(已婚)+610Gini(单身或离婚)Gini=\frac{4}{10}Gini(已婚)+\frac{6}{10}Gini(单身或离婚)Gini=104​Gini(已婚)+106​Gini(单身或离婚)

=410(1−((44)2+(04)2)+610(1−((36)2+(36)2)=\frac{4}{10}(1-((\frac{4}{4})^{2}+(\frac{0}{4})^{2})+\frac{6}{10}(1-((\frac{3}{6})^{2}+(\frac{3}{6})^{2})=104​(1−((44​)2+(40​)2)+106​(1−((63​)2+(63​)2)=0.3

已婚或离婚 单身
是否拖欠贷款 5 2
1 2

Gini=410Gini(单身)+610Gini(已婚或离婚)Gini=\frac{4}{10}Gini(单身)+\frac{6}{10}Gini(已婚或离婚)Gini=104​Gini(单身)+106​Gini(已婚或离婚)

=410(1−((24)2+(24)2)+610(1−((56)2+(16)2)=\frac{4}{10}(1-((\frac{2}{4})^{2}+(\frac{2}{4})^{2})+\frac{6}{10}(1-((\frac{5}{6})^{2}+(\frac{1}{6})^{2})=104​(1−((42​)2+(42​)2)+106​(1−((65​)2+(61​)2)=0.3667

对于收入这个连续型数据,要先转换为离散型才可以计算,

通过计算我们得出了当以97作为分类点时其基尼系数最小,所以选择97作为此时该特征得二元分类点。

此时我们通过比较,发现 离婚作为婚姻状况得分类点和97作为收入得分类点得基尼系数一样,所以我们可以随意选择他们两个其中任意一个作为最有特征得最优特征值。选择得点不一样,构造出来的决策树也会不一样。在选择一个点后,将数据分为了D1和D2两个部分,对这两个部分用上边方法计算其基尼系数。

选择婚姻状况为最优特征得到的一个决策树:

1.5 代码
from sklearn import tree
import numpy as np

数据集已经做过处理:
RID,house_yes,house_no,single,married,divorced,income,label
1,1,0,1,0,0,125,0
2,0,1,0,1,0,100,0
3,0,1,1,0,0,70,0
4,1,0,0,1,0,120,0
5,0,1,0,0,1,95,1
6,0,1,0,1,0,60,0
7,1,0,0,0,1,220,0
8,0,1,1,0,0,85,1
9,0,1,0,1,0,75,0
10,0,1,1,0,0,90,1

data=np.genfromtxt('/root/jupyter_projects/data/cart.csv',delimiter=',')
x_data=data[1:,1:-1]
y_data=data[1:,-1]
print(x_data.shape)
print(y_data.shape)
(10, 6)
(10,)
model=tree.DecisionTreeClassifier(criterion='gini')#已基尼系数为判定标准
model.fit(x_data,y_data)
DecisionTreeClassifier()
import graphviz
dot_data=tree.export_graphviz(model,out_file=None,feature_names=['house_yes','house_no','signal','married','divorce','icome'],class_names=['yes','no'],filled=True,rounded=True,special_characters=True)
grahp=graphviz.Source(dot_data)
grahp.render('cart.pdf')
'cart.pdf.pdf'
grahp#因为每次选择得最优特征和最优特征值不一样,所以每次产生的决策树也不一样,下面是两个不同得决策树


2.回归树

CART回归树和分类树得建立大致相似,两者得区别在于样本输出,如果输出得是离散值,那么这是一颗分类树,如果样本输出是连续值,那么这是一个回归树。

回归树对于连续型数据得处理使用了和方差来度量。CART回归树是对于任意划分特征A,对于任意划分点s两边划分成得数据集D1和D2,求出使D1和D2各自集合得均方差最小,同时D1和D2得均方差之和最小所对应得特征和特征划分点。

对于决策树建立后做预测得方式,分类树采用叶子节点里概率最大得类别作为当前节点得预测类别,而回归树采用得是最终叶子得均值或中位数来预测结果。

参考:决策树算法原理(下)

决策树--CART算法相关推荐

  1. 02-23 决策树CART算法

    文章目录 决策树CART算法 决策树CART算法学习目标 决策树CART算法详解 基尼指数和熵 CART算法对连续值特征的处理 CART算法对离散值特征的处理 CART算法剪枝 生成剪枝后的决策树 选 ...

  2. 决策树CART算法、基尼系数的计算方法和含义

    决策树CART算法--基尼系数 决策树的CART算法使用基尼系数来选择划分属性.一个数据集的纯度可以用基尼系数来度量 Gini(D)=∑k=1∣y∣∑k′≠kpkpk′=1−∑k=1∣y∣pk2\be ...

  3. 分类算法之决策树CART算法

    1. CART算法的认识 Classification And Regression Tree,即分类回归树算法,简称CART算法,它是决策树的一种实现,通常决策树主要有三种实现,分别是ID3算法,C ...

  4. 机器学习第五篇:详解决策树-CART算法

    01|前言: 本篇接着上一篇决策树详解,CART是英文"classification and regression tree"的缩写,翻译过来是分类与回归树,与前面说到的ID3.C ...

  5. 决策树-CART算法

    总第80篇 01|前言: 本篇接着上一篇决策树详解,CART是英文"classification and regression tree"的缩写,翻译过来是分类与回归树,与前面说到 ...

  6. cart算法_机器学习十大算法之一——决策树CART算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第23篇文章,我们今天分享的内容是十大数据挖掘算法之一的CART算法. CART算法全称是Classification ...

  7. 决策树——CART算法+实战(sklearn)

    CART算法 CART举例 剪枝 优缺点 数据集 from sklearn import tree import numpy as np # 载入数据 data = np.genfromtxt(&qu ...

  8. cart算法实例matlab,matlab 决策树cart算法源代码

    matlab源码 决策树 c4.5 cart function D = CART(train_features, train_targets, params, region) % Classify u ...

  9. 决策树CART算法讲解

    ID3和C4.5在上一篇,点击 转载:https://www.cnblogs.com/pinard/p/6053344.html

  10. 决策树分类算法研究及用例

    文章目录 1 题目 2 理论及算法原理 2.1决策树模型的构成 2.2决策树的数据结构 2.3决策树的功能 2.4实现决策树模型的算法 2.5决策树生成算法原理 3算法对比分析 3.1算法概括 3.2 ...

最新文章

  1. 网站统计中的PV(访问量):UV(独立访客):IP(独立IP)的定义与区别
  2. [BZOJ2947]促销(Splay)
  3. python 反转布尔值
  4. 库壳的一些有趣面试题
  5. python怎么使用预训练的模型_Keras使用ImageNet上预训练的模型方式
  6. Loadrunner11安装
  7. 【BP预测】基于BP神经网络实现混凝土强度预测含Matlab源码
  8. CSI-RS资源配置
  9. thymeleaf 基础教程-阅读官方教程(二)
  10. 网页调用QQ客服的API
  11. Shader山下(六)镜面高光
  12. php 鼠标 移动 手型,JS实现的鼠标跟随代码(卡通手型点击效果)
  13. selenium 反爬虫之跳过滑块验证
  14. 【正点原子MP157连载】 第十二章 呼吸灯实验-摘自【正点原子】【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
  15. 工信部装备司文件首提数字孪生关键技术
  16. (R68s,R66s)OpenWRT设置ipv6网络(以光猫拨号场景为例)
  17. python之开三次方根的计算
  18. 花千骨服务器无响应,花千骨出现游戏闪退 解决闪退方案
  19. 蜜蜂剪辑v1.5.0.1更新啦
  20. 半小时学会什么是分布式一致性算法——Paxos

热门文章

  1. Python 实现字节转换函数
  2. bzoj5145 [Ynoi2018]未来日记 (多校第4场1013 Yuno and Claris)
  3. [转]《财富》推荐的75本必读书 !!推荐看看!受益匪浅
  4. 【主流Nivida显卡深度学习/强化学习/AI算力汇总】
  5. 【存储】超融合(HCI)和云是什么以及区别|超融合和虚拟化的区别
  6. python乌龟赛跑_Python之龟兔赛跑
  7. 如何利用Social Listening从社会化媒体中“提炼”有价值的信息?
  8. 【转】会议中控系统在智能化会议室的应用
  9. Namecheap 给域名添加ssl证书
  10. was 部署php,was 配置web服务器