then{
(4)c=l1自连接l2;//产生候选项集
(5)ifhas_infrequent_subset(c,Lk-1)then
(6)deletec;//根据性质作剪枝操作
(7)elseaddctoCk;
(8)}
(9)returnCk;
//
procedurehas_infrequent_subse(c,Lk-1)
(1)
∕
foreach(k-1)-subsetsofc
(2)ifs∈Lk-1then
(3)returnTrue;
(4)returnfalse;
appriori_gen做两个动作:
连接和剪枝。
在连接部分,Lk-1与Lk-1连接产生可能的候选(1-4步)。
剪枝部分(第5-7步)使用Apriori性质删除具有非频繁子集的候选。
非频繁子集的测试在过程has_infrequent_subse中。
有了频繁项集就可以通过如下的方法得到强关联规则:
●对于每个频繁项集L,产生L的所有非空子集
●对于L的每个非空子集s,如果
support_count(L)/support_count(s)≥min_conf,
则输出规则“s→(L-s)”。
其中min_conf是最小置信度阈值
为了提高Apriori的有效性,后来又出现了基于散列、实物压缩、划分、采样和动态项计数多个改进算法。
然而对于基于Apriori的频集方法,即使进行了优化,一些固有的缺陷还是无法克服。
Apriori的算法及其优化算法可能产生大量的候选集。
当长度为1的频集有10000个的时候,长度为2的候选集就会成指数倍增长,其候选集个数将会超过10。
如果要生成一个很长的规则时,要产生的中间元素也是巨大量的,此可采用FP树算法解决。
2)FP树算法
FP树算法采用了一种FP-growth的方法。
它采用了分而治之的策略:
在对数据库进行第一次扫描后,把找到的频集项压缩进一棵频繁模式树(FP-tree),同时依然保留其中的关联信息。
随后再将FP-tree分化成一些条件库,每个库和一个长度为1的频集相关。
然后再对这些条件库分别进行挖掘。
当原始数据量很大的时候,也可以结合划分的方法,使得一个FP-tree可以放入主存中。
实验表明,FP-growth对不同长度的规则都有很好的适应性,同时在效率上比Apriori算法有很大的提高。
-------------------------------------------------------------------------------
算法:
FP-增长。
使用FP-树,通过模式段增长,挖掘频繁模式。
输入:
事务数据库D;最小支持度阈值min_sup;
输出:
频繁模式的完全集
方法:
(1)按以下步骤构造FP-树:
(a)扫描数据库D一次。
收集频繁项的集合F和它们的支持度。
对F按照支持度降序排序,结果为频繁项表L。
(b)创建FP-树的根节点,以“null”标记。
对于D中每个事务Trans,执行:
选择Trans中的频繁项,并按L中的次序排序。
设排序后的频繁项表为[p|P],其中p是第一个元素,而P是剩下的元素表。
调用insert_tree([p|P],T)。
该过程执行情况如下:
如果T有子女N使得N.item-name=p.item-name,则N的计数增加1;否则创建一个新节点N,将其计数设置为1,链接到它的父节点T,并且通过节点链结构将其链接到具有相同item-name的节点。
如果P非空递归地调用insert_tree(P,N)。
(2)FP-树的挖掘通过调用FP-growth(FP_tree,null)实现。
该过程实现如下:
ProcedureFP_growth(Tree,α)
①ifTree含单个路径Pthen
②for路径P中节点的每个组合(记作β)
③产生模式β∪α,其支持度support=β中节点的最小支持度
④elseforeachαi在Tree的头部{
⑤产生一个模式β=αi∪α,其支持度support=αi.support
⑥构造β的条件模式基,然后构造β的条件FP-树Treeβ
⑦ifTreeβ≠Φthen
⑧调用FP_growth(Treeβ,β);
-------------------------------------------------------------------------------
3)多维关联规则挖掘
它指关联规则涉及两个或两个以上变量。
根据是否允许同一个维重复出现,多维关联规则又可以细分为维间关联规则(不允许维重复出现)和混合维关联规则(允许维在规则的左右同时出现)。
比如“年龄20至30,喜欢郊游一喜欢游泳”就是混合维关联规则。
维间关联规则和混合维关联规则的挖掘还要考虑不同数据字段的类型。
1.2分类算法
近年来,数据挖掘分类已提出了很多算法,按大的方向分类主要有:
决策树、关联规则、贝叶斯、神经网络、规则学习、k-临近法、遗传算法、粗糙集以及模糊逻辑技术等
1)决策树分类算法
决策树是一个类似于流程图的树结构,其中每个内部节点表示在一个属性上的测试,每个分枝代表一个测试输出,而每个树节点代表类或类分布。
树的最顶层节点是根节点。
决策树算法的类型主要有基于决策树归纳、强调在数据挖掘中可伸缩性的决策树算法、决策树归纳属性选择度量比较等。
Ø决策树归纳算法
ID3算法是较早也是最著名的决策树归纳算法。
该算法利用信息论中的互信息(信息增益)寻找数据中具有最大信息增益的属性字段,建立决策树的一个节点,再根据该属性字段的不同取值建立树的分支。
在每个分支子集中重复建立树的下层节点和分支过程。
这种方法的优点是描述简单、分类速度快,特别适合大规模的数据处理。
但ID3算法是借用信息论中的互信息作为单一属性能力的度量,其启发式函数并不是最优的,存在的主要问题有:
①互信息的计算依赖于属性取值的较多特征,而这一属性不一定最优;②ID3是非递增学习算法;③抗噪性差,训练例子中正例和反例较难控制。
对ID3算法的早期改进算法主要是ID3的增量版ID4、ID5及C4.5、CART、FACT和CHAID算法等。
后期的改进算法主要有QUEST和PUBLIC等。
算法:
Generate_decision_tree由给定的训练数据产生一棵判定树
输入:
训练样本samples,由离散值属性表示;候选属性的集合attribute_list
输出:
一个判定树
方法:
(1)创建节点N;
(2)ifsamples都在同一个类Cthen
(3)返回N作为叶结点,以类C标记;
(4)ifattribute_list为空then
(5)返回N作为叶节点,标记为samples中最普通的类;//多数表决
(6)选择attribute_list中具有最高信息增益的属性test_attribute;
(7)标记节点N为test_attribute;
(8)foreachtest_attribute中的已知值ai//划分samples
(9)由节点N长出一个条件为test_attribute=ai的分枝
(10)设si是samples中test_attribute=的样本的集合;//一个划分
(11)ifsi为空then
(12)加上一个树叶,标记为samples中最普通的类;
(13)else加上一个由Generate_decision_tree(si,attribute_list-test_attribute)返回的节点;
-------------------------------------------------------------------------------
Ø强调可伸缩性的决策树算法
以上讨论的算法对于小的数据集是很有效的。
当这些算法用于现实世界中非常大的数据库的挖掘时,有效性和可伸缩性就成了需要关注的问题。
大部分决策树算法都限制训练样本驻留主存,这一限制制约了这些算法的可伸缩性。
为解决这一问题,一些可伸缩性的决策树算法相继推出,如SLIQ、SPRINT、“雨林”和BOAT算法等。
2)贝叶斯分类算法
贝叶斯分类基于贝叶斯定理。
分类算法的比较研究发现,一种称作朴素贝叶斯分类的简单贝叶斯分类算法可以与决策树和神经网络分类算法相媲美。
理论上讲,与其他的分类算法相比,贝叶斯分类具有最小的出错率。
然而由于对其应用的假定的不准确性以及缺乏可用的概率数据,导致实践中并非如此。
贝叶斯分类还可以用来为不直接使用贝叶斯定理的其他分类算法提供理论判定。
-------------------------------------------------------------------------------
朴素贝叶斯分类的工作过程:
(1)每个数据样本用一个n维特征向量X={x1,x2,x3….,xn}表示,分别描述对n个属性A1,A2,A3,…An样本的n个度量。
(2)假定有m个类C1,C2,…,Cm。
给定一个未知的数据样本X(即没有类标号),分类法将预测X属于具有最高后验概率(条件X下)的类。
即是说,朴素贝叶斯分类将未知的样本分配给Ci,当且仅当
p(Ci|X)>p(Cj|X),1≤j≤m,J≠i这样最大化p(Ci|X)。
(3)由于P(X)对于所有类为常数,只需要P(X|Ci)P(Ci)最大即可。
如果类的先验概率未知,则通常假定这些类是等概率的。
并据此对P(Ci|X)最大化。
否则最大化P(X|Ci)P(Ci)。
(4)给定具有许多属性的数据集,计算P(Ci|X)的开销可能非常大。
为降低开销,可以做类条件独立的朴素假定。
给定样本的类标号,假定属性值相互条件独立,即在属性间,不存在依赖关系。
(5)为对未知样本X分类,对每个类Ci,计算P(X|Ci)P(Ci)。
样本X被指派到类Ci,当且仅当P(X|Ci)P(Ci)>P(X|Cj)P(Cj),1≤j≤m,J≠I
换言之,X被指派到其(X|Ci)P(Ci)最大的类Ci
-------------------------------------------------------------------------------
3)神经网络算法
神经网络是大量的简单神经元按一定规则连接构成的网络系统。
它能够模拟人类大脑的结构和功能,采用某种学习算法从训练样本中学习,并将获取的知识存储在网络各单元之间的连接权中。
神经网络主要有前向神经网络、后向神经网络和自组织网络。
在数据挖掘领域,主要采用前向神经网络提取分类规则。
神经网络算法最早在文献[10]中得出,此后又提出许多变形,包括替换的误差函数、网络拓扑的动态调整、学习率和要素参数的动态调整。
近年来,从神经网络中提取规则受到越来越多的关注。
这主要有以下二种倾向:
(1)网络结构分解的规则提取;
(2)由神经网络的非线性映射关系提取规则。
未来神经网络的发展可向进一步降低算法的复杂度、提高所提取规则的可理解性及算法的适用性方向发展。
下面是后向传播算法
算法:
后向传播。
使用后向传播算法的神经网络分类学习
输入:
训练样本sample,学习率l,多层前馈网络network
输出:
一个训练的、对样本分类的神经网络
方法:
(1)初始化network的权和偏置
(2)while终止条件不满足{
(3)forsamples中的每个训练样本X{
(4)//向前传播输入
(5)for隐藏或输出层每个单元j{
(6)Ij=ΣiWijOi+θj;//相对于前一层i,计算单元j的净输入
(7)Oj=1/(1+e-Ij);} //计算每个单元j的输出
(8)//向后传播误差
(9)for输出层每个单元j
(10)Errj=Oj(1–Oj)(Tj-Oj);//计算误差
(11)for由最后一个到第一个隐藏层,对于隐藏层每个单元j
(12)Errj=Oj(1-Oj)ΣErrkWjk;//计算关于下一个较高层k的误差
(13)fornetwork中每个权Wij{
(14)ΔWij=(l)ErrjOj;//权增值
(15)Wij=Wij+ΔWij;}//权更新
(16)fornetwork中每个偏差θj{
(17)Δθj=(l)Errj;//偏差增值
(18)θj=θj+Δθj;}//偏差更新
(19)}}
-------------------------------------------------------------------------------
4)遗传算法
遗传算法是模拟生物进化过程的全局优化方法,将较劣的初始解通过一组遗传算子(繁殖——即选择、交叉——即重组、变异——即突变),在求解空间按一定的随机规则迭代搜索,直到求得问题的最优解。
遗传算法在数据挖掘领域的主要应用有:
(1)用它和BP算法结合训练神经网络,然后从网络提取规则;
(2)分类系统的设计,如编码方式、信任分配函数的设计以及遗传算法的改进等。
遗传算法用于数据挖掘存在的问题是:
(1)算法较复杂,
(2)收敛于局部极小的过早收敛等难题未得到解决。
5)其他
基于案例的推理(Case—BasedReasoning,CBR)分类法是基于要求的。
不像最临近分类法将训练样本作为欧氏空间的点存放,CBR存放的样本或“案例”是复杂的符号描述。
它试图组合临近的训练案例,提出新案例的解。
基于案例的推理可能使用背景知识和问题求解策略,以便提出可行的组合解。
基于案例的推理存在的挑战包括找到一个好的相似度量,开发对训练案例索引的有效技术和组合解的方法。
粗糙集方法用于分类主要发现不准确数据或噪声数据内在的结构联系,它用于离散值属性,也可以用于特征归约和相关分析。
粗糙集已用于许多应用的特征归约和专家系统中。
模糊集方法提供了在高抽象层处理的便利。
一般地,模糊逻辑在基于规则的系统中的使用涉及:
(1)将属性值转换成模糊值;
(2)对于给定的新样本,可以使用多个模糊规则;(3)组合上面得到的和,得到一个系统返回的值。
1.3聚类算法
目前,文献中存在着大量的聚类算法,通常可以分为基于分割的、基于层次的、基于密度的、基于网格的和基于模型的聚类方法五大类。
1)分割的聚类方法
分割聚类算法是将数据集分成若干子集.即给定一个例子的集合x,其中包括n个数据对象,并要生成数目为K的簇。
常用的基于分割的聚类方法有K一均值(K—means)法和K一中心法,CLARA法和CLARANS法等。
ØK-均值法
K-均值法首先由MacQuen提出,它以K为参数,将n个对象分成K个簇,以使簇内具有较高的相似度,而簇间的相似度较低.其相似度的计算根据一个簇中对象的平均值来进行。
此方法能有效地处理簇内密集,但簇间区别明显的数据的聚类,其时间复杂度为o(nkt),(其中t是迭代次数),因此有相对较高的可伸缩性和高效率。
但它只能聚类数值型的数据,且要求用户必须事先确定参数K,也不适合发现非凸面形状的簇或大小差别很大的簇,聚类结果与数据的输入顺序也有明显的关系,对于“噪声”和孤立点数据也是敏感的。
算法:
K-均值。
划分的k-均值算法基于簇中对象的平均值
输入:
簇的数目K和包含n个对象的数据库
输出:
k个簇,使平方误差准则最小
方法:
(1)任意选择k个对象作为初始的簇中心
(2)repeat
(3)根据簇中对象的平均值,将每个对象(重新)赋给最类似的簇;
(4)更新簇的平均值,即计算每个簇中对象的平均值
(5)until不再发生变化
-------------------------------------------------------------------------------
ØK-中心点方法
它的基本策略是:
首先为每个簇随意选择一个代表对象,剩余的对象根据其与代表对象的距离分配给最近的一个簇,然后反复地用非代表对象来替代代表对象,以改进聚类的质量。
这种方法能有效处理小数据集,且也能有效处理“噪声”和孤立点,但其仍要求用户输入参数K,且算法的执行代价比K-均值法高,没有良好的伸缩性。
算法:
k-中心点。
对基于中心点或者中心对象的划分的典型k-中心点算法
输入:
结果簇的数目k,包含n个对象的数据库
输出:
k个簇。
使得所有对象与其最近中心点的相异度总和最小
方法:
(1)随机选择k个对象作为初始的中心点
(2)repeat
(3)指派每个剩余的对象给离它最近的中心点所代表的簇;
(4)随机地选择一个非中心点对象Orandom;
(5)计算用Orandom代替Oj的总代价S;
(6)ifS>0,thenOrandom替换Oj,形成新的k个中心点的集合;
(7)until不再发生变化;
-------------------------------------------------------------------------------
ØClara算法
Clara(ClusteringLargeApplications)算法的主要思想是:
不考虑整个数据集合,选择实际数据的一小部分作为数据的样本,然后用K-中心点法选择中心点。
Clara算法能够处理大量的数据,其每步的迭代时间复杂度为o(ks2+k(n—k)),其中,S是样本的大小,
K是簇的数目,而n是所有对象的总数。
因此其的效率取决于采样的大小。
但运用该方法时,一般不太可能得到最佳的结果。
ØClarans算法
Clarans(ClusteringLargeApplicationsbaseduponRandomizedSearch)算法是一种基于随机搜索的方法,它是在Clara算法的基础上提出来的,它与Clara算法不同的是:
在Clara算法寻找最佳的中心点的过程中,采样是不变的,而Clarans算法在每一次循环过程中所采用的采样都是不一样的。
此方法的优点是一方面改进了Clara的聚类质量,另一方面拓展了数据处理量的伸缩范围。
其有较好地聚类效果,但其计算复杂度仍为O(n2),因此,低效仍是其存在的缺点之一,虽对噪声数据不敏感,但对数据输入顺序敏感,只能聚类凸状或球型边界。
2)层次聚类方法
层次聚类法是把对给定的数据集按层次进行分解,结果是形成一棵以数据子集为节点的类别树。
根据层次分解的方式不同,其又可以分为凝聚的层次方法和分裂的层次方法。
现在比较常用的层次聚类方法有BIRCH法、CURE法等。
ØBIRCH法:
利用层次方法的平衡迭代规约和聚类
BIRCH法是一种综合优化的层次聚类的方法,它的核心是采用了一个三元组的聚类特征树(CF树)汇总了一个簇的有关信息,从而使一个簇的表示可以用对应的聚类特征,而不必用具体的一组点表示,通过构造分支因子B和簇直径阈值T来进行增量和动态聚类。
BIRCH算法的优点是采用了多种聚类技术,对数据库的一次扫描产生一个基本好的聚类,一次或更多的附加扫描能够提高聚类的质量,比较适合于大型数据集。
这个算法的时间复杂度为0(n),这里n为对象的树木。
该算法具有对对象数目的线性伸缩性,及较好的聚类质量。
它的缺点是只适合于类的分布呈凸状或球状情况,并且需要提供正确的聚类数和簇直径T,不适于高维数据。
------------------------------------------------------------------------------
BIRCH的算法的两个阶段:
阶段一:
BIRCH扫描数据库,建立一个初始存放于内存的CF树,它可以被看作数据的多层压缩,试图保留数据内在的聚类结构。
阶段二:
BIRCH采用某个聚类算法对CF树的叶节点进行聚类。
-----------------------------------------------------------------------------
ØCURE法:
利用代表点聚类
CURE法是一种很新颖的层次聚集算法,采用了基于质心和基于代表对象方法之间的中间策略,它选择数据空间中固定数目的具有代表性的点来代表一个簇,并将这些点乘以一个适当的收缩因子,使它们更靠近簇的中心。
它的时间复杂度为0(n)。
其的优点是选择多个代表使得该算法可以适应非球状的几何形状,簇的收缩或凝聚可以有助于控制噪声的影响,同时该方法采用了随机抽样与分割相结合来提高效率,对大型数据库有良好的收缩性。
-------------------------------------------------------------------------------
下面的步骤描述的CURE算法的核心:
(1)从源数据对象中抽取一个随机样本S。
(2)将