机器学习——十大数据发掘之一的决策树CART算法
作者头像
  • 创业帮帮
  • 2020-06-06 14:22:25 2

明天我们将发布一篇关于机器学习的文章,聚焦于十大数据挖掘算法之一——CART算法。

CART算法的全称是分类回归树(Classification and Regression Tree),是一种经典的决策树模型。此前我们已经介绍了ID3和C4.5算法,而CART算法则是这一系列的另一种实现。决策树模型主要有三种实现方式,我们已介绍过前两种,今天将重点讲解第三种。

算法特点

CART算法被称为分类回归树,顾名思义,它既可以应用于分类问题,也能处理回归任务。然而,在实际应用中,我们通常使用CART来进行分类。这是因为回归树模型的效果往往不尽如人意,除了树模型拟合能力有限外,特征形式对回归树影响较大。因此,CART算法主要用于解决分类问题。

CART算法与ID3和C4.5算法的主要区别在于: 1. CART算法使用Gini指数而不是信息增益作为划分依据。 2. CART算法每次划分数据时,总是将数据分为两部分,而非多个部分。这使得CART算法对划分次数没有限制,但需要更高的剪枝要求以避免过拟合。

Gini指数

在ID3和C4.5算法中,数据划分时使用的是信息增益和信息增益比,这两种方法都基于信息熵模型。虽然信息熵模型本身非常实用,但在计算过程中会涉及到复杂的对数运算,这使得计算过程相对耗时。

Gini指数本质上也是基于信息熵模型,但通过一些转换,避免了对数运算,简化了计算过程。Gini指数的计算公式如下:

[ text{Gini} = 1 - sum{i=1}^{k} pi^2 ]

其中 ( p_i ) 表示第 ( i ) 类的概率,即第 ( i ) 类样本占所有样本的比例。因此,Gini指数越小,说明数据集越集中,即纯度越高。Gini指数与信息熵的概念十分接近,只是计算方法不同。

数据划分与剪枝

CART算法每次划分数据时都是二分的,这一点与C4.5算法处理连续特征的方式相似。但与C4.5不同的是,CART算法允许重复使用同一特征。例如,在之前的算法中,西瓜的直径作为特征被使用后,就不能再次使用;而在CART算法中,同一个特征可以多次使用。

这种特性虽然合理,但也可能导致树模型过拟合。为了避免这种情况,我们需要对生成的树进行剪枝。剪枝主要有两种方法:预剪枝和后剪枝。预剪枝是在生成树的过程中就进行限制,防止过度拟合;后剪枝则是在树生成后再进行修剪,以优化性能。

在CART算法中,常用的剪枝策略是CCP(Cost-Complexity Pruning)。该策略通过设置阈值来衡量子树的复杂度代价,并决定是否剪枝。具体而言,CCP策略通过计算每个子树的复杂度代价来判断是否进行剪枝。

代码实现

我们之前已经实现了C4.5算法,实现CART算法相对简单,只需将信息增益比改为Gini指数即可。以下是Python代码示例:

```python import numpy as np from collections import Counter

def gini_index(dataset): dataset = np.array(dataset) n = dataset.shape[0] if n == 0: return 0 counter = Counter(dataset[:, -1]) ret = 1.0 for k, v in counter.items(): ret -= (v / n) ** 2 return ret

def splitgini(dataset, idx, threshold): left, right = [], [] n = dataset.shape[0] for data in dataset: if data[idx] < threshold: left.append(data) else: right.append(data) left, right = np.array(left), np.array(right) return left.shape[0] / n * giniindex(left) + right.shape[0] / n * gini_index(right)

def choosefeaturetosplit(dataset): n = len(dataset[0]) - 1 m = len(dataset) bestgini = 1.0 feature = -1 threshold = None for i in range(n): thresholds = getthresholds(dataset, i) for t in thresholds: ratio = splitgini(dataset, i, t) if ratio < bestgini: bestgini, feature, threshold = ratio, i, t return feature, threshold ```

构建和预测部分与C4.5算法基本一致,只需去掉对离散特征的判断即可。

总结

至此,我们已经介绍了决策树模型的基本原理以及ID3、C4.5和CART算法。这些知识足以应对面试中的相关问题。尽管在实际应用中决策树可能不太常用,但其背后的原理对于理解其他高级模型(如随机森林和GBDT)非常重要。因此,深入理解决策树的原理对我们后续的学习至关重要。

如果觉得这篇文章对你有所帮助,请关注我们的公众号[TechFlow],以便获取更多相关内容。

    本文来源:图灵汇
责任编辑: : 创业帮帮
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
算法发掘决策机器之一十大数据学习CART
    下一篇