决策树模型(matlab)

第一个函数是计算熵的函数

<span style="font-size:18px;">function result=CEntropy(propertyList)

result=0;
totalLength=length(propertyList);
itemList=unique(propertyList);
pNum=length(itemList);
for i=1:pNum
    itemLength=length(find(propertyList==itemList(i)));
    pItem=itemLength/totalLength;
    result=result-pItem*log2(pItem);
end</span>

实现决策树模型的主函数

<span style="font-size:18px;">function decisionTreeModel=decisionTree(data,label,propertyName)

global rootNode;
global Node;

rootNode=struct('NodeName',[]);
Node=struct('fatherNodeName',[],'EdgeProperty',[],'NodeName',[]);

rootIndex=CalcuteNode(data,label);
dataRowIndex=setdiff(1:length(propertyName),rootIndex);
rootNode.NodeName=propertyName(rootIndex);
propertyName(rootIndex)=[];
rootData=data(:,rootIndex);
sonEdge=unique(rootData);

for i=1:length(sonEdge)
    edgeDataIndex=find(rootData==sonEdge(i));
    BuildTree(rootNode.NodeName,sonEdge(i),data(edgeDataIndex,dataRowIndex),label(edgeDataIndex,:),propertyName);
end

model.rootNode=rootNode;
model.Node=Node;
decisionTreeModel=model;</span>

决策树模型主函数需要调用的递归函数,用于构造除了根节点以外的其他节点

<span style="font-size:18px;">function [ output_args ] = BuildTree(fatherNodeName,edge,data,label,propertyName)
%UNTITLED9 Summary of this function goes here
%   Detailed explanation goes here

global rootNode;
global Node;

% rootNode=struct('NodeName',[]);
% Node=struct('fatherNodeName',[],'EdgeProperty',[],'NodeName',[]);

k=length(Node)+1;
Node(k).fatherNodeName=fatherNodeName;
Node(k).EdgeProperty=edge;
if length(unique(label))==1
    Node(k).NodeName=label(1);
    return;
end

sonIndex=CalcuteNode(data,label);
dataRowIndex=setdiff(1:length(propertyName),sonIndex);
Node(k).NodeName=propertyName(sonIndex);
propertyName(sonIndex)=[];
sonData=data(:,sonIndex);
sonEdge=unique(sonData);

for i=1:length(sonEdge)
    edgeDataIndex=find(sonData==sonEdge(i));
    BuildTree(Node(k).NodeName,sonEdge(i),data(edgeDataIndex,dataRowIndex),label(edgeDataIndex,:),propertyName);
end

end
</span>

里面用到的返回下一个特征作为子节点的函数

<span style="font-size:18px;">function [NodeIndex]=CalcuteNode(data,label)

LargeEntropy=CEntropy(label);

[m,n]=size(data);
EntropyGain=LargeEntropy*ones(1,n);

for i=1:n
    pData=data(:,i);
    itemList=unique(pData);
    for j=1:length(itemList)
        itemIndex=find(pData==itemList(j));
        EntropyGain(i)=EntropyGain(i)-length(itemIndex)/m*CEntropy(label(itemIndex));
    end
    % 此处运行则为增益率,注释掉则为增益
%     EntropyGain(i)=EntropyGain(i)/CEntropy(pData);
end
[~,NodeIndex]=max(EntropyGain);
end</span>

接下来,测试用主函数:

<span style="font-size:18px;">clear;clc;

OutlookType=struct('Sunny',1,'Rainy',2,'Overcast',3);
TemperatureType=struct('hot',1,'warm',2,'cool',3);
HumidityType=struct('high',1,'norm',2);
WindyType={'True',1,'False',0};
PlayGolf={'Yes',1,'No',0};
data=struct('Outlook',[],'Temperature',[],'Humidity',[],'Windy',[],'PlayGolf',[]);

Outlook=[1,1,3,2,2,2,3,1,1,2,1,3,3,2]';
Temperature=[1,1,1,2,3,3,3,2,3,3,2,2,1,2]';
Humidity=[1,1,1,1,2,2,2,1,2,2,2,1,2,1]';
Windy=[0,1,0,0,0,1,1,0,0,0,1,1,0,1]';

data=[Outlook Temperature Humidity Windy];
PlayGolf=[0,0,1,1,1,0,1,0,1,1,1,1,1,0]';
propertyName={'Outlook','Temperature','Humidity','Windy'};

decisionTreeModel=decisionTree(data,PlayGolf,propertyName);</span>
时间: 2024-08-19 03:21:50

决策树模型(matlab)的相关文章

决策树模型与学习《一》

html { } :root { } html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif } body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0p

机器学习中---分类模型--决策树模型

决策树模型 决策树(DecisionTree, DT)是一种常见的用于分类和回归的非参数监督学习方法,目标是创建一个模型,通过从数 据特性中推导出简单的决策规则来预测目标变量的值.决策树模型的优点在于:1,简单容易理解,数据结构可以可视化表达.2,需要很少的数据准备,其他技术通常需 要数据标准化,需要创建虚拟变量,并删除空白值.3,能够处理多输出问题. 决策树模型的缺点在于:1,决策树学习可能会生成过于复杂的数结构,不能代表普遍的规则,即模型容易过拟 合,修剪机制,设置叶子节点所需的最小样本数目

决策树模型

这一节决策树其实是对前面的堆排序,快排等是最优的比较算法的证明, 首先说下<算法导论>上对决策树的定义:一棵决策树是一棵满二叉树(注意看下面解释),表示某排序算法作用于给定输入所做的所有比较,而控制结构,移动等都被忽略了. 注意:这里个人认为定义是错误的,决策树不是一棵满二叉树,连完全二叉树都不是. 首先看看只有三个元素时,决策树的图: 在决策树中,每个内结点都用i:j表示比较下标为i数组元素与下标为j的数组元素的大小.每一个叶结点是一个n个元素的全排列. 所以排序算法的执行对应于遍历一条从树

决策树模型比较:C4.5,CART,CHAID,QUEST

(1)C4.5算法的特点为: 输入变量(自变量):为分类型变量或连续型变量. 输出变量(模板变量):为分类型变量. 连续变量处理:N等分离散化. 树分枝类型:多分枝. 分裂指标:信息增益比率gain ratio(分裂后的目标变量取值变异较小,纯度高) 前剪枝:叶节点数是否小于某一阈值. 后剪枝:使用置信度法和减少-误差法. (2)CART算法的特点为: 输入变量(自变量):为分类型变量或连续型变量. 输出变量(目标变量):为分类型变量(或连续型:回归分析) 连续变量处理:N等分离散化. 树分枝类

决策树模型、本质、连续值

摘自<统计学习方法> 李航  第五章 决策树学习通常包括3个步骤:特征选择.决策树的生成.决策树的剪枝 决策树学习本质上是从训练集中归纳出一组分类规则. 决策树学习的损失函数通常是正则化的极大似然函数. 决策树的学习算法通常是采用启发式的方法,近似求解最优化问题 特征选择问题 特征选择在于选取对训练数据具有分类能力的特征.如果一个特征具有更好的分类能力,或者说,按照这一特征将训练数据集分割成子集, 使得各个子集在当前条件下有最好的分类,那么就更应该选择这个特征. 决策树的生成 ID3算法 ID

经典决策树模型

常用的决策树算法有ID3.C4.5.CART,它们构建树所使用的启发式函数各是什么?除了构建准则之外,它们之间的区别与联系是什么?首先,我们回顾一下这几种决策树构造时使用的准则. 人 年龄 长相 工资 写代码 类别 小A 老 帅 高 不会 不见 小B 年轻 一般 中等 会 见 小C 年轻 丑 高 不会 不见 小D 年轻 一般 高 会 见 小L 年轻 一般 低 不会 不见 ID3: 最大信息增益 信息增益 = 经验熵-经验条件熵 \(D\):样本集合:\(K\):类别数 经验熵: \[H(D) =

《数据挖掘导论》 - 读书笔记(5) - 分类:基本概念、决策树与模型评估 [2016-8-21]

第4章 分类:基本概念.决策树与模型评估 分类任务就是确定对象属于哪个预定义的目标类.分类问题是一个普遍存在的问题,有许多不同的应用.例如:根据电子邮件的标题和内容检查出垃圾邮件,根据核磁共振扫描的结果区分肿瘤是恶性的还是良性的,根据星系的形状对它们进行分析. 本章介绍分类的基本概念,讨论诸如模型的过分拟合等关键问题,并提供评估和比较分类技术性能的方法.尽管本章主要关注一种称作决策树归纳的技术,但是本章讨论的大部分内容也适用于其他的分类技术. 4.1 预备知识 分类任务的输入数据是记录的集合.每

决策树0-基本模型

什么是决策树 其实网络上有着很多说明决策树的文章,比如参考资料中的1和2,主要是因为这个机器学习的方法实在太经典了,有着很多不同的算法实现,包括最早的由Quinlan在1986年提出的ID3算法.1993年同样是Quinlan提出的C4.5算法以及由Braiman等人在1984年提出的CART算法. 尽管这个模型如此的”尽人皆知”,但是此处还是要说明一下,到底什么才是决策树. 决策树模型其实是一种描述决策过程的树形结构,既可以用来分类也可以进行回归分析.一个决策树就是一个树结构,它是由节点和有向

机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树

摘要: Classification And Regression Tree(CART)是一种很重要的机器学习算法,既可以用于创建分类树(Classification Tree),也可以用于创建回归树(Regression Tree),本文介绍了CART用于离散标签分类决策和连续特征回归时的原理.决策树创建过程分析了信息混乱度度量Gini指数.连续和离散特征的特殊处理.连续和离散特征共存时函数的特殊处理和后剪枝:用于回归时则介绍了回归树和模型树的原理.适用场景和创建过程.个人认为,回归树和模型树