数据挖掘算法之C4.5算法
C4.5算法是一种决策树,在ID3基础上实现,解决分类问题,属于监督学习,目标是根据已知的样本——每个样本具有多个不同的属性,属于某一类别,判断给出的元组的类别标签。
决策树的非叶节点为属性,分支代表属性值,叶节点为类别标签。
问题的关键在于如何确定节点——分裂点
我们的类别预测是由不确定逐步到确定,分裂点应该是对预测结果确定性影响最大的属性,称为样本最优属性。
信息熵:消除不确定性所需信息量的度量,信息熵越大表明事物随机性越强。
类别信息熵:所有样本中的各种类别出现的不确定性之和,计算方法为
pi为各类别占总样本数的比例
属性信息熵info:在某一属性(条件)确定的条件下,各类别出现的不确定性之和,相当于剔除了一个不确定性因素,其他剩余属性的不确定性之和,计算方法为属性值占样本总数的比例×该属性值对应的信息熵
信息增益Gain:类别信息熵 - 属性信息熵,表示该属性对信息不确定性的减少程度,信息增益越大,说明该属性对预测结果确定性贡献越大,选择该属性能帮助我们更好更快的完成分类预测。
ID3利用信息增益来选择分裂点,但是假如每个属性每个类别仅有一个样本,信息熵为0,那么信息增益就无法实现有效区分分裂点。因此C4.5进行改进,引进属性分裂信息度量和信息增益率的概念,利用信息增益率来判断。
属性分裂信息度量H:计算属性熵,即各属性值占样本总比例qi×log2(qi)之和,表示属性本身的不确定性程度,属性熵越大,属性本身的不确定性越大。
信息增益率IGR:IGR=Gain/H,表示属性本身的不确定性越大,对最终结果的不确定性减少就越小,消除了属性本身不确定性对预测结果的影响。
明确判断分裂点的依据后,接下来是阐述算法思想及过程
1、选择IGR最大的属性作为根节点
2、判断分枝后类别标签是否一致,若一致,则执行3,不一致则执行4
3、将相应的类别标签作为该分枝的叶节点输出
4、继续选择剩余的IGR最大的属性作为分裂点
5、重复2,直到所有分支都生成叶节点,结束
剪枝
在决策树创建时,不可避免的会存在不具有代表性的特例样本数据,剪枝就是为了减少这类数据对最终预测结果的影响,解决过拟合问题。剪枝的方法为统计度量,分为先剪枝和后剪枝。
先剪枝:提前停止树的构造,即确定终止条件。如决策树的高度,错误率高于某值等
后剪枝:在决策树构造完成之后根据频繁项集对子树进行合并。
C4.5采用悲观剪枝法不需要新的数据,通过计算机实现时,表现为函数中的一个参数。
实例:利用R语言通过C4.5算法完成下列预测
第一步:导入excel数据
所用的包:CARN ——Packages xlsx #只能读取xlsx格式的文件
install.package(xlsx) #下载相关包
library(xlsx) #导入相关包
Ex2<-read.xlsx(file="E:Ex2_DecisionTree_Sampledata.xlsx",1) #读Excel文件,注意file为文件路径,与其他编程语言不同,不需要分号,1为文件中第1个sheet表
导出结果如图
第二步:数据预处理
特别注意数据预处理的顺序,这里23之间顺序可以调换,但是4一定要放在最后,否则在执行第四步时会出现变量名称不一致的问题。
1、去掉预测数据行
Ex2 <- Ex2[-22,]
2、将各属性值替换成数值型数据
原因是在创建分类树的过程中,J48函数不支持string类型的数据
Ex2