【ML】决策树(Decision tree)原理 + 实践 (基于sklearn)

  • 原理介绍
    • 简要介绍
    • 原理
    • 得分函数(信息熵)
  • 实战
    • 数据集
    • 数据处理
    • 训练
    • 预测+评估
    • 绘制决策树

原理介绍

简要介绍

决策树算法是一个分类算法(监督学习),通过训练会获得一颗树形的分类模型。树的每一个非叶子节点都是一个判断条件,叶子节点是一个分类。
举个例子:我打算出去玩,我会先看看明天天气怎么样,如果下雨,我就不出去玩了【叶子节点】,如果不下雨,那么我再看看温度怎么样,低于10度就不出去玩了【叶子节点】,10度及以上则出去玩【叶子节点】。

原理

那么怎么获得这棵树呢?
假设一组数据有n个特征,我们想要高效的进行判断,会希望根节点是最具有区分度的,即如果我能通过根节点就分类成功最好。如果无法通过根节点进行分类,那么能通过第二层节点分类成功也不错。以此类推,通过尽量少的节点进行分类。

如何获得最有区分度的根节点呢?其实就是找到一个最具区分度的特征。我们假设我们有一个函数,你把每个特征数据穿给它,它便可以计算出一个分数,这个分数越大,代表特征越有区分度。

函数逻辑比较复杂,放到后面单独说,假设我们已经有了这个函数,那么我首先通过第一轮计算,选出了n个特征中最具区分度的特征A。假设A可以被分为3类(三种类型的数据,比如A特征表示大小,数据中有:大、中、小三种),则我们将A最为根节点,并向下延伸产生3个分支。并且按照A的三个分类将数据分为三组,去掉A特征,计算剩余特征中最具区分度的特征。以此类推形成树。
是否继续向下划分的判断依据是:

  1. 是否某一特征下的label都一致,如果一致,则不在继续往下区分(因为再怎么分,label都不变了)。
  2. 没有更多的特征进行划分,则结束(看当前特征哪个label占比更高则结果为此label)

得分函数(信息熵)

这个得分函数常见的有三种:ID3,C4.5,CART,这里介绍其中一种:ID3.

ID3的核心是: 信息熵。何为信息熵呢?我们都学过熵增现象,比如你滴一滴墨水到一杯清水里,墨水会散开到整杯水,且不会自动聚拢。而信息熵所描绘的就是一个信息的确定性,类比一下,如果一滴墨汁滴到一滴水里,那么还是乌黑,我们很容易确定这是墨汁。但如果把一滴水滴到一个大水缸里,那你还能确定当前水缸里的是墨汁吗?所以:

  1. 信息熵越大,则信息的确定性越低。
  2. 信息熵越小,则信息的确定性越高。

再回到我们上面原理部分的描述,我们要的是确定性高的特征,即最好当前节点(特征)就能判别出来结果,所以我们要求信息熵尽可能的小,即当前特征的确定性越高越好。那怎么计算信息熵呢?很早之前伟大的香农博士就已经帮我们定义好了计算信息熵的方法:
H(x)=−∑imp(x)log⁡2p(x)H(x)=-\sum_{i}^{m}p(x)\log_{2}{p(x)}H(x)=−∑im​p(x)log2​p(x)
此处的p(x)表示概率。这里假设特征A有三类数据:a,b,c。

  1. a中有3条数据,1条数据对应分类1,2条数据对应分类二。
  2. b中有4条数据,2条数据对应分类1,2条数据对应分类二。
  3. c中有4条数据,1条数据对应分类1,3条数据对应分类二。

则有A的信息熵为:
311∗(−13∗log⁡213−23∗log⁡223)+411∗(−24∗log⁡224−24∗log⁡224)+411∗(−14∗log⁡214−34∗log⁡234)\frac{3}{11} * (-\frac{1}{3}*\log_{2}{\frac{1}{3}} -\frac{2}{3}*\log_{2}{\frac{2}{3}}) + \frac{4}{11} * (-\frac{2}{4}*\log_{2}{\frac{2}{4}} -\frac{2}{4}*\log_{2}{\frac{2}{4}}) + \frac{4}{11} * (-\frac{1}{4}*\log_{2}{\frac{1}{4}} -\frac{3}{4}*\log_{2}{\frac{3}{4}}) 113​∗(−31​∗log2​31​−32​∗log2​32​)+114​∗(−42​∗log2​42​−42​∗log2​42​)+114​∗(−41​∗log2​41​−43​∗log2​43​)

实战

数据集

鸢尾花数据集:https://www.kaggle.com/datasets/himanshunakrani/iris-dataset

数据处理

origin_data = pd.read_csv("/kaggle/input/iris-dataset/iris.csv")
origin_data.loc[:,'species'].value_counts()
data = origin_data.replace({'species':{'setosa':1,'versicolor':2,'virginica':3}})
data.head()
X = data.drop(columns=['species'])
y = data.loc[:,'species']

训练

from sklearn import tree
model = tree.DecisionTreeClassifier(criterion='entropy', min_samples_leaf=5)
model.fit(X,y)
  • criterion=‘entropy’ : 使用信息熵方式计算(默认)
  • min_samples_leaf=5:每次向下进行分类,样本数最少为5个

预测+评估

y_predict = model.predict(X)from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

输出:0.9733333333333334

绘制决策树

from matplotlib import pyplot as plt
plt.figure(figsize=(10,10))
tree.plot_tree(model, filled=True, feature_names=['sepal_length','sepal_width','petal_length','petal_width'],class_names=['setosa','versicolor','virginica'])
  • filled: 是否填充颜色
  • feture_names: 按原列表顺序写
  • class_names: 处理后的数字升序排列后对应的名称

【ML】决策树(Decision tree)原理 + 实践 (基于sklearn)相关推荐

  1. 机器学习方法(四):决策树Decision Tree原理与实现技巧

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 前面三篇写了线性回归,lass ...

  2. 决策树 (Decision Tree) 原理简述及相关算法(ID3,C4.5)

    Decision Tree 决策树: 决策树是属于机器学习监督学习分类算法中比较简单的一种,决策树是一个预测模型:他代表的是对象属性与对象值之间的一种映射关系.树中每个节点表示某个对象,而每个分叉路径 ...

  3. Python数据挖掘入门与实践 第三章 用决策树预测获胜球队(一)pandas的数据预处理与决策树(Decision tree)

    作为一个NBA球迷,看到这一章还是挺激动的. 不过内容有点难,研究了半天... 要是赌球的,用这章的预测+凯利公式,是不是就能提升赢钱概率了? 数据预处理 回归书本内容,既然要分析,首先需要有数据: ...

  4. 机器学习算法实践:决策树 (Decision Tree)(转载)

    前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...

  5. Machine Learning | (7) Scikit-learn的分类器算法-决策树(Decision Tree)

    Machine Learning | 机器学习简介 Machine Learning | (1) Scikit-learn与特征工程 Machine Learning | (2) sklearn数据集 ...

  6. 决策树Decision Tree 和随机森林RandomForest基本概念(一)

    文章目录 一.决策树介绍 1.1 什么是决策树 1.2 决策树种类 1.3 决策树学习过程 1.4 Entropy(熵) 1.5 information gain(信息增益) 1.6 信息论 1.8 ...

  7. 决策树分类python代码_分类算法-决策树 Decision Tree

    决策树(Decision Tree)是一个非参数的监督式学习方法,决策树又称为判定树,是运用于分类的一种树结构,其中的每个内部节点代表对某一属性的一次测试,每条边代表一个测试结果,叶节点代表某个类或类 ...

  8. 决策树Decision Tree+ID3+C4.5算法实战

    决策树Decision Tree 决策树的三种算法: 举个栗子: 熵entropy的概念: 信息熵越大,不确定性越大.信息熵越小,不确定性越小. 其实就是排列组合之中的概率,概率相乘得到其中一个组合, ...

  9. 第六章.决策树(Decision Tree)—CART算法

    第六章.决策树(Decision Tree) 6.2 CART算法 CART决策树的生成就是递归地构建二叉决策树的过程.CART用基尼(Gini)系数最小化准则来进行特征选择,生成二叉树. 1.Gin ...

  10. 决策树(Decision Tree)简介

    决策树(Decision Tree)及其变种是另一类将输入空间分成不同的区域,每个区域有独立参数的算法.决策树分类算法是一种基于实例的归纳学习方法,它能从给定的无序的训练样本中,提炼出树型的分类模型. ...

最新文章

  1. PCA(主成分分析)+SVD(奇异值分解)+区别
  2. 从“人脸”到“狗脸”,AI也要去宠物经济分杯羹?
  3. 中国大唐集团公司在役及在建资产分布在全国31个省区市以及境外
  4. LVM管理-元数据及分区表的恢复
  5. php unable to save,php – Laravel save()未定义
  6. Android中的AsyncTask异步任务的简单介绍
  7. matlab进行特征缩放,机器学习中(Feature Scaling)特征缩放处理的matlab实现方式
  8. Android自定义View之刻度尺
  9. 潜在语义索引(Latent Semantic Indexing, LSI)——快速教程
  10. 安装JDK并配置环境变量(详细图文介绍)
  11. Android支付宝财富界面,10分钟带你看懂支付宝的交互设计(二)
  12. KBL406-ASEMI整流桥KBL406
  13. 新手网站制作教程:网站建设流程及步骤有哪些?
  14. php 指纹验证失败,为什么手指沾了水,指纹识别就会失效?液体会导致指纹解锁失败?...
  15. 阿里p7大手子测试笔记:一线互联网大厂面试问题吃透,巧过面试关
  16. 好用速度又快,多御安全浏览器下载安装教程
  17. Jedis 读写效率测试 hgetAll hmset
  18. 微信小程序中如何引用weUI(踩坑记录)
  19. 电信联通涉垄断被指因监管落后 处罚或不了了之
  20. 我认识的林家翘先生 转载

热门文章

  1. yum错误:Cannot retrieve repository metadata (repomd.xml) for repository解决方法
  2. 稀疏索引、密集索引、聚簇索引、非聚簇索引
  3. 【Linux】基础常见指令
  4. 计算机职称级别一览表,2017高会《职称计算机》Word 2003:多级列表
  5. 使用openssl 转换pkcs12证书为pem格式
  6. 基于 FPGA 的便携式 DDS 信号发生器与示波器
  7. html实现新闻滚动效果,jQuery实现新闻播报滚动及淡入淡出效果示例
  8. 美学评价:Image Aesthetic Assessment: An Experimental Survey(计算机视觉美学评估综述)
  9. vue3中使用swiper7
  10. c++练习4) 编写程序把华氏温度转换为摄氏温度,公式为 C=5/9*(F-32)