第三章 决策树

决策时是经常使用的数据挖掘算法。决策树的主要优势在于数据形式非常容易理解。

决策树其计算复杂度不高,输出结果容易理解,对中间值的缺失不敏感,可以处理不相关特征数据,但是也有可能产生过度匹配的问题。

为了找到决定性的特征,划分出最好的结果,需要评估每个特征,完成测试之后,原始数据集就被划分为几个数据子集。如果划分数据子集的算法和划分原始数据集的方法相同,直到所有具有相同类型的数据均在一个数据子集内。

如果依据某个属性划分数据将会产生4个可能的值,我们将数据划分成四块,并创建四个不同的分支。

划分数据集的大原则是将无序的数据变得更加有序。在划分数据集之前之后信息发生的变化称为信息增益,通常获得信息增益最高的特征就是最好的选择。

熵定义为信息的期望值,对符号的信息定义为:

为了计算熵,需要计算所有类别可能包含的期望值:

其中n是分类的数目。

字典d{}的操作,d.keys()返回键表值,d.has_key(k)是否存在键值。

编写代码实现熵的计算。

熵越高则混合的数据也越多。得到熵之后就可以按照获取最大信息增益的方法划分数据集。

Python语言在函数中传递的是列表的引用,在函数内部对列表对象的修改,将会影响该列表对象的整个生存周期。

从数据集构造决策树算法所需的子功能模块:得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多于两个,因此可能存在大于两个分支的数据集划分。第一次划分之后,数据将被向下传递到树分支的下一个节点,在这个节点上,我们可以再次划分数据。因此我们可以采用递归的原子处理数据集。递归结束的条件是:程序遍历完所有划分数据集的属性,或者每个分支下的所有实例都具有相同的分类。如果所有实例具有相同的分类,则得到一个叶子节点或者终止块。

使用python提供的type()函数可以判断子节点是否为字典类型。如果子节点是字典类型,则该节点也是一个判断节点。

决策树是可以保存的,使用python模块pickle序列化对象,序列化对象可以在磁盘上保存对象,并在需要的时候读取出来。任何对象的可以执行序列化的操作。

猜你喜欢

转载自blog.csdn.net/u012465655/article/details/79375926