本周学习内容:
- 阅读《研究生要具备什么能力》
- 学习了解决策树算法,并编程实现基于信息熵、基尼指数进行划分选择的决策数算法。
1,《研究生要具备什么能力》
作者通过自身在不同学习阶段的经历来阐述了各个阶段的特点,点明了研究生需要具备的学习能力有哪些,包括读文献、查资料、自己补充不住、纠正错误以及理解重点。随后讲述了研究生导师的作用,更多的一个榜样作用,作为学生更多的是学习导师做研究、写论文和思考问题的方法等方面,其主要贡献是在眼界、经验和对前沿的了解以及学术研究的传承等学生缺乏的方面。
通过阅读该文章,初步了解了作为研究生应该具有的能力,以及在这三年的研究生学习生活中学习的方向。自我本身能力的一种提升不仅在于提升代码知识的方面,更多的是思维能力的提升。也更加清楚的明白,大学本科与研究生的不同,研究生所需要的是更加强大的自我驱动能力。
2,决策树
2.1 决策树定义
决策树是基于树结构来进行决策,一颗决策树一般包括一个根节点、多个内部节点和叶节点。其中叶节点对应于决策的结果,每个内部节点对应于一个属性测试,每个界点包含的样本集合根据属性测试的结果划分到子节点中,根节点为所有样本集合。
2.2 决策树的划分
一般可以通过信息增益、增益率、基尼指数等准则用于决策树的划分选择。
2.2.1 信息增益
ID3算法就是使用该准则来选择划分属性,假定当前样本集合D中k类样本所占比例为Pk(k=1,2,3,,,,|y|),则D的信息熵为:
Ent(D)=k=1|y|Pk log2pk
Ent(D)值越小,表示其纯度越高。
假定离散属性a有V个可能的取值{a1,a2,……,av},使用a来对样本D进行划分,其中第v个节点包括了D中所有样本属性a上取值为av的样本,记为Dv,Gain(D,a)即为用属性a对样本集进行划分所获得的信息增益。消息增益越大,即用a来划分获得的纯度提升越大。
GainD,a=EntD-v=1V|Dv||D|EntDv
2.2.2增益率
信息增益准则对可取值数目较多的属性有所偏好,为了减少该偏好带来的不利影响,有算法会在消息增益的基础上使用增益率来选择划分。增益率的定义为:
Gain_ratio(D,a)=Gain(D,a)IV(a)
其中IVa=-v=1V|Dv||D|log2|Dv||D|表示为a的固有值,当该属性取值越多,IV(a)也会越大。但值得注意的是该准则对可取数目较少的属性有所偏好,因此一般都会与消息增益进行结合来划分。
2.2.3 基尼指数
数据集D的纯度可用基尼指数来度量:
GiniD=k=1yk'≠kPk Pk'=1-k=1|y|Pk2
Gini(D)越小,则数据集D的纯度越高,属性a的基尼指数为:
Gain_indexD,a=v=1V|Dv||D|GiniDv
2.3 剪枝处理
为了防止决策树的过拟合,可以通过主动去剪掉一些分支来降低过拟合的风险。一般包括“预剪枝”和“后剪枝”。
预剪枝指在决策树生成过程中,在节点划分前进行估计,若该节点的划分不能带来决策树的泛化性能得提升,则停止划分并标记其为叶子节点。该方法不仅降低了过拟合得风险,还显著减少了决策树得训练时间开销和测试时间开销,但存在欠拟合的风险。
后剪枝是在已经生成的决策树中,自下向上对非叶节点进行考察,若将该节点对应的子树替换为叶节点能提高决策树的泛化性能,则将该子树替换为叶节点。易知该方法会比预剪枝保留更多的分支,欠拟合风险较小,但训练时间开销会大得多。
2.4编程实现基于信息熵进行划分的决策树算法
在这里使用西瓜数据集2.0
生成决策树伪代码如下:
根据伪代码构造决策树的代码如下:
其中用于计算信息熵的代码如下图所示:
其他部分函数就不一一展示,最终运行结果如下图所示(由于这里还未实现可视化,只是将决策树的结构打印出来。):
下周计划:
- 继续学习预剪枝、后剪枝部分的处理以及结果可视化展示
- 学习神经网络算法相关内容