什么是decision tree
决策树是一种基于监督的分类问题,主要将问题的条件构造为树的结构,依据判断划分数据集.decision tree 是一个流程图的树结构,其中,每一个内部结点表示一个属性上的测试,每一个分支代表一个属性的输出 决策树的算法就是一个构造树的过程,根据构造出来的树进行预测,他的测试集是必须知道结果的属于监督学习算法。
- 优点:简单,可以处理不相关的特征数据
- 缺点:可能会产生过度匹配
- 适用:数值和标称
决策树通常有三个步骤:特征选择、决策树的生成、决策树的修剪。
在划分的时候,为了要找到决定性的行情,我们必须评估每一个特征,找到具有决定性的特征,并根据这个特征进行数据集的分割。如果数据子集内的数据属于不同的类型,则需要重复进行划分。
算法
创建决策树的过程:
1.获得数据集最后结果的类别集合
代码语言:javascript复制classList = [example[-1] for example in dataset]
2.如果获得的结果集中的类别仅仅只有一个比如说都是男,那么直接按照统计结果分类
代码语言:javascript复制 if classList.count(classList[0])==len(classList):
return classList[0]
3.结果集中有男有女,而且一行元素中只有最后一个元素,就按男女的个数谁,占优势来区分。
代码语言:javascript复制 if len(dataSet[0])==1:
return majorityCnt(classList)
,传入为最后一列的类别集 实现majorityCnt统计分类的主要元素,确定结果 用字典来存储对应类别的个数,并排序,输出排序大的字典项的key值 4.选择最优的分类特征标签:
代码语言:javascript复制 chooseBestFeatureToSplit(dataSet):传入数据集
将数据集一行的元素长度减一表示特征集个数,因为最后一个为结果 计算原始数据集的熵,计算公式,用熵来表示信息的复杂度,熵越大,信息的复杂度越大
计算熵的方法:
- 1.获取数据的总条数
numEntries=len(dataSet) # 数据条数
- 2.遍历获得每一条数据的最后一个类别,并统计个数,用字典存放,最后套用公式计算 初始化最好的特征标签位位-1 依次选取每一个特征标签,通过去除这一列,获得数据集,并计算器其熵值,并计算原始熵与分类后的差值。 判断差值最大的保存其位置,再次循环遍历完所有的特征值。
5.最优子标签以字典的形式保存,从特征标签列表中删除当前的标签
代码语言:javascript复制 myTree={bestFeatLabel:{}} #分类结果以字典形式保存
del(labels[bestFeat])
6.获得最优特征值的那一列元素
代码语言:javascript复制featValues=[example[bestFeat] for example in dataSet]
进行遍历,再获得剩余的子标签列表 去除那个子标签,和分割数据后的子标签,进行迭代即可
代码语言:javascript复制 for value in uniqueVals:
subLabels=labels[:]
#迭代递归创建
myTree[bestFeatLabel][value]=createTree(splitDataSet
(dataSet,bestFeat,value),subLabels)
划分数据的最大原则是将无序的数据变的有序。划分数据前后信息发生变化成为信息增益。