decision tree

什么是decision tree

决策树是一种基于监督的分类问题,主要将问题的条件构造为树的结构,依据判断划分数据集.decision tree 是一个流程图的树结构,其中,每一个内部结点表示一个属性上的测试,每一个分支代表一个属性的输出
决策树的算法就是一个构造树的过程,根据构造出来的树进行预测,他的测试集是必须知道结果的属于监督学习算法。

  • 优点:简单,可以处理不相关的特征数据
  • 缺点:可能会产生过度匹配
  • 适用:数值和标称
决策树通常有三个步骤:特征选择、决策树的生成、决策树的修剪。

在划分的时候,为了要找到决定性的行情,我们必须评估每一个特征,找到具有决定性的特征,并根据这个特征进行数据集的分割。如果数据子集内的数据属于不同的类型,则需要重复进行划分。

算法

创建决策树的过程:

1.获得数据集最后结果的类别集合

classList = [example[-1] for example in dataset]

2.如果获得的结果集中的类别仅仅只有一个比如说都是男,那么直接按照统计结果分类

 if classList.count(classList[0])==len(classList):
        return classList[0]

3.结果集中有男有女,而且一行元素中只有最后一个元素,就按男女的个数谁,占优势来区分。

 if len(dataSet[0])==1:
        return majorityCnt(classList)

,传入为最后一列的类别集
实现majorityCnt统计分类的主要元素,确定结果
用字典来存储对应类别的个数,并排序,输出排序大的字典项的key值
4.选择最优的分类特征标签:

        chooseBestFeatureToSplit(dataSet):传入数据集

将数据集一行的元素长度减一表示特征集个数,因为最后一个为结果
计算原始数据集的熵,计算公式,用熵来表示信息的复杂度,熵越大,信息的复杂度越大

计算熵的方法:

  • 1.获取数据的总条数
numEntries=len(dataSet)  # 数据条数
  • 2.遍历获得每一条数据的最后一个类别,并统计个数,用字典存放,最后套用公式计算
    初始化最好的特征标签位位-1
    依次选取每一个特征标签,通过去除这一列,获得数据集,并计算器其熵值,并计算原始熵与分类后的差值。
    判断差值最大的保存其位置,再次循环遍历完所有的特征值。

5.最优子标签以字典的形式保存,从特征标签列表中删除当前的标签

       myTree={bestFeatLabel:{}} #分类结果以字典形式保存
       del(labels[bestFeat])

6.获得最优特征值的那一列元素

featValues=[example[bestFeat] for example in dataSet]

进行遍历,再获得剩余的子标签列表
去除那个子标签,和分割数据后的子标签,进行迭代即可

    for value in uniqueVals:
        subLabels=labels[:]
        #迭代递归创建
        myTree[bestFeatLabel][value]=createTree(splitDataSet\
                            (dataSet,bestFeat,value),subLabels)

划分数据的最大原则是将无序的数据变的有序。划分数据前后信息发生变化成为信息增益。

你可能感兴趣的:(decision tree)