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

分类回归树算法:CART(Classification And Regression Tree)算法采用一种二分递归分割的技术,将当前的样本集分为两个子样本集,使得生成的的每个非叶子节点都有两个分支。因此,CART算法生成的决策树是结构简洁的二叉树。

分类树两个基本思想:第一个是将训练样本进行递归地划分自变量空间进行建树的想法,第二个想法是用验证数据进行剪枝。

CART与C4.5的不同之处是节点在分裂时使用GINI指数。GINI指标主要是度量数据划分或训练数据集D的不纯度为主,系数值的属性作为测试属性,GINI值越小,表明样本的纯净度越高(即该样本只属于同一类的概率越高)。选择该属性产生最小的GINI指标的子集作为它的分裂子集。

算法步骤:

CART_classification(DataSet,
featureList, alpha,):

创建根节点R

如果当前DataSet中的数据的类别相同,则标记R的类别标记为该类

如果决策树高度大于alpha,则不再分解,标记R的类别classify(DataSet)

递归情况:

标记R的类别classify(DataSet)

从featureList中选择属性F(选择Gini(DataSet,F)最小的属性划分,连续属性参考C4.5的离散化过程(以Gini最小作为划分标准))

根据F,将DataSet做二元划分DS_L
和DS_R:

如果DS_L或DS_R为空,则不再分解

如果DS_L和DS_R都不为空,节点

C_L= CART_classification(DS_L,
featureList, alpha);

C_R= CART_classification(DS_R
featureList, alpha)

将节点C_L和C_R添加为R的左右子节点

使用SQL实现核心代码:

rr:while (1=1) do
	set @weather = (select id from weather where class = 0 limit 0,1);
	set @feature =(select parent from finalgini where statetemp=1 limit 0,1);
	if (@weather is null ) then
		leave rr;
	else if(@feature is null) then
		update finalgini set statetemp = state;
	end if;
	end if;
	if (@weather is not null) then
		b:begin
			set current_gini = (select min(gini) from finalgini where statetemp=1);
			set current_class = (select parent from finalgini where gini = current_gini);
			drop table if exists aa;
			create temporary table aa (namee varchar(100));
			insert into aa select class from finalgini where parent=current_class;
			insert into aa select class2 from finalgini where parent=current_class;
			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 as \(select id from ', current_table,' where ',current_class,' regexp \'',@x,'\' and class = 0 \)');
						prepare stmt2 from @b;
						execute stmt2;
						set @count = (select count(distinct play) from bb left join weather on bb.id = weather.id);
						if (@count =1) then
							a1:begin
								update bb left join weather on bb.id=weather.id set class = current_num;
								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 finalgini set statetemp=state;
								end if;
							delete from aa where namee = @x;
							end a1;
							end if;
						if (@count>1) then
								set @id = (select count(id) from bb);
								if(@id = 2) then
									w:begin
									update bb left join weather on bb.id=weather.id set class = current_num where play='yes';
									set current_num = current_num+1;
									update bb left join weather on bb.id=weather.id set class = current_num where play='no';
									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 finalgini set statetemp=state;
									end if;
									delete from aa where namee = @x;
									end w;
									end if;
								if(@id > 2) then
									drop table if exists cc;
									create temporary table cc select * from weather inner join bb using(id);
									set current_table = 'cc';
									leave tt;
								end if;
							end if;
						if(@count=0) then
								delete from aa where namee = @x;
							end if;
				end a0;
				else
					update finalgini set state=0 where parent=current_class;
					leave tt;
				end if;
			end while;
			update finalgini set statetemp=0 where parent=current_class;
	 end b;
end if;
end while;
end |
delimiter ;  

程序中表的解释:

?表2 classgini各属性不同分类集合的gini值

?表3finalgini存放各个属性的最优分类及对应gini值

时间: 2024-12-07 11:08:26

数据挖掘算法学习(六)CART的相关文章

数据挖掘算法学习(三)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的性能胜过其他大多数的学习系统. 一.主要思想 建立一个最优决策超平面,使得该平面两

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

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

数据结构和算法学习六,之非递归排序

http://blog.csdn.net/feixiaoxing/article/details/6844826 在上面一篇博客当中,我们发现普通查找和排序查找的性能差别很大.作为一个100万的数据,如果使用普通的查找方法,那么每一个数据查找平均下来就要几十万次,那么二分法的查找呢,20多次就可以搞定.这中间的差别是非常明显的.既然排序有这么好的效果,那么这篇博客中,我们就对排序算做一个总结. 按照我个人的理解,排序可以分为两种:一种是非递归排序,它主要按照非递归的方法对数据进行排序,也就是说主

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

C4.5分类决策树算法,其核心算法是ID3算法.目前应用在临床决策.生产制造.文档分析.生物信息学.空间数据建模等领域.算法的输入是带类标的数据,输出是树形的决策规则. C4.5比ID3的改进: 1)用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足: 2)在树构造过程中进行剪枝: 3)能够完成对连续属性的离散化处理: 4)能够对不完整数据进行处理. C4.5算法优点:产生的分类规则易于理解,准确率较高. C4.5算法缺点:在构造树的过程中,需要对数据集进行多次的顺序扫

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

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