数据挖掘算法学习(五)C4.5

C4.5分类决策树算法,其核心算法是ID3算法。目前应用在临床决策、生产制造、文档分析、生物信息学、空间数据建模等领域。算法的输入是带类标的数据,输出是树形的决策规则。

C4.5比ID3的改进:

1)用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;

2)在树构造过程中进行剪枝;

3)能够完成对连续属性的离散化处理;

4)能够对不完整数据进行处理。

C4.5算法优点:产生的分类规则易于理解,准确率较高。

C4.5算法缺点:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。

算法过程:

?C4.5(DataSet,featureList):

–创建根节点R

–如果当前DataSet中的数据都属于同一类,则标记R的类别为该类

–如果当前featureList集合为空,则标记R的类别为当前DataSet中样本最多的类别

–递归情况:

?从featureList中选择属性F(选择GainRatio(DataSet,
F)最大的属性,连续属性参见上面的离散化过程)

?根据F的每一个值v,将DataSet划分为不同的子集DS,对于每一个DS:

–创建节点C

–如果DS为空,节点C标记为DataSet中样本最多的类别

–如果DS不为空,节点C=C4.5(DS,featureList
- F)

–将节点C添加为R的子节点

利用weka将weather数据用c4.5分类构建的决策树如下图:

用SQL算法实现c4.5算法的核心代码:

drop procedure if exists buildtree;
DELIMITER |
create procedure buildtree()
begin
declare le int default 1;
declare letemp int default 1;
declare current_num int default 1;
declare current_class varchar(20);
declare current_gain double;
declare current_table varchar(20) default 'weather';
update infoset set state=1,statetemp=1;
rr:while (1=1) do
	set @weather = (select play from weather where class is null limit 0,1);
	set @feature =(select x from infoset where statetemp=1 limit 0,1);
	if (@weather is null ) then
		leave rr;
	else if(@feature is null) then
		update infoset set statetemp = state;
	end if;
	end if;
	if (@weather is not null) then
		b:begin
			set current_gain = (select max(info_Gain) from infoset where statetemp=1);
			set current_class = (select x from infoset where info_Gain = current_gain);
			drop table if exists aa;
			set @a=concat('create temporary table aa select distinct ',current_class,' as namee from weather where class is null');
			prepare stmt1 from @a;
			execute stmt1;
			tt:while (1=1) do
				set @x = (select namee from aa limit 0,1);
				if (@x is not null) then
					a0:begin
						drop table if exists bb;
						set @b=concat('create temporary table bb select * from ', current_table,' where ',current_class,' = ? and class is null');
						prepare stmt2 from @b;
						execute stmt2 using @x;
						set @count = (select count(distinct play) from bb);
						if (@count =1) then
							a1:begin
								update weather set class = current_num,levelnum = letemp where id in (select id from bb);
								set current_num = current_num+1;
								if (current_table ='cc') then
									delete from cc where id in (select id from bb);
								end if;
								set @f=(select play from cc limit 0,1);
								if (@f is null) then
									set current_table='weather';
									update infoset set statetemp=state;
									set letemp =le;
								end if;
							delete from aa where namee = @x;
							end a1;
							end if;
						if (@count>1) then
								drop table if exists cc;
								create temporary table cc select * from bb;
								set current_table = 'cc';
								set letemp = letemp+1;
								leave tt;
							end if;
						if(@count=0) then
								delete from aa where namee = @x;
								set le = le+1;
							end if;
				end a0;
				else
					update infoset set state=0 where x=current_class;
					leave tt;
				end if;
			end while;
			update infoset set statetemp=0 where x=current_class;
	 end b;
end if;
end while;
end |
delimiter ;

运行后分类结果如下图所示:

其中,class属性记录分类结果,levelnum属性记录各个数据在决策树中的层数。

对程序中各个表的解释:

?表1 weather
增加levelnum属性列,用于存放每条记录在生成的分类树中的层数。

?表2 C45_temp
用于存放中间结果。其中属性列logv和parent,分别用于存储各属性分量的中间计算结果和所属类别。

?表3 infoset用于存放各个属性的信息增益率。属性列state和statetemp用于在计算过程中做标记。

时间: 2024-10-07 00:51:17

数据挖掘算法学习(五)C4.5的相关文章

数据挖掘算法学习(三)NaiveBayes算法

算法简单介绍 NBC是应用最广的分类算法之中的一个.朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率.同一时候,NBC模型所需预计的參数非常少,对缺失数据不太敏感,算法也比較简单. 算法如果 给定目标值时属性之间互相条件独立. 算法输入 训练数据   T={(x1,y1),(x2,y2),--,(xn,yn)} 待分类数据x0=(x0(1),x0(2),--,x0(n))T 算法输出 待分类数据x0的分类结果y0∈{c1,c2,--,ck} 算法思想 weka执行 以we

数据挖掘算法学习(一)K-Means算法

博主最近实习开始接触数据挖掘,将学习笔记分享给大家.目前用的软件是weka,下篇文章会着重讲解. 算法简介: K-Means算法是输入聚类个数k,以及包含n个数据对象的数据库,输出满足方差最小标准的k个聚类.并使得所获得的聚类满足:同一聚类中的对象相似度较高:而不同聚类对象相似度较小. 算法假设: 均方误差是计算群组分散度的最佳参数. 算法输入: 聚类个数k:包含n个数据对象的数据集. 算法输出: k个聚类 算法思想: (a)绿点表示数据集在二级的欧几里德空间,初始化的中心点u1和u2用红的和蓝

数据挖掘算法学习(四)PCA算法

算法简介 主成分分析(PrincipalComponentAnalysis,简称PCA)是一种常用的基于变量协方差矩阵对信息进行处理.压缩和抽提的有效方法.主要用于对特征进行降维. 算法假设 数据的概率分布满足高斯分布或是指数型的概率分布.方差高的向量视为主元. 算法输入 包含n条记录的数据集 算法输出 降维或压缩后的数据集 算法思想 ?1.计算所有样本的均值m和协方差矩阵S: ?2.计算S的特征值,并由大到小排序: ?3.选择前n'个特征值对应的特征矢量作成一个变换矩阵E=[e1,e2, -,

数据挖掘算法学习(八)Adaboost

本文不定期更新.原创文章,转载请注明出处,谢谢. Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器).Adaboost算法本身是通过改变数据分布来实现的,它根据每次训练集之中每个样本的分类是否正确,以及上次的总体分类的准确率,来确定每个样本的权值.将修改过权值的新数据集送给下层分类器进行训练,最后将每次得到的分类器最后融合起来,作为最后的决策分类器. 算法概述 1.先通过对N个训练样本的学习得

数据挖掘算法学习(七)SVM

SVM,支持向量机.数据挖掘中的一个经典算法,博主学了挺久,把学到的一些东西跟大家分享一下. 支持向量机(SVM,Support Vector Machine)是在高维特征空间使用线性函数假设空间的学习系统,它由一个来自最优化理论的学习算法训练,该算法实现了一个由统计学习理论到处的学习偏置.此学习策略由Vapnik和他的合作者提出,是一个准则性的 并且强有力的方法.在它提出来的若干年来,在范围广大的应用中,SVM的性能胜过其他大多数的学习系统. 一.主要思想 建立一个最优决策超平面,使得该平面两

数据挖掘算法学习(六)CART

分类回归树算法:CART(Classification And Regression Tree)算法采用一种二分递归分割的技术,将当前的样本集分为两个子样本集,使得生成的的每个非叶子节点都有两个分支.因此,CART算法生成的决策树是结构简洁的二叉树. 分类树两个基本思想:第一个是将训练样本进行递归地划分自变量空间进行建树的想法,第二个想法是用验证数据进行剪枝. CART与C4.5的不同之处是节点在分裂时使用GINI指数.GINI指标主要是度量数据划分或训练数据集D的不纯度为主,系数值的属性作为测

数据挖掘算法学习(九)EM算法-上篇-多元高斯分布

------------------------------------------------------------------------------------ 欢迎转载,请附上链接 http://blog.csdn.net/iemyxie/article/details/42560125 ----------------------------------------------------------------------------------- EM算法大致分为两步--E步骤和

数据结构和算法学习五,之查找

http://blog.csdn.net/feixiaoxing/article/details/6844723 无论是数据库,还是普通的ERP系统,查找功能数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数组中没有重复的数据存在. (1) 普通的数据查找 设想有一个1M的数据,我们如何在里面找到我们想要的那个数据.此时数据本身没有特征,所以我们需要的那个数据可能出现在数组的各个位置,可能在

18大经典数据挖掘算法小结

18大经典数据挖掘算法小结 本文所有涉及到的数据挖掘代码的都放在了我的github上了. 地址链接: https://github.com/linyiqun/DataMiningAlgorithm 大概花了将近2个月的时间,自己把18大数据挖掘的经典算法进行了学习并且进行了代码实现,涉及到了决策分类,聚类,链接挖掘,关联挖掘,模式挖掘等等方面.也算是对数据挖掘领域的小小入门了吧.下面就做个小小的总结,后面都是我自己相应算法的博文链接,希望能够帮助大家学习. 1.C4.5算法.C4.5算法与ID3