用C++来写一棵决策树

本文介绍了在Windows环境下,使用C++实现决策树的过程。详细讲述了如何构造数据集,定义决策树为二叉树的结构体,数据集的拆分策略,基尼指数的计算,以及如何递归构建和预测决策树。文章最后提供了完整代码,虽然训练集正确率较低,但作为学习用途,简化了一些处理方式。
摘要由CSDN通过智能技术生成

运行环境:
window10 dev-c++5.11
决策树的实现除了,关于叶结点的类别赋值作弊了以下,其它基本依照CART生成算法实现
阅读本文之前,最好对决策树有一个认知,下文不会提到具体的步骤,建议先百度一下

训练数据集

x1,x2,x3,x4,y
3.6216,8.6661,-2.8073,-0.44699,0
4.5459,8.1674,-2.4586,-1.4621,0
3.866,-2.6383,1.9242,0.10645,0
3.4566,9.5228,-4.0112,-3.5944,1
0.32924,-4.4552,4.5718,-0.9888,1
4.3684,9.6718,-3.9606,-3.1625,1

保存为CSV文件,基于以上数据构造决策树

决策树为一棵二叉树

因此,需要定义一个结构体

struct tree{
    int index;// index
    double flag;// class
    float score;// gini score
    double value;// value = data[x][index]
    double **left_array;// left array set
    double **right_array;// right array set
    int left_size;// length(left_array)
    int right_size;// length(right_array)
    struct tree *left;// left subtree
    struct tree *right;// right right subtree
};

数据集拆分,在构造决策树时需要对数据集进行拆分,定义一个结构体

struct gini{
    int index;// index
    double value;// value = data[x][index]
    float score;// gini index
    double **left;// left array
    double **right;// right array
    int left_size;// length(left_array)
    int right_size;// length(right_size)
    struct gini *next;// 链接下一个
};

数据集拆分时,需要一个单链表来记录满足条件的数组下标

struct node{
    int data;
    struct node *next;
};

基尼指数的计算问题

 Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)   G i n i ( D , A ) = | D 1 | | D | G i n i ( D 1 ) + | D 2 | | D | G i n i ( D 2 )
 Gini(D1)=1ki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值