- 实验目的
1. 掌握信息熵与信息增益相关概念
2. 掌握构建决策树方法(ID3)
3. 掌握极大似然法选择节点
- 实验内容
1. 编写loadDataSet() splitDataSet() 加载处理数据集
2. 编写calcShannonEnt()计算信息熵
3. 编写chooseBestFeatureToSplit() 计算信息增益,并返回最大特征
4. 编写majorityCnt()统计classList中出现次数最多的元素(类标签)
5. 编写createTree()实现ID3算法创建决策树
6. 编写classify()实现分类预测
7. 附加题了
- 实验步骤
- 编写loadDataSet()、splitDataSet() 加载处理数据集
loadDataSet()函数:
(1)利用pandas库加载训练集
解并使用sklearn构建决策树、并完成可视化
(2)提取标签
- 返回数据集和分类属性
splitDataSet()函数:
- 创建空列表,返回数据集
(2)遍历数据集,将选取的特征从中拿出来,删掉,再将后半截数据集添加上去
2. 编写calcShannonEnt()计算信息熵
(1)统计样本数和每个类别的频数
- 利用for循环遍历每一行样本,分别统计每个分类下的次数,便于后面算概率
- 利用信息熵公式,计算信息熵
3. 编写chooseBestFeatureToSplit() 计算信息增益,并返回最大特征
(1)做好数据准备工作,为后续做好准备
- 计算信息增益
- 利用if判断语句,如果该个信息增益大于上一个信息增益,则将该信息增益赋值给最大信息增益,直到找到最大的信息增益。
- 编写majorityCnt()统计classList中出现次数最多的元素(类标签)
(1)遍历列表,统计每个元素出现的次数,再根据字典的值进行降序排列
5. 编写createTree()实现ID3算法创建决策树
(1)取出分类标签,如果类别完全相同,则停止继续划分,遍历完所有特征时返回出现次数最多的类标签
(2)调用choochooseBestFeatureToSplit(),选择最优特征并建立最优特征的标签
(3)根据最优特征的标签生成树,删除已经使用的特征标签,并得到训练集中所有最优特征的属性值
6. 编写classify()实现分类预测
(1)树根代表的属性,所在属性标签的位置,即第几个属性
- 将存储决策结果到result.csv
- 实现main()函数
- 结果result.csv
......
- 附加题了解并使用sklearn构建决策树、并完成可视化
(1)nodeTxt为要显示的文本,centerPt为文本的中心点,箭头所在的点,parentPt为指向文本的点
(2)得到节点叶子
(3)获得决策树的深度
(4)绘制中间文本
(5)定义并获得决策树的叶子结点数以及第一个特征,x坐标为当前树的叶子结点数目除以整个树的叶子结点数再除以2,y为起点。
(6)利用matplotlib库,定制横纵坐标、决策树的高度、宽度,最终显示图像。