连续与缺失值-----决策树

连续与缺失值

决策树给我们的印象更多是处理离散属性,但是在实际的任务中也会遇到连续属性,或者属性中有缺失值的情况,那么我们对于这种数据我们如何进行处理。

1. 连续值处理

因为连续属性的可取值数目不再有限,因此,不能直接根据连续属性的可取值来对结点进行划分,否则,这样的决策树毫无泛化能力。所以,我们将连续属性进行离散化。最简单的策略是采用“二分法”,C4.5决策树算法中也是使用的这种机制。

给定样本集D和连续属性a,假定a在D上出现了n个不同的取值,我们将这些值从小到大进行排序,记为\{a^1,a^2,...,a^n\},然后使用二分法进行划分。首先我们选择a^1作为我们当前划分的阈值,将在属性a上值小于等于a^1的样本分为一类,大于a^1的分为另外一类,这样就产生了分支,然后再计算这样划分之后的信息增益;接下来重新选择a^2作为我们当前的划分阈值,将在属性a上值小于等于a^2的样本分为一类,大于a^2的分为另外一类,这样就产生了分支,然后再计算这样划分之后的信息增益;以此类推,知道计算出a^n作为我们当前划分阈值的信息增益,选择最大信息增益对应的属性值作为当前的划分阈值。

连续与缺失值-----决策树_第1张图片

如上图中所示密度是个连续属性,选择0.381作为当前的划分阈值,这个时候的信息增益最大。 以上就是对于连续属性在构建决策树的时候的处理过程,需要注意的是,与离散属性不同,连续属性还可以作为其后代结点的划分属性。

2. 缺失值处理 

 在现实任务中经常会遇到不完整的样本,即样本的某些属性值缺失。尤其是在属性数目很多的情况下,往往会有大量样本出现缺失值。如果我们直接将这些带有缺失值的样本删除,这样我们获得的训练集将更少。既然不能直接将这些带有缺失值的样本直接丢弃,那么我们如何在属性值缺失的情况下进行划分属性的选择。

给定训练集D和属性a,令\widetilde{D}表示D中在属性a上没有缺失值的样本子集。这样\widetilde{D}对于我们来说就是没有缺失值样本,我们可以根据\widetilde{D}来判断划分属性a的优劣。同之前的划分属性选择类似,不过我们现在使用的样本集合是\widetilde{D}。同样假定属性a有V个可取值\{a^1,a^2,...,a^V\},令\widetilde{D}^v表示\widetilde{D}中在属性a上取值为a^v的样本子集,\widetilde{D}_k表示\widetilde{D}中属于第k类(k=1,2,...,|y|)的样本子集。假定我们为每个样本x赋予一个权重w_x并且定义:

连续与缺失值-----决策树_第2张图片

对于属性a来说,\rho表示无缺失样本所占的比例 ,\tilde{p}_{k}表示无缺失样本中第k类所占的比列,\tilde{r}_{v}则表示无缺失值样本中在属性a上取值a^v的样本所占的比例。基于这些定义,在属性值缺失的情况下,信息增益的计算方式转换未:

连续与缺失值-----决策树_第3张图片

其中

 具体的例子计算西瓜上有,可以去树上详细看看。

最后,说说在我碰到的项目中对缺失值的处理,一般这个并不属于建模的过程,而是在建模之前,归为特征处理这一部分。在存在缺失值样本所占总样本非常少的情况下,可以直接删除,注意这是所咱比例非常少的情况下,那么如果是大量存在缺失值,我们一般采用填充的方法,一般包括缺失属性所有属性值的平均值、中位数进行填充,或者复杂还有各种插值法,如拉格朗日插值等等,有兴趣的可以具体看看。

你可能感兴趣的:(机器学习)