决策树系列(三):CART(分类回归树)-详细原理解析及代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lanyuelvyun/article/details/88697386

1 CART,又名分类回归树

有以下特点:

(1)CART是一棵二叉树;
(2)CART既能是分类树,又能是回归树,由目标任务决定;
(3)当CART是分类树时,采用GINI值作为结点分裂的依据;当CART是回归树时,采用MSE(均方误差)作为结点分裂的依据;

2 分类树和回归树的区别?

针对分类任务,就是分类树;针对回归任务,就是回归树。
分类任务:预测目标是离散值,例如预测该用户是否会逾期,逾期是一类,用1表示,不逾期是另一类,用0表示。分类树采用GINI值作为结点分裂的依据;
回归任务:预测目标是连续值,例如预测用户的身高。回归树采用MSE(均方误差)作为结点分裂的依据。

下面以回归树为例,详细写一下树的分裂和生成过程,并附上代码。

3 回归树算法详解

回归树的算法详解,其实就是回归树的生成过程,说的是一回事儿。

  • 样本集:S = {s_1, s_2, …, s_N},有N个样本
  • 特征集:F = {f_1, f_2, … , f_M},每一个样本对应一组特征
  • 目标值/真实值 集合:T = {t_1, t_2, …, t_N},每一个样本对应一个目标值,对于回归任务来说,每一个目标值都是一个具有连续值属性的数值。

3.1 步骤如下

1、原始数据集S,此时树的深度depth=0。
2、针对集合S,遍历每一个feature的每一个value,用该value将原数据集S分裂成2个集合:左集合S_left(<=value的样本)、右集合S_right(>value的样本),每一个集合也叫做一个结点。分别计算这2个集合的mse,找到使得(left_mse+right_mse)最小的那个value,记录下此时的feature名称和value,这个就是最佳分割特征以及最佳分割值;
每一个集合/结点mse的计算方法如下:

mean = sum(该集合内每一个样本的目标值) /  该集合内样本总数。 
(ps:这个mean就是该结点的值,也就是落在该结点内的样本的预测值,同一个结点中的样本具有同一个预测值。)
mse = sum((该集合内每一个样本的目标值 - mean)^2 )
为什么要用均方差mse来作为分裂的依据呢?
只要是能衡量预测值和真实值/目标值之间的差距的数学公式,都可以用。
但是均方差有更好的好处:一阶导数和二阶导数可求并好求。

3、找到最佳分割feature以及最佳分割value之后,用该value将集合S分裂成2个集合:左集合S_left、右集合S_right,每一个集合也叫做一个结点。此时树的深度depth += 1。
4、针对集合S_left、S_right分别重复步骤2,3,直到达到终止条件。
终止条件有:

1、达到了最大深度:depth >= max_depth,停止分裂;
2、叶子结点的样本数量达到了阈值:如果一个集合的样本数量  < min_samples_leaf,则停止分裂;
其中,max_depth和min_samples_leaf都是人为制定的超参数。

5、最后生成的、不再进行分裂的集合就叫做叶子结点。落在该叶子节点内的样本的预测值,就是该叶子结点的值。同一个叶子结点中的样本具有同一个预测值。
叶子结点值的计算方法:

不是简单的均值了
sum1 = sum(该叶子节点内每一个样本的目标值)
sum2 = sum( abs(该叶子结点内每一个样本的目标值)* (2 - abs(每一个样本的目标值)) )
leaf_value = sum1 / sum2

猜你喜欢

转载自blog.csdn.net/lanyuelvyun/article/details/88697386