[题外话]近期申请了一个微信公众号:平凡程式人生。有兴趣的朋友可以关注,那里将会涉及更多机器学习、OpenCL+OpenCV以及图像处理方面的文章。
2、决策树算法的实现
2.1 决策树的创建
获得训练样本和特征集后,如何创建一颗决策树呢?
可以按照下面的流程处理:
1、 创建模块DecisionTree及其存储文件DecisionTree.py;
2、 获取训练样本所有的分类信息,判断是否所有的分类信息都相同,即所有训练样本都属于同一个类别。如果是,则返回该类型,终止决策树建立;否则执行第二步。
3、 如果当前训练样本中只剩下分类信息了,即叶子结点,则调用函数majorityCnt()返回样本集中数量最多的分类信息。此时终止当前树的处理。
4、 调用函数chooseBestFeatureToSplit()在当前训练样本中选择信息增益最大的特征。
5、 从当前训练样本中获取最佳特征对应的所有特征信息,依次循环:调用函数splitDataSet()将训练样本中与当前特征值一样的样本选出来,产生信息的样本集。然后,递归调用函数createTree()使用新样本集与除去最佳特征的特征集产生新的子树。
6、 依次返回当前构造的决策子树,最终创建整棵决策树。
具体的实现代码如下:
#dataSet为所有训练样本
#labels为训练样本所有特征对应的分类信息
#产生dataSet所对应的树结构信息,以字典形式存储并返回
def createTree(dataSet, labels):
#获取训练样本dataSet中所有的分类标签信息,存储在列表变量classList中
classList = [example[-1] for example in dataSet]
#classList[0]表示第一个分类信