目录

一、基尼系数

(1)离散型属性

(2)连续型属性

二、cart算法的步骤

三、举个栗子

四、代码实现过程

总结:


一、基尼系数

基尼系数(Gini)是一种不等性的度量,经济学上用基尼系数度量收入不平衡的情况,在机器学习中,基尼系数可以用于度量信息的不纯度。基尼系数是一个介于0~1之间的值。计算公式为:

上式中,D表示训练集,pi为训练集中划分的类别Ci在D中的概率,m为不同属性的取值个数。基尼系数考虑的是每个属性的二元划分。

(1)离散型属性

设A为离散型属性,包含v个不同的取值,根据集合的概念,则对于离散型属性A则有2^v个子集,但是对于空集和全集是不具备划分意义的,所以对于离散型属性A的二元划分有2^v-2种划分方法。当考虑二元划分时,计算每个结果分区的不纯度加权和。例如,离散型属性A的二元划分将D划分为D1,D2。则给定该划分,D的基尼系数为:

选择基尼系数最小即信息纯度最高的作为划分依据。

(2)连续型属性

对于连续型属性, 有一种有效的计算方法,操作步骤如下:

①将属性在值上进行升序排序。

②线性扫描这些属性值,然后实时更新计数矩阵和对应的Gini指标值。

③选择具有最小Gini指标的划分位置。

二、cart算法的步骤

(1)设节点的训练集为D,计算现有的特征属性对该数据集的基尼系数。根据特征属性A的取值,将训练集划分为两类。例如根据特征属性A=a将训练集划分为A=a和A≠a两类,记为D1、D2,计算这两部分的基尼系数以及属性A的基尼系数。

(2)在所有可能的属性A以及它们所有可能的切分点a中,选择基尼系数最小的特征属性及其对应的切分点作为最优特征属性与最优切分点。根据最优特征和最优切分点,从当前结点生成两个子节点,将训练集依据特征属性分配到两个子节点中。

(3)对两个子节点递归调用步骤(1)和步骤(2),直到满足停止条件为止。(停止计算条件:没有更多的特征属性或结点中的样本个数小于预定阈值或训练集中的基尼系数小于预定阈值)

(4)生成决策树。

三、举个栗子

买电脑案例数据如下图

计算过程如下图:

四、代码实现过程

import numpy as np
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
import graphvizdef load_data():dataSet = [['<=30', 'high', 'no', 'fair', 'no'],['<=30', 'high', 'no', 'excellent', 'no'],['31…40', 'high', 'no', 'fair', 'yes'],['>40', 'medium', 'no', 'fair', 'yes'],['>40', 'low', 'yes', 'fair', 'yes'],['>40', 'low', 'yes', 'excellent', 'no'],['31…40', 'low', 'yes', 'excellent', 'yes'],['<=30', 'medium', 'no', 'fair', 'no'],['<=30', 'low', 'yes', 'fair', 'yes'],['>40', 'medium', 'yes', 'fair', 'yes'],['<=30', 'medium', 'yes', 'excellent', 'yes'],['31…40', 'medium', 'no', 'excellent', 'yes'],['31…40', 'high', 'yes', 'fair', 'yes'],['>40', 'medium', 'no', 'excellent', 'no']]lable = [data[-1] for data in dataSet]  # 标签属性->分类结果# 除去标签列的其余数据data_cindex = len(dataSet[0])-1  #除去标签的数据属性个数new_data_set = [] #除去标签属性的数据集,每一行数据表示原来数据每一列的属性值for i in range(data_cindex):shuxing = [] #存放每一个属性的值for data in  dataSet:shuxing.append(data[i])new_data_set.append(shuxing)return new_data_set,lable,dataSet
# 标签转换函数
def transform_lable(lable):lable_set = list(set(lable))lable_set.sort()print(lable_set)new_lable = []for liebei in lable:for i in range(len(list(lable_set))):if liebei == list(lable_set)[i]:new_lable.append(int(liebei.replace(liebei, str(i))))return new_lable# 数据集转换函数
def transform_data(data, data_cindex):new_data = []temp = []for i in range(data_cindex):lable_set = list(set(data[i]))lable_set.sort()new_lable = []for liebei in data[i]:  # 循环每一行除去标签的数据集for i in range(len(list(lable_set))):if liebei == list(lable_set)[i]:new_lable.append(int(liebei.replace(liebei, str(i))))temp.append(new_lable)print(lable_set)for j in range(len(temp[0])):  # 字列表的长度lie = []for i in range(len(temp)):  # 子列表的个数lie.append(temp[i][j])new_data.append(lie)return new_data
# 数据导入
new_data_set, lable, dataSet = load_data()
# 除去标签的数据属性个数  # 除去标签的数据属性个数
data_cindex = len(dataSet[0]) - 1
# 标签
final_lable = np.array(transform_lable(lable))
print(final_lable)
# 数据
final_data = transform_data(new_data_set, data_cindex)
print(final_data)
clf = DecisionTreeClassifier(criterion="gini")
clf.fit(final_data,final_lable)
# pre = clf.predict([[2,1,1,0]])
# print(pre)
dot_data = tree.export_graphviz(clf, out_file=None)  # 导出决策树
graph = graphviz.Source(dot_data)                    # 创建图形
graph.render('111')

运行结果解释:

['no', 'yes']
0为no,1为yes
[0 0 1 1 1 0 1 0 1 1 1 1 1 0]下面集合中的为序对应的数字是0 1 2
['31…40', '<=30', '>40']
['high', 'low', 'medium']
['no', 'yes']
['excellent', 'fair']将文字转化为离散的数字,sklearn不支持字符串形式的数据
[[1, 0, 0, 1], [1, 0, 0, 0], [0, 0, 0, 1], [2, 2, 0, 1], [2, 1, 1, 1], [2, 1, 1, 0], [0, 1, 1, 0], [1, 2, 0, 1], [1, 1, 1, 1], [2, 2, 1, 1], [1, 2, 1, 0], [0, 2, 0, 0], [0, 0, 1, 1], [2, 2, 0, 0]]

决策树图形如下:

总结:

ID3和CART分类树都属于决策树模型,可以用于分类。

ID3和CART分类树不同点:

1.ID3是根据熵为标准划分,选择信息增益最大的作为分类条件,ID3可以支持多分类。

2.CART树是以基尼系数为标准划分,选择基尼系数最小的作为分类条件,CART分类树是一棵二分类树,对于多分类的问题,需要转化为二分类进行。

3.不论是ID3还是CART分类树,都需要算到最后类别纯净的(分支都属于同一个类别),否则继续算下去。除非没有可以继续分类的属性或者已经达到预设的迭代次数才结束算法。

关于ID3算法请跳转ID3算法

最后码字不易,手算不易,小主能否动动手指点个赞捏~( ̄▽ ̄)~*

如果有错误,欢迎交流指正!嘻嘻~~~(●'◡'●)

决策树之CART分类树相关推荐

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

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

  2. 机器学习(四):CART分类树(基础篇)

    机器学习(四):CART分类树(基础篇) 相关的决策树文章: 机器学习(四)ID3决策树 机器学习(四)C4.5决策树 机器学习(四)CART回归树 机器学习(四)决策树绘图 机器学习(四)剪枝技术 ...

  3. 决策树(1. 分类树)

    文章目录 前言 一.重要参数 1.1 criterion 建立一棵树的步骤 1.2 random_state & splitter 1.2.1 建立树的第五步(建立模型)添加参数 1.3 剪枝 ...

  4. python 决策树回归参数_python决策树之CART分类回归树详解

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  5. CART分类树原理及示例

    转载:https://blog.csdn.net/acdreamers/article/details/44664481 在之前介绍过决策树的ID3算法实现,今天主要来介绍决策树的另一种实现,即CAR ...

  6. 决策树之CART 算法(回归树,分类树)

    CART 算法,英文全称叫做 Classification And Regression Tree,中文叫做分类回归树. ID3 和 C4.5 算法可以生成二叉树或多叉树,而 CART 只支持二叉树. ...

  7. 决策树6:分类与回归树CART

    0x01 概念介绍 1.1 CART算法 CART算法:Classification And Regression Tree.顾名思义,CART算法既可以用于创建分类树(Classification ...

  8. Lesson 8.3Lesson 8.4 ID3、C4.5决策树的建模流程CART回归树的建模流程与sklearn参数详解

    Lesson 8.3 ID3.C4.5决策树的建模流程 ID3和C4.5作为的经典决策树算法,尽管无法通过sklearn来进行建模,但其基本原理仍然值得讨论与学习.接下来我们详细介绍关于ID3和C4. ...

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

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

最新文章

  1. STL学习系列九:Map和multimap容器
  2. [Machine Learning] Random Forest 随机森林
  3. netbeans 源文件_具有NetBeans,WebLogic 12c,JPA和MySQL数据源的Arquillian
  4. 《Hadoop实战》的笔记-2、Hadoop输入与输出
  5. python中变量名后的逗号_深入浅析python变量加逗号,的含义
  6. C++学习笔记系列二
  7. springMVC接受参数总结
  8. 基线_Origin入门教程(九):扣除基线常用小妙招
  9. 制作stick侧边栏导航效果
  10. Python:学习笔记之函数的参数和返回值
  11. 学习C语言必须掌握的10个经典的C语言小程序
  12. 【Flutter系列】第一期——初识Dart语言
  13. Surface pro3电源管理
  14. 3D建模和3D渲染吃什么硬件?专业图形显卡和游戏显卡区别
  15. Unity机器学习库ml-agents新版本的环境搭建
  16. Eclipse Neno版本 安装插件开发JavaEE
  17. GAMES101 P10 几何1 笔记
  18. NTKO OFFICE文档控件使用
  19. 使用cpolar建立固定的SSH隧道
  20. linux——tail

热门文章

  1. ENVI:如何进行图像融合?
  2. Git冲突和解决冲突
  3. 手把手教你读财报----银行业---第八课
  4. ubuntu Git 使用教程
  5. 电脑安装android办公,办公室上班族的福利,在电脑上玩安卓系统
  6. 基于深度学习的银行卡识别
  7. Unity学习笔记——Unity基础一:unity界面、场景、游戏物体、组件等基本概念
  8. hooks 使用dva_Tarodemo
  9. GitBook 制作电子书
  10. 计算机图形学基础:双向反射分布函数 BRDF