决策树分类

发现使用决策树太方便了,之前不了解,吭呲吭呲的自己整了很多,matlab分分钟搞定,还清晰明了效果好;

需要根据大量数据进行分类或者设置阈值时,使用决策树太方便了。

源数据:提取了一些数据的特征值和类别,用来区分走路和不走了的状态,

数据格式[feature1, feature2, feature3, feature4, feature6, sign], sign为结果

代码:

A=importdata('.\DecisionTree\XYZ计步.txt'); % 导入数据
B=importdata('.\DecisionTree\XYZ不计步.txt');
TestA = importdata('.\DecisionTree\XYZ测试计步.txt');
TestB = importdata('.\DecisionTree\XYZ测试不计步.txt');
Train = [A;B];

% 训练数据
P_train = Train(:, 1:6);
T_train = Train(:,7);

% 测试数据
P_testA = TestA(:, 1:6);
P_testB = TestB(:, 1:6);

if  0 % 查看叶子节点含有的最小样本数对决策树性能的影响
    leafs = logspace(1,2,10);
    N = numel(leafs);
    err = zeros(N,1);
    for n = 1:N
        t = ClassificationTree.fit(P_train, T_train,'crossval', 'on','minleaf',leafs(n));
        err(n) = kfoldLoss(t);
    end
    plot(leafs,err);
    xlabel('叶子节点含有的最小样本数');
    ylabel('交叉验证误差');
    title('叶子节点含有的最小样本数对决策树性能的影响');
end

% 创建决策树分类器
if 1
ctree = ClassificationTree.fit(P_train, T_train);
view(ctree,'mode','graph');
T_sim = predict(ctree, P_testB);
end

if 0 % 设置minleaf为10,产生优化决策树
OptimalTree = ClassificationTree.fit(P_train, T_train,'minleaf', 10);
view(OptimalTree, 'mode','graph');
T_simA = predict(OptimalTree, P_testA);
T_simB = predict(OptimalTree, P_testB);

% 计算优化后的决策树的重带入误差和交叉验证误差
resubOpt = resubLoss(OptimalTree)
lossOpt = kfoldLoss(crossval(OptimalTree))
% 计算优化前决策树的重代入误差和交叉验证误差
resubDefault = resubLoss(ctree)
lossDefault = kfoldLoss(crossval(ctree))
end

决策树,树枝太多,不放图了。

交叉验证误差:叶子节点含有的最小样本数对决策树性能的影响

 

 

 

优化后的结果:选用最小叶子节点为10;

 

粗暴一点,选用最小叶子节点为100(下图);

叶子最小节点在100,误差在可以接受范围内,完美;

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚努力的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值