决策树算法(matlab)

article/2025/11/10 18:58:30

本文转载自: 点击打开链接


    决策树是一种特别简单的机器学习分类算法。决策树想法来源于人类的决策过程。举个最简单的例子,人类发现下雨的时候,往往会有刮东风,然后天色变暗。对应于决策树模型,预测天气模型中的刮东风和天色变暗就是我们收集的特征,是否下雨就是类别标签。构建的决策树如下图所示


      决策树模型构建过程为,在特征集合中无放回的依次递归抽选特征作为决策树的节点——当前节点信息增益或者增益率最大,当前节点的值作为当前节点分支出来的有向边(实际上主要选择的是这些边,这个由信息增益的计算公式就可以得到)。对于这个进行直观解释


      来说一个极端情况,如果有一个特征下,特征取不同值的时候,对应的类别标签都是纯的,决策者肯定会选择这个特征,作为鉴别未知数据的判别准则。由下面的计算信息增益的公式可以发现这时候对应的信息增益是最大的。

g(D,A)=H(D)-H(D|A)

      g(D,A):表示特征A对训练数据集D的信息增益

         H(D):表示数据集合D的经验熵

      H(D|A):表示特征A给定条件下数据集合D的条件熵。


      反之,当某个特征它的各个取值下对应的类别标签均匀分布的时候H(D|A)最大,又对于所有的特征H(D)是都一样的。因此,这时候的g(D,A)最小。

      总之一句话,我们要挑选的特征是:当前特征下各个取值包含的分类信息最明确。


下面我们来看一个MATLAB编写的决策树算法,帮助理解


[plain]  view plain copy
  1. clear;clc;  
  2.   
  3. % OutlookType=struct('Sunny',1,'Rainy',2,'Overcast',3);  
  4. % TemperatureType=struct('hot',1,'warm',2,'cool',3);  
  5. % HumidityType=struct('high',1,'norm',2);  
  6. % WindyType={'True',1,'False',0};  
  7. % PlayGolf={'Yes',1,'No',0};  
  8. % data=struct('Outlook',[],'Temperature',[],'Humidity',[],'Windy',[],'PlayGolf',[]);  
  9.   
  10. Outlook=[1,1,3,2,2,2,3,1,1,2,1,3,3,2]';  
  11. Temperature=[1,1,1,2,3,3,3,2,3,3,2,2,1,2]';  
  12. Humidity=[1,1,1,1,2,2,2,1,2,2,2,1,2,1]';  
  13. Windy=[0,1,0,0,0,1,1,0,0,0,1,1,0,1]';  
  14.   
  15. data=[Outlook Temperature Humidity Windy];  
  16. PlayGolf=[0,0,1,1,1,0,1,0,1,1,1,1,1,0]';  
  17. propertyName={'Outlook','Temperature','Humidity','Windy'};  
  18. delta=0.1;  
  19. decisionTreeModel=decisionTree(data,PlayGolf,propertyName,delta);  

[plain]  view plain copy
  1. function decisionTreeModel=decisionTree(data,label,propertyName,delta)  
  2.   
  3. global Node;  
  4.   
  5. Node=struct('fatherNodeName',[],'EdgeProperty',[],'NodeName',[]);  
  6. BuildTree('root','Stem',data,label,propertyName,delta);  
  7. Node(1)=[];  
  8. model.Node=Node;  
  9. decisionTreeModel=model;  

[plain]  view plain copy
  1. function BuildTree(fatherNodeName,edge,data,label,propertyName,delta)  
  2. %UNTITLED9 Summary of this function goes here  
  3. %   Detailed explanation goes here  
  4.   
  5. global Node;  
  6. sonNode=struct('fatherNodeName',[],'EdgeProperty',[],'NodeName',[]);  
  7. sonNode.fatherNodeName=fatherNodeName;  
  8. sonNode.EdgeProperty=edge;  
  9. if length(unique(label))==1  
  10.     sonNode.NodeName=label(1);  
  11.     Node=[Node sonNode];  
  12.     return;  
  13. end  
  14. if length(propertyName)<1  
  15.     labelSet=unique(label);  
  16.     labelNum=length(labelSet);  
  17.     for i=1:labelNum  
  18.         labelNum=length(find(label==labelSet(i)));  
  19.     end  
  20.     [~,labelIndex]=max(labelNum);  
  21.     sonNode.NodeName=labelSet(labelIndex);  
  22.     Node=[Node sonNode];  
  23.     return;  
  24. end  
  25. [sonIndex,BuildNode]=CalcuteNode(data,label,delta);  
  26. if BuildNode  
  27.     dataRowIndex=setdiff(1:length(propertyName),sonIndex);  
  28.     sonNode.NodeName=propertyName(sonIndex);  
  29.     Node=[Node sonNode];  
  30.     propertyName(sonIndex)=[];  
  31.     sonData=data(:,sonIndex);  
  32.     sonEdge=unique(sonData);  
  33.       
  34.     for i=1:length(sonEdge)  
  35.         edgeDataIndex=find(sonData==sonEdge(i));  
  36.         BuildTree(sonNode.NodeName,sonEdge(i),data(edgeDataIndex,dataRowIndex),label(edgeDataIndex,:),propertyName,delta);  
  37.     end  
  38. else  
  39.     labelSet=unique(label);  
  40.     labelNum=length(labelSet);  
  41.     for i=1:labelNum  
  42.         labelNum=length(find(label==labelSet(i)));  
  43.     end  
  44.     [~,labelIndex]=max(labelNum);  
  45.     sonNode.NodeName=labelSet(labelIndex);  
  46.     Node=[Node sonNode];  
  47.     return;  
  48. end  

[plain]  view plain copy
  1. function [NodeIndex,BuildNode]=CalcuteNode(data,label,delta)  
  2.   
  3. LargeEntropy=CEntropy(label);  
  4. [m,n]=size(data);  
  5. EntropyGain=LargeEntropy*ones(1,n);  
  6. BuildNode=true;  
  7. for i=1:n  
  8.     pData=data(:,i);  
  9.     itemList=unique(pData);  
  10.     for j=1:length(itemList)  
  11.         itemIndex=find(pData==itemList(j));  
  12.         EntropyGain(i)=EntropyGain(i)-length(itemIndex)/m*CEntropy(label(itemIndex));  
  13.     end  
  14.     % 此处运行则为增益率,注释掉则为增益  
  15.     % EntropyGain(i)=EntropyGain(i)/CEntropy(pData);   
  16. end  
  17. [maxGainEntropy,NodeIndex]=max(EntropyGain);  
  18. if maxGainEntropy<delta  
  19.     BuildNode=false;  
  20. end  

[plain]  view plain copy
  1. function result=CEntropy(propertyList)  
  2.   
  3. result=0;  
  4. totalLength=length(propertyList);  
  5. itemList=unique(propertyList);  
  6. pNum=length(itemList);  
  7. for i=1:pNum  
  8.     itemLength=length(find(propertyList==itemList(i)));  
  9.     pItem=itemLength/totalLength;  
  10.     result=result-pItem*log2(pItem);  
  11. end  

版权声明:本文为博主原创文章,未经博主允许不得转载


http://chatgpt.dhexx.cn/article/SfdBCXYp.shtml

相关文章

决策树算法梳理(从原理到示例)

决策树是最经典的机器学习模型之一。它的预测结果容易理解&#xff0c;易于向业务部门解释&#xff0c;预测速度快&#xff0c;可以处理类别型数据和连续型数据。本文的主要内容如下&#xff1a; 信息熵及信息增益的概念&#xff0c;以及决策树的节点分裂的原则&#xff1b;决…

机器学习-决策树算法

概念&#xff1a; 是一种树形结构&#xff0c;本质是一颗由多个判断节点组成的树其中每个内部节点表示一个属性上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff0c;最后每个叶节点代表一种分类结果。 通过分析可知&#xff1a; 决策树是非参数学习算法决策树可…

机器学习:决策树算法

文章目录 一、什么是决策树&#xff1f;二、决策树算法基本步骤三、算法实例1.数据集描述2.计算数据集香农熵3.数据集划分4.选择最好的数据集划分方式5.递归构建决策树6.创建树7.构造注解树8.使用决策树执行分类9.决策树的保存 三、运行结果 一、什么是决策树&#xff1f; 决策…

决策树算法:ID3

决策树是最经常使用的数据挖掘算法&#xff0c;其核心是一个贪心算法&#xff0c;它采用自顶向下的递归方法构建决策树&#xff0c;下面是一个典型的决策树&#xff1a;   目前常用的决策树算法有ID3算法、改进的C4.5&#xff0c;C5.0算法和CART算法 ID3算法的核心是在决策树…

什么是决策树算法

1.1、什么是决策树 咱们直接切入正题。所谓决策树&#xff0c;顾名思义&#xff0c;是一种树&#xff0c;一种依托于策略抉择而建立起来的树。 机器学习中&#xff0c;决策树是一个预测模型&#xff1b;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象…

【机器学习】决策树算法解读

【机器学习】决策树算法解读 文章目录 【机器学习】决策树算法解读1. 介绍1.1 优缺点1.2 结构1.3 学习过程1.4 决策树与条件概率分布 2. 决策树学习过程2.1 训练策略2.2 特征选择2.2.1 信息增益和条件熵 2.3 决策树的生成2.3.1 ID32.3.2 C4.52.3.3 CART2.3.4 小结 2.4 决策树的…

详解决策树算法

决策树 1.1 决策树定义 何为决策树&#xff0c;顾名思义&#xff0c;就像树枝状的决策算法&#xff0c;通过各个节点的“决策”&#xff0c;实现对任务的精准分类或回归&#xff0c;决策树常用来处理分类问题&#xff0c;即使你以前没接触过决策树&#xff0c;你也可以通过下…

决策树算法及其实现

决策树算法及其实现 1 什么是决策树 决策树&#xff08;Decision Tree&#xff09;是一种基本的分类与回归方法&#xff0c;本文主要讨论分类决策树。决策树模型呈树形结构&#xff0c;在分类问题中&#xff0c;表示基于特征对数据进行分类的过程。它可以认为是if-then规则的…

决策树算法 (CART分类树)

决策树算法 (ID3&#xff0c;C4.5) CART回归树 决策树的后剪枝 在决策树算法原理(ID3&#xff0c;C4.5)中&#xff0c;提到C4.5的不足&#xff0c;比如模型是用较为复杂的熵来度量&#xff0c;使用了相对较为复杂的多叉树&#xff0c;只能处理分类不能处理回归。对这些问题&a…

决策树算法总结

决策树算法常用于解决分类问题&#xff0c;该方法的优势在于其数据形式非常容易理解。 概述 决策树&#xff08;decision tree&#xff09;是一类常见的机器学习方法&#xff0e;以二分类任务为例&#xff0c;我们希望从给定训练数据集学得一个模型用以对新示例进行分类&…

决策树算法原理简介

1,决策树概念简介 不同的算法模型适合于不同类型的数据。 首先&#xff0c;在了解树模型之前&#xff0c;自然想到树模型和线性模型有什么区别呢&#xff1f;其中最重要的是&#xff0c;树形模型是一个一个特征进行处理&#xff0c;之前线性模型是所有特征给予权重相加得到一个…

机器学习——决策树算法

文章目录 一、决策树介绍二、利用信息增益选择最优划分属性三、ID3代码实现1.jupyter下python实现2. 使用sklearn实现ID3 四、C4.5算法实现五、CART算法实现六、总结参考文献 一、决策树介绍 决策树是一种基于树结构来进行决策的分类算法&#xff0c;我们希望从给定的训练数据集…

机器学习算法:决策树算法

1.基本定义 决策树(Decision Tree)是一种基本的分类和回归算法。该算法模型呈树形结构&#xff0c;主要由结点和有向边组成。结点又分为两种类型&#xff1a;内部结点和叶子结点。内部结点表示在一个属性或特征上的测试&#xff0c;每一个结点分枝代表一个测试输出&#xff0c;…

决策树算法应用及结果解读

作者&#xff1a;林骥 来源&#xff1a;林骥 引言 本文是我写的人工智能系列的第 8 篇文章&#xff0c;文末有前面 7 篇文章的链接&#xff0c;推荐你阅读、分享和交流。 1. 决策树算法简介 决策树是一种应用非常广泛的算法&#xff0c;比如语音识别、人脸识别、医疗诊断、模式…

机器学习算法(3)之决策树算法

前言&#xff1a;首先&#xff0c;在了解树模型之前&#xff0c;自然想到树模型和线性模型有什么区别呢&#xff1f;其中最重要的是&#xff0c;树形模型是一个一个特征进行处理&#xff0c;之前线性模型是所有特征给予权重相加得到一个新的值。决策树与逻辑回归的分类区别也在…

机器学习基础 决策树算法

文章目录 一、决策树算法简介二、决策树分类原理1. 熵1.1 概念1.2 案例 2. 决策树的划分依据一----信息增益2.1 概念2.2 案例 3. 决策树的划分依据二----信息增益率3.1 概念3.2 案例3.2.1 案例一3.2.2 案例二 3.3 为什么使用C4.5要好 4. 决策树的划分依据三 ----基尼值和基尼指…

【机器学习常见算法】决策树算法(含示例代码)

决策树(Decision Tree)是一种非参数的有监督学习方法&#xff0c;它能够从一系列有特征和标签的数据中总结出决策规 则&#xff0c;并用树状图的结构来呈现这些规则&#xff0c;以解决分类和回归问题。决策树算法容易理解&#xff0c;适用各种数据&#xff0c;在解决各 种问题时…

【决策树】深入浅出讲解决策树算法(原理、构建)

本文收录于《深入浅出讲解自然语言处理》专栏&#xff0c;此专栏聚焦于自然语言处理领域的各大经典算法&#xff0c;将持续更新&#xff0c;欢迎大家订阅&#xff01;​个人主页&#xff1a;有梦想的程序星空​个人介绍&#xff1a;小编是人工智能领域硕士&#xff0c;全栈工程…

协方差矩阵推导

协方差定义&#xff1a;&#xff0c;其中分别为向量的均值。 设已知矩阵 则 样本自由度m-1&#xff0c;设&#xff0c;&#xff0c;则

协方差矩阵到底有什么用?

我们知道&#xff0c;线性代数&#xff0c;可以完成空间上的线性变换——旋转&#xff0c;缩放。对于协方差&#xff0c;我们隐约可以想到&#xff0c;它能解释一个随机变量&#xff0c;它在各个维度的变化程度。但是&#xff0c;这种认识其实还是处于比较浅层次的。数学嘛&…