决策树思路:
创建树:
获取所有样本的标签列表
如果 标签列表为同一个值:
停止划分
如果 特征选择完毕:
返回类别最多的标签,停止划分
选择最好的特征进行数据样本的分割,并且返回该特征的索引值:就是第几个特征-----------(1)
获取到最好特征的特征名字
创建以该名字为节点的树字典
在特征名称列表中将这个特征删除
获取最好特征在整体样本中的取值并且去重
遍历所有取值:
获取剩余特征名字
创建以每个值划分的数据集的树-------(2)
(1)选择最好特征并且返回特征索引:
获取数据集的特征的数量
计算整个数据集的信息熵 // H(D)
初始化信息增益和最好特征索引
遍历所有特征:
该特征在数据集上所有取值并去重
初始化新的信息熵
遍历该特征在数据集上的取值: // 选取该特征所取最好的值(按照此值进行切分的信息增益最大)进行数据的划分
给定特征以及该值进行数据划分 ----------(2)
计算在给定特征条件下的信息熵----(3) // H(D|A) = (数据切分后的个数 / 总的数据集的个数)* 数据切分后的信息熵
计算信息增益
如果 用该值分割数据的信息增益大于上一个值分割数据的信息增益:
更新信息增益
更新最好特征索引
返回最好特征索引
(2)按照给定值以及特征索引进行数据的切分
生成一个切分后的数据list
遍历所有样本:
如果 该样本[特征索引] == 给定值
获取该索引前面的值
拼接上该索引后面的值,不包含该索引的值
将分割后的数据添加到切分后的数据list
返回切分后的数据
(3)计算信息熵:
获取该样本的数量
初始化一个字典,用来统计
遍历所有样本:
获取到该样本向量的最后面值
如果 该值不在字典的key中:
添加进去,并把值赋为0
将字典中的key等于该值的值+1
初始化信息熵
遍历字典的key:
获取当前key的概率(数量/总量)
计算信息熵
返回信息熵