数据挖掘十八般武艺(一):决策树

一、算法原理

(1)基本算法

决策树(Decision Tree),基于“树”结构进行决策:
        每个内部结点对应一个属性测试;
        每个分支对应属性测试的一种可能取值;
        每个叶结点对应一个决策结果。

决策树结构

学习过程:通过对训练样本的分析来确定“划分属性”(即内部结点所对应的属性)。

预测过程:将测试示例从根结点开始,沿着划分属性所构成的“判定测试序列”下行,直到叶结点。

策略:分而治之(Divide-and-Conquer)
        自根至叶递归;
        在每个内部结点寻找一个划分(或测试)属性。

递归停止条件:
        当前结点包含的样本全属于同一类别,无需划分;
        当前属性集为空, 或是所有样本在所有属性上取值相同,无法划分;
        当前结点包含的样本集合为空,不能划分。

决策树基本算法

(2)划分

①信息增益

信息熵(Entropy):度量样本集合“纯度”最常用的一种指标。

假定当前样本集合D中第k类样本(k=1, 2, …, |y|)所占的比例为,则D信息熵定义为:

Ent(D)的值越小,则D的纯度越高:
        Ent(D)的最小值:0,此时D中只有一类;
        最大值
,此时D中每个样本都是一类

信息增益(Information Gain):划分带来纯度的提升,信息熵的下降。

离散属性a的取值:

:D中在a上取值等于的样本集合
以属性a对数据集D进行划分所获得的信息增益为:
 

信息增益越大,意味着使用属性a来进行划分所获得的“纯度提升”越大。

ID3决策树算法:在候选属性集合中选取信息增益最高的属性。

举例:西瓜数据集(后面以该数据集为例)

西瓜数据集

 计算根结点的信息熵Ent(D): 

当前属性集合A={色泽,根蒂,敲声,纹理,脐部,触感}
以属性“色泽”为例,其对应的3个数据子集为:
                                        
(色泽=青绿),(色泽=乌黑),(色泽=浅白)

以子集为例,其包含6个样例,{1,4,6,10,13,17},占总样例数的6/17,其中正例占样例数p1=3/6,反例占D1样例数p2=3/6  ,因此

同理, 

属性“色泽”的信息增益为:

 

全部属性的信息增益为:

属性“纹理”的信息增益最大,被选为划分属性

对每个分支结点根据信息增益准则做进一步划分,得到决策树:

信息增益准则对可取值数目较多的属性有所偏好。

②增益率

增益率(Gain Ratio):

属性a的固有值(Intrinsic Value):

属性a的可能取值数目越多,即 V 越大,则IV(a)的值通常就越大。

增益率准则对可取值数目较少的属性有所偏好。

C4.5决策树算法:从候选属性集合中找出信息增益高于平均水平的,再从中选取增益率最高的。

③基尼指数

基尼值(Gini):度量数据集D的纯度

反映了从D中随机抽取两个样例,其类别标记不一致的概率。

Gini(D)越小,数据集D的纯度越高。

属性a的基尼指数(Gini Index):

CART决策树算法:在候选属性集合中选取使划分后基尼指数最小的属性。

总结

(3)剪枝

为了尽可能正确分类训练样本,有可能造成分支过多,从而导致过拟合。

剪枝(Pruning):是决策树预防过拟合的主要手段,可通过主动去掉一些分支来降低过拟合的风险。

划分:划分选择对决策树的尺寸有较大影响,但对泛化性能的影响很有限。

剪枝:剪枝方法和程度对决策树泛化性能的影响更为显著。

剪枝的两种策略:
        预剪枝(Pre-pruning):提前终止某些分支的生长(自上而下)。
        后剪枝(Post-pruning):生成一棵完全树,再回头剪枝(自下而上)。

举例:

根据信息增益准则将训练集生成未剪枝决策树:

①预剪枝

预剪枝决策判断:
                                划分前验证集精度:3/7 > 划分后验证集精度:5/7

划分后精度提高,保留划分;
精度降低或不变,禁止划分。

最终预剪枝决策树

②后剪枝

后剪枝决策判断:
                                剪枝前验证集精度:3/7 < 剪枝后验证集精度:4/7

剪枝后精度提高,进行剪枝;
精度降低或不变,不剪枝。
(奥卡姆剃刀准则(Occam’s Razor):如无必要,勿增实体。Entities should not be multiplied unnecessarily.)

最终后剪枝决策树

总结

二、算法实验

(1)任务

泰坦尼克乘客生存预测。

(2)步骤

①问题描述

泰坦尼克海难是著名的十大灾难之一,究竟多少人遇难,各方统计的结果不一。

数据集:
                train.csv:训练数据集,包含特征信息和存活与否的标签。
                test.csv:测试数据集,只包含特征信息。

训练集字段:

②准备过程

  • 数据探索:

1、了解数据表的基本情况:行数、列数、每列的数据类型、数据完整度

2、了解数据表的统计情况:总数、平均值、标准差、最小值、最大值等

3、查看字符串类型(非数字)的整体情况。

  • 数据清洗:

1、Age、EmbarkedCabin 这三个字段的数据有所缺失。
2、Age 为年龄字段,是数值型,通过平均值进行补齐。
3、
Cabin 为船舱,有大量的缺失值,无法补齐。
4、
Embarked 为登陆港口,有少量的缺失值将其余缺失的 Embarked 数值均设置为 S(一共3个登陆港口,S港人数最多)。

  • 特征选择

1、PassengerId、Name对分类没有作用,放弃。
2、
Cabin 字段缺失值太多,放弃。
3、
Ticket 字段为船票号码,杂乱无章且无规律,放弃。
4、
其余的字段包括:PclassSexAgeSibSpParch Fare,可能会与乘客的生存预测分类有关系。
5、
将特征值中为字符串的转成数值类型。如:sex0,1表示。

  • 生成决策树

1、使用sklearn生成决策树模型并训练。
2、criterion=‘entropy’意为基于信息熵标准建立决策树。

③模型预测及评估

  • 决策树模型

1、由于没有测试集的实际结果,因此无法用测试集的预测结果与实际结果相对比。
2、
使用K折交叉验证的方式,大部分样本进行训练,少量的用于分类器的验证。
3、
运行结果:

  • 总结

1、特征选择是分类模型好坏的关键。选择什么样的特征,以及对应的特征值矩阵,决定了分类模型的好坏。通常情况下,特征值不都是数值类型,可以使用 DictVectorizer 类进行转化。
2、模型准确率需要考虑是否有测试集的实际结果可以做对比,当测试集没有真实结果可以对比时,需要使用 K 折交叉验证

Guess you like

Origin blog.csdn.net/passfive/article/details/122271487