机器学习算法|CART算法--python实现

本文介绍了CART决策树的概念,包括基尼指数及其在选择最优划分属性中的应用。通过Python实现了CART算法,以鸢尾花卉数据集为例,详细阐述了算法的思路和具体代码。虽然与ID3和C4.5算法有相似之处,但CART使用基尼指数,且适用于分类和回归问题。

1. CART决策树

CART决策树(Classification and Regression Tree)又称为分类与回归树,该模型是由Breiman等人在1984年提出,是一种注明的的决策树学习算法。从名字就可知道,这个算法既能处理分类问题,又能解决回归问题。
CART决策树与之前文章讨论过的ID3算法C4.5算法有着类似的逻辑,不过也有所不同。

1.1 基尼指数

CART决策树使用“基尼指数”(Gini Index)来选择最优的划分属性,其定义如下:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ Gini(D) &= \su…
由定义公式可知,Gini(D)反映了从数据集D中随机抽取的样本,其类别标记不一致的概率。因此,Gini(D)越小,则数据集D的纯度越高。
那么,在数据集D中,对于某一个属性a的基尼指数定义为:
G i n i _ I n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v )    . Gini\_Index(D,a) = \sum^{V}_{v=1} \frac{|D^v|}{|D|} Gini(D^v) \ \ . Gini_Index(D,a)=v=1VDDvGini(Dv)  .
根据这2个公式,我们就可以在属性集合中A一个一个计算,最后选择那个基尼指数最小的属性作为最优划分属性,即$a_*={arg}_{a\in A} min \ \ Gini_Index(D,a) \ $.

2. python实现

对于CART决策树,采用的是机器学习领域最有名的数据集之一——鸢尾花卉数据集(iris.csv)作为input data.

2.1 思路

输入: 训练集 D=(x1,y1),(x2,y2),…,(xm,ym);
    属性集 A=a1,a2,a3,…,ad;
过程: 函数CreateTree(D,A)
1. 生成节点node;

  1. if D中样本全部属于同一类别C then
  2. 将node标记为C类叶节点; return
  3. end if
  4. if A=∅ OR D中的样本在A上取值都相同 then
  5. 将node标记为叶节点,其类别标记为D中样本数量最多的类; return
  6. end if
  7. 从A中选择最优的划分属性a∗;
  8. for a∗的每一个值av∗ do
    10.  为node节点生成一个分支;令Dv表示D中在a∗上取值为av∗的样本子集;
    11.  if Dv为空 then
    12.   将分支节点标记为叶节点,其类别标记为D中样本最多的类; return
    13.  else
    14.   以CreateTree(Dv,a∗)为分支节点
    15.  end if
    16. end for
    输出:以node为根节点的一棵决策树
2.2 具体的代码

需要说明的是:

  • 由于这次使用的数据集类型与前两篇文章的不同,因此,在代码上与之前文章讨论过的ID3算法C4.5算法代码略有不同,具体体现在对于数据的选择、处理语句不同,但是逻辑和框架都是一样的,比如分割数据集、选择最优属性的方式等都是一样的思路,请仔细体会。

  • 本次算法实现不讨论决策树剪枝。具体的剪枝原理和实现方法我将在下一篇文章中讨论和阐述。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值