您的位置  > 互联网

实现CART决策树算法及详细注释

1、CART决策树算法介绍 CART(And Trees分类和回归树)算法是一种树构建算法,既可以用于分类任务,也可以用于回归任务。 与只能用于离散数据和分类任务的ID3和C4.5相比,CART算法的适用范围要广泛得多。 它既可以用于离散数据,也可以用于连续数据,分类和回归任务都可以处理。

本文仅讨论基本的CART分类决策树构建,不讨论回归树和剪枝等问题。

首先,我们需要明确以下几点:

1、CART算法是二元分类常用的方法。 CART算法生成的决策树是二叉树,而ID3和C4.5算法生成的决策树是多树。 从运行效率的角度来看,二叉树模型优于多树模型。 计算效率高。

2、CART算法通过基尼指数选择最优特征。

2. 基尼系数 基尼系数代表模型的杂质程度。 基尼系数越小,杂质越低。 注意,这与C4.5的信息增益比的定义正好相反。

在分类问题中,假设有K类,某个样本点属于第k类的概率为pk,则概率分布的基尼系数定义为:

文章图片

如果CART用于二类分类问题(不仅仅是二类分类),那么概率分布的基尼系数可以简化为

文章图片

假设特征A用于将数据集D分为两部分,D1和D2。 此时,根据特征A划分的数据集的基尼系数为:

文章图片

3、CART决策树生成算法输入:训练数据集D、停止计算的条件

输出:CART决策树

根据训练数据集,从根节点开始,对每个节点递归执行以下操作,构建二叉决策树:

(1)计算数据集上现有特征的基尼指数,如上图;

(2)选择基尼指数最小值对应的特征作为最优特征,对应的分割点作为最优分割点(如果最小值对应的特征或分割点有多个,则任意选择一个) ;

(3) 根据最优特征和最优分割点,从当前节点生成两个子节点,并根据特征和属性将训练数据集中的数据分配给这两个子节点;

(4) 在两个子节点上递归调用(1)(2)(3),直到满足停止条件。

(5)生成CART树。

算法停止的条件:节点中的样本数量小于预定阈值,或者样本集的基尼指数小于预定阈值(样本基本属于同一类别,完全为0)属于同一类别),或者特征集为空。

注意:最优分割点是将当前样本分为两类的必要条件(因为我们要构建二叉树)。 对于离散情况,最优切割点是当前最优特征的某个值; 对于连续情况,最佳切割点可以是一个特定值。 在具体应用中,我们需要遍历所有可能的最优分割点值,找到我们需要的最优分割点。

4、如果CART算法的实现是二分类问题,则函数sum可以简化如下:

# 计算样本属于第一类的概率 pdef ():= len()count == [0][len([0]) - 1]for in :if [-1] == label:count + == float(count) / ():# 特征总数 = len([0]) - 1# 当只有一个特征时 if == 1: 0# 初始化最佳基尼系数 = 1# 初始化最佳特征e = -1for i in range():# 去重,每个属性值唯一 = set([i] for in )# 定义特征值的基尼系数 gini = {}for value in :, = (,i,值)prob1 = len () / float(len())prob2 = len() / float(len()) = () = ()基尼[值] = prob1 * 2 * * (1 - ) + prob2 * 2 * * (1 - )if 基尼[值] < : = 基尼[值]e == e,

五、运行结果

文章图片

关于实现 CART 决策树算法及其详细注释的文章到此结束。 有关CART决策树算法的更多信息,请搜索 House之前的文章或继续浏览下面的相关文章。 希望大家以后多多支持 House。 家!