决策树

Matlab代码

例子1-fitctree,三分类

  • 利用 MATLAB 中自带的鸢尾属植物样本数据 fisheriris, 其属性分别为花萼 长度 (SL)、花萼宽度 (SW)、花瓣长度 (PL)、花瓣宽度 (PW), 标签分别为“setosa”(山鸢尾)、“versicolor”(杂色鸢尾) 和“virginica”(弗吉尼亚鸢尾). 数据集中共包含 150组数据信息, 每一类别植物有 50 组数据. 利用 MATLAB 自带的分类决策树函数 fitctree构建决策树, 并对新样本 [1, 0.2, 0.4, 2] 的类别进行预测。
%CART决策树算法MATLAB实现
%用决策树算法对鸢尾属植物数据集进行分类和预测
clear all; 
close all; 
clc;

load fisheriris;   %载入样本数据
t = fitctree(meas,species,'PredictorNames',{'SL','SW','PL','PW'});  %定义4种属性显示名称

view(t); %在命令窗口中用文本显示决策树结构
view(t,'Mode','graph');  %图形显示决策树结构

cls = predict(t,[1 0.2 0.4 2]);

在这里插入图片描述

例子2-fitctree,二分类

  • 用 MATLAB 自带的 fitctree 函数构建决策树, 对电离层数据集 (IonosphereData Set) 进行分类. 该数据集需要根据给定的电离层中的自由电子的雷达回波来预测 大气的结构. 它是一个二分类问题, 每个类的观察值数量不均等, 一共有 351 个观察值,34 个 (17 对雷达回波数据) 输入变量和 1 个输出变量 (两个类: g 表示好, b 表示坏)。
%对电离层数据集(Ionosphere Dataset)进行分类 
clc;
close all;
clear all;

load ionosphere; %载入电离层数据集
n = size(X,1); %样本个数
rng(1); %可重复出现
indices = crossvalind('KFold', n, 5);
%用5折分类法将样本随机分为5部分
i=1; %1份进行测试,4份用来训练
test = (indices == i);
train = ~test;
X_train = X(train, :); %训练集
Y_train = Y(train, :); %训练集标签
X_test = X(test, :); %测试集
Y_test = Y(test, :); %测试集标签

%构建CART算法分类树
cart_tree=fitctree(X_train,Y_train);

view(cart_tree); %显示决策树的文字描述
view(cart_tree,'Mode','graph'); %生成树图

rules_num=(cart_tree.IsBranchNode==0);
rules_num=sum(rules_num); %求取规则数量
disp(['规则数: ' num2str(rules_num)]);

c_result = predict(cart_tree,X_test); %使用测试样本进行验证
c_result = cell2mat(c_result);
Y_test = cell2mat(Y_test);
c_result = (c_result==Y_test);
c_length = size(c_result,1); %统计准确率
c_rate = (sum(c_result))/c_length*100;
disp(['准确率: ' num2str(c_rate)]);

在这里插入图片描述

更多推荐