数据挖掘算法研究论文

2025-03-16 版权声明 我要投稿

数据挖掘算法研究论文

数据挖掘算法研究论文 篇1

由三维离散数据生成四面体格网算法研究

在资源、环境、工程勘探等领域中,由三维离散数据生成四面体格网,对三维空间的判断分析,并得出一些未知的三维空间体的分布信息具有重要意义.在分析三角网生成算法的基础上,给出了3个建立四面体格网的算法思想及步骤:(1)四面体格网生成算法.在数据场中先构成第1个四面体,然后以四面体的`某个面向外扩展生成新的四面体,直至全部离散点均已连成网为止.(2)逐次插入算法.将未处理的点加入到已经存在的四面体格网中,每次插入一个点,然后将四面体格网进行优化.(3)分治算法.首先将数据排序,然后递归地分割数据点集,直至子集中只包含4个点而形成四面体,然后自下而上地逐级合并生成最终的四面体格网.

作 者:郭际元 龚君芳  作者单位:中国地质大学信息工程学院,湖北武汉,430074 刊 名:地球科学-中国地质大学学报  ISTIC EI PKU英文刊名:EARTH SCIENCE-JOURNAL OF CHINA UNIVERSITY OF GEOSCIENCES 年,卷(期):2002 27(3) 分类号:P208 关键词:三维离散数据   四面体格网   算法   三维空间体  

数据挖掘算法研究论文 篇2

1 关联规则挖掘算法

关联规则是通过用户给定支持度和置信度来寻找规则的过程[1]。基本思想包含2个过程:

(1)发现最大频繁项目集。通过用户给定的支持度,寻找数据集中支持度大于或等于给定支持度的所有项目集,即频繁项目集,再从频繁项目集中选出所有不被其他项目包含的频繁项目集,即最大频繁项目集。

(2)生成关联规则。通过用户给定的置信度,在发现最大频繁的项目集中生成置信度大于或等于给定置信度的关联规则。

思想中支持度是数据集D中包含项目集i1的事务在数据集D上的百分比,公式如下:

式中:t是数据集D上的一个事务。置信度是指包含i1和i2的事务数与包含i1的事务数的支持度比值,公式如下:

2 分类算法

分类是根据数据集的特点构造一个分类器,利用该分类器将数据集中的数据映射到给定类别中某一类的过程。主要分类算法有k-最邻近算法、决策树分类算法和贝叶斯分类算法。

2.1 k-最邻近算法

k-最邻近算法(kNN)是一种基于距离的分类算法,距离越近,相似性越大,距离越远,相似性越小[2]。算法的基本思想是为:计算每个分类样本到待分类元组的距离,即计算相似度,选取与待分类数据相似度最大的k个数据,将待分类元组划分到这k个数据分类属性最集中的类别中。

2.2 决策树算法

决策树算法采用自上而下的方法递归构造决策树,分两个步骤:决策树生成和决策树剪枝。典型的决策树算法有ID3算法、C4.5算法等[3]。

2.2.1 决策树生成算法

决策树生成算法采用信息增益来选择能使样本最好分类的属性,信息增益的计算如下:

有n个消息,概率分布为p=(p1,p2,…,pn),则该样本S的期望信息为:

对于给定的样本si∈S,其样本总数为Si,根据类别属性值将si划分为m个子集,每个子集中所包含的样本数分别为sij(1≤j≤m),其概率分布为p=(Si1/Si,Si2/Si,…,Sim/Si)。根据公式得样本si的期望信息为I(si)=I(p)。

样本集S的熵为:

样本S的信息增益为:

算法的基本思想:

(1)以代表训练样本的单个结点开始建树。

(2)如果样本S都属于同一个分类,则将该结点作为叶子结点。

(3)否则,利用公式计算各个属性的信息增益,比较计算所得的信息增益值,选取信息增益最大的属性作为根结点。

(4)递归划分选取的根结点,直到下面3个条件之一满足时结束:给定结点的所有样本属于同一分类;没有多余的属性可以用来进一步划分样本,此时采用多数表决法来创建叶节点;分支属性样本为空。

2.2.2 决策树剪枝算法

理想的决策树分为3种:叶结点数最少;叶子结点深度最小;叶结点数最少,且叶子结点的深度最小[4]。在决策树生成算法中没有考虑噪声等影响的因素,因此可能出现过度拟合现象,使分类预测性能降低,导致生成的决策树不尽理想。为了避免过度拟合,提出了决策树剪枝算法,该方法有预先剪枝和后剪枝2种。预先剪枝指在生成决策树的同时,决定是继续划分还是停止划分。预先剪枝的最大缺点是可能使树的生长过早停止,导致生成的决策树不完整,因此应用较少。后剪枝是一种先拟合后化简的方法,首先采用决策树生成算法对训练样本生成决策树,然后从树的叶子结点开始逐步向根的方向进行剪枝,具体的剪枝算法在本文不予以讨论。

2.3 贝叶斯分类

贝叶斯分类以贝叶斯定理为基础[5],贝叶斯定理是:H为某种假定,P(H)为先验概率,P(X|H)为H成立条件下X的概率,则后验概率P(H|X)为:

贝叶斯分类的原理是通过某对象的先验概率,利用贝叶斯定理计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。

算法的基本思想:

(1)根据训练样本计算分类属性的先验概率P(ci)。

(2)计算待分类数据每个非分类属性的条件概率P(x|ci)。

(3)由于各非分类属性可视为条件独立,故。

(4)利用式(6)计算ci的后验概率。

因为P(x)和P(ci)是常数,所以P(x|ci)最大,则后验概率最大,故将待分类数据划分到P(x|ci)最大的ci所在类别中。

3 聚类方法

聚类就是将数据对象分成多个簇,簇内有较高的相似性,而簇间差异很大。典型的聚类分析方法有划分方法和层次方法。

3.1 划分方法

划分方法依据数据点在几何空间的距离来判断个体间的相似度,距离越近就越相似,就越容易划分为一类。划分的原则是在同一个簇中的对象间有较高的相似性,而不同簇间差异很大。

3.1.1 k-平均算法

k-平均算法(k-means)是一种以簇内对象的均值为中心点的划分方法[6]。算法用欧氏距离来表示点到簇的距离:

算法的准则函数定义为:

算法基本思想:

(1)随机地选取k个对象,每个对象代表一个簇的初始中心。

(2)根据式(7)计算剩余对象到中心点的欧氏距离,将每个对象赋给与其欧氏距离最小的簇,即最相似的簇。

(3)重新选取每个簇的中心点,即重新计算簇内各点的平均值。

(4)计算平方误差和E,循环(1),(2),(3)直到准则函数E变化不明显为止。

3.1.2 PAM算法

PAM算法是一种以簇中位置最中心的对象为中心点的划分方法[7]。中心点被称为代表对象,其他对象被称为非代表对象。算法基本思想:

(1)随机地选取k个对象,每个对象代表一个簇的初始中心点。

(2)根据中心点计算每个非中心点y到中心点x的绝对距离|y-x|,将每个对象赋给与其绝对距离最小的簇,即最相似的簇。

(3)选择一个未被选过的中心点oi及oi所在簇中的一个未被选过的非中心点oh,计算oh代替oi的总代价Tcih,并记录在S中。

(4)如果S中有小于0的记录,则找出S最小,记录的非中心点,并用该非中心点代替被选择的中心点,重新组建k个划分的簇。

(5)如果S中所有的记录都大于等于0,则不再划分新的簇。

总代价为:。其中n为所有节点数;cjhi表示oj在oi被oh代替后所产生的代价。每一个oi被oh代替后,对于非中心点oj,有四种情况需要考虑(如图1~图4所示)。

(1)oj当前在oi所在簇内,但oh代替oi后,oj被划分到了中心点om所在的簇。此时。

(2)oj当前在oi所在簇内,但oh代替oi后,oj被重新划分到了中心点oh所在簇,此时cjhi=d(j,h)-d(j,i)。

(3)oj当前在中心点om所在簇内,但oh代替oi后,oj被重新划分到了中心点oh所在簇,此时cjhi=d(j,h)-d(j,m)。

(4)oj当前在中心点om所在簇内,但oh代替oi后,oj仍在中心点om所在簇,此时cjhi=0。

图中实线为oh代替oi前oj的所属关系,虚线为代替后oj的所属关系。

3.2 层次方法

层次方法是根据某种给定的条件对数据集进行层次的分解,有凝聚和分裂2种方式[8]。

凝聚采用自底向上的策略,先将每个对象作为独立的簇,然后合并各个簇,满足用户指定的终止条件时停止。凝聚方法有AGNES算法等。

分裂采用自顶向下的分类策略,先将所有对象作为一个簇,然后将该簇细分为越来越小的簇,满足用户指定的终止条件时停止。分裂方法有DIANA算法等。

3.2.1 AGNES算法

AGNES算法采用对象间的欧氏距离作为评价2个簇间距离的标准[9]。算法基本思想:

(1)将每个对象作为独立的初始簇。

(2)将欧氏距离最小的2个对象所在簇进行合并,组成一个新的簇。

(3)达到用户指定的簇的数目时终止。

3.2.2 DIANA算法

DIANA算法以簇的直径和平均相异度为划分层次的标准[10]。其中,簇的直径是指簇中任意两对象间的最大欧氏距离,平均相异度指平均距离:

式中:ni是Cj中包含属性的个数;nj是Cj中包含属性的个数。算法基本思想:

(1)将所有对象作为一个整体划分到同一个簇。

(2)在所有簇中挑选出簇直径最大的簇,并在该簇中选取一个与其他点平均相异度最大的点作为一个新簇,然后选取原簇中到新簇距离小于等于到原簇距离的点放入新簇中。

(3)循环(2)直到满足用户指定簇的数目为止。

4 几种算法的比较

关联规则方法主要用于对事物数据库进行数据挖掘,在商业领域使用得相对频繁一些。分类和聚类方法则用于对关系数据库进行数据挖掘,通过分析有属性描述的数据库元组来构造模型。

在实际应用过程中,不同方法有不同的优点和缺点。下面对本文提出几种算法的时间复杂度、使用范围、依赖条件、误差估计进行比较,如表1所示。

从表1可以看出,不同算法在不同应用上有各自的优缺点。如kNN算法时间复杂度最小,然而仅限于小数据集,对于数据集较大的情况,则可选用决策树和贝叶斯分类;k-平均算法对簇密集型数据有很高的效率。在实际应用中可以根据需要将几种算法结合,以达到更高的效率。

5 结 语

数据挖掘使信息处理技术从简单的数据存储转入更为高级的知识发现阶段,它正以一种全新的理念改变着人类信息管理方式。本文分析了3种数据挖掘算法的基本思想,并对不同算法进行了比较,指出了各算法的优缺点及使用范围,并展望了各算法对不同特征数据集的应用前景。

参考文献

[1]毕建新,张岐山.关联规则挖掘算法综述[J].中国工程科学,2005(15):77-79.

[2]潘丽芳,杨炳儒.基于簇的k最邻近(kNN)分类算法研究[J].计算机工程与设计,2009,30(18):52-54.

[3]刘佳,王新伟.一种改进的C4.5算法及实验分析[J].计算机应用与软件,2008,25(12):51-53.

[4]魏红宁.决策树剪枝方法比较[J].西南交通大学学报,2005(1):36-39.

[5]王国才.朴素贝叶斯分类器的研究与应用[D].重庆:重庆交通大学,2010.

[6]金薇,陈慧萍.基于分层聚类的k-means算法[J].河海大学常州分校学报,2007,21(1):25-27.

[7]TAN Pang-ning,STEINBACH M,KUMAR V.Introduc-tionto Data Mining[M].[S.l.]:Posts&TelecomPress,2006.

[8]刘坤朋.数据挖掘中聚类算法的研究[D].长沙:长沙理工大学,2010.

[9]刘畅,戴勃.基于AGNES算法的网格资源分析[J].辽宁工业大学学报,2009,29(1):62-63.

数据挖掘算法研究论文 篇3

关键词:数据挖掘;聚类分析;模型

中图分类号:TP311.13文献标识码:A文章编号:1007-9599 (2013) 06-0000-02

聚类是一个将给定数据集划分为多个类的过程,并且同一个聚类中数据对象的相似度较高,不同聚类间的数据对象的具有较低相似度。通常使用距离来表征对象间的相似度。聚类分析在众多领域都有广泛地研究和应用。

1聚类分析的典型应用

聚类分析就是从给定的数据集中探索数据对象间潜在的有价值的关联,研究人员使用此关联对所得聚类中的数据对象进行统一地分析处理。使用聚类分析作用于数据集,能识别出数据集的稀疏和稠密区域,进一步发现其整体分布模式,以及数据属性之间有价值的相关性。在商业领域,聚类分析可以帮助营销部门划分目标客户群体,根据其不同的特征和消费心理制定适宜的营销策略,以提升营销效益;在生物学领域,聚类分析可用于划分动植物的层次结构,根据基因功能进行分类以对人类基因构造有更深入的了解;在经济领域,聚类分析可用于对不同地区经济发展能力进行总体评价,以及同一地区不同城市间经济发展能力的划分。聚类分析还可以用于挖掘网页信息中潜在的有价值的信息。在数据挖掘应用领域,聚类分析既可以作为独立的工具使用,对数据对象进行合理划分,也可以作为其他数据挖掘算法的预处理步骤。

2数据挖掘中对聚类分析的典型要求

(1)可扩展性。聚类分析算法对大、小数据集都要行之有效。

(2)处理不同类型属性的能力。聚类分析算法要兼容不同类型数据。

(3)发现任意形状的聚类。聚类分析算法不仅可以发现具有类似大小和密度的圆形或球状聚类,还可以发现具有任意形状类集。

(4)减少用户输入参数量。用户输入参数具有较强主观性,对聚类质量有不可忽视的影响,应尽量减少用户输入参数量,不仅可以改善聚类质量,还可以减轻用户负担。

(5)对噪声数据的处理能力。实际应用要求聚类分析算法对数据集中的噪声数据要有一定的处理能力,使处理对象中质量差的数据尽可能少。

(6)降低对输入数据顺序的敏感成都。衡量聚类算法优劣的一个重要指标是对输入数据顺序敏感程度的高低,要求聚类算法对其敏感程度要尽可能低。

(7)高维问题。聚类分析算法在处理低维数据和高维数据时都表现良好。

(8)基于约束的聚类。聚类分析算法在特定约束条件下具有较好的聚类质量。

(9)可解释性和可用性。聚类分析应与特定的解释和应用目标相联系。

3主要聚类方法分析

实际应用因其数据类型、目的以及要求的不同,对聚类方法的需求也不同,因此根据具体应用选择适宜的聚类方法显得尤为重要。使用多种聚类算法作用于同一数据集,可分析出数据集潜在的有价值的描述性特征,为进一步的探索奠定数据基础。典型的聚类算法包括:划分方法、层次方法、基于密度方法以及基于网格方法。

3.1划分方法

给定一个数据集(包含n个数据对象),划分方法将数据集划分为k个聚类,每个聚类应符合以下条件:(1)每个聚类至少包含一个数据对象;(2)每个数据对象只属于某一个聚类,但在一些模糊划分方法中可以适当放宽对后一个要求的限度。所形成的聚类成为最优化的客观划分,从而使得同一聚类中对象距离尽可能地小,不同聚类间对象距离尽可能地大。聚类相似度的高低通常作为衡量划分方法质量高低的标准,好的划分方法使得同一聚类中数据对象相似度较高,而不同聚类间的相似度低。最常用的划分方法有k-means算法和k-medoids算法。

划分方法一般要求被处理的数据集一次性装入内存,限制了它在大数据集上的应用。划分方法要求用户给定划分个数,导致主观判断因素对聚类质量的影响。划分方法只使用某一固定规则来聚类,使得聚类形状不规则,聚类结果准确率不高。

3.2层次方法

层次方法的输出是给定数据对象组成的一棵聚类树。层次方法分为自上而下和自下而上的方法。自下而上的方法思想:开始于每个数据对象作为一个独立的组,逐步合并这些独立的对象组,直到对象组合并在层次顶端或满足算法终止条件为止。自上而下的方法思想:开始于所有对象作为一个组,循环地将其分裂为更小的组,直到每个对象构成一组或满足算法终止条件为止。BIRCH算法和CURE算法等都是常用的层次方法。

层次方法能得到不同粒度上的多层次聚类结构,但也存在一定程度上的缺陷,比如在进行分裂或合并之后,无法再进行回溯。但这一缺陷同样也具有一定的积极性,因为在进行分裂或合并时无需考虑不同选择所造成的组合爆炸问题。

3.3基于密度方法

基于密度方法能够发现具有任意形状的聚类。基于密度方法通过增长所获得的聚类直到邻近密度超过一定阈值为止,使得聚类内部点的密度较大,而聚类间点的密度较小。基于密度方法可用于除噪,以及发掘任意形状的聚类。DBSCAN、OPTICS和DBCLUES都是常用的基于密度方法。

3.4基于网格方法

基于网格方法通过把对象空间划分为有限数目的单元以形成网格结构。一般来说,划分太粗糙造成不同聚类对象界限不清楚的可能性增大,划分太细致会得到太多小聚类。通常的方法是采用先从小单元开始寻找聚类,再逐渐增大单元的体积,重复这个过程直到聚类质量优良为止。

划分对象空间的网格数很大程度上决定了数据集的处理时间,从而掩盖了数据对象个数的影响,使得基于网格方法的平均速度相对较快。

4k-means算法在电信行业套餐匹配模型方面的应用

随着电信行业竞争的日益加剧,如何使用尽可能低的营销成本取得最大的效益是每个公司追求的目标。使用有限的客服资源留住老客户,尽可能多的发展新客户就要求为他们推荐符合个性需求的套餐,这就需要使用大量数据分析用户真实的消费行为,下述模型使用k-means算法做主体。

4.1k-means算法中心思想

(1)初始聚类中心的选取:从给定的数据集(包含n个数据对象)中任意选取k个对象;

(2)循环③到④直至每个聚类中数据对象不再变化为止;

(3)计算每个数据对象与中心对象的距离,其中中心对象由每个聚类中数据对象的均值给出;

(4)重新计算每个在变化的聚类的均值。

4.2匹配模型

(1)提取用户当月消费记录;

(2)将用户按照入网时间分为三类用户:新入网用户、在网三月用户、在网一年用户,按照属性(用户ID、手机号码、通话时间、短信条数、数据流量)整理三类用户消费记录,存入三个新建表中;

(3)使用通话时间、短信条数、数据流量作为分析属性,使用k-means算法进行聚类分析;

(4)根据得出的结果改进输入参数和k-means算法,使最终聚类质量尽可能高,由此营销部门可根据分析结果制定效益更高的营销方案。

5结论

聚类分析是数据挖掘中的一个很活跃的研究领域,并研究出划分方法、层次方法、基于密度方法以及基于网格方法等多种聚类算法,每种算法都有其自身的特点。划分方法适用于类数固定,聚类形状偏好球形,层次方法能得到不同粒度上的多层次聚类结构,基于密度方法可消除“噪声”,发现任意形状的聚类,基于网格方法处理速度独立于数据对象个数,因此,在实际应用中应根据聚类对象、目的以及要求选择合适的聚类方法,并适当加以改进,达到最佳聚类质量。跟随大数据时代的步伐,聚类技术在数据挖掘领域将取得重大的发展。

参考文献:

[1]朱明.聚类分析.2008.

[2]黄修丹.数据挖掘领域中的聚类分析及应用.2004.

[3]赵法信.王国业数据挖掘中聚类算法研究学报.2005.

[作者简介]许进文(1992.9-),女,汉族,四川彭州人,本科,四川大学计算机学院,研究方向:计算机科学与技术。

算法与数据结构总结 篇4

算法与数据结构这一门课程,就是描述了数据的逻辑结构,数据的存储结构,以及数据的运算集合在计算机中的运用和体现。数据的逻辑结构就是数据与数据之间的逻辑结构;数据的存储结构就包含了顺序存储、链式存储、索引存储和散列存储。在这学期当中,老师给我们主要讲了顺序存储和链式存储。最后数据的运算集合就是对于一批数据,数据的运算是定义在数据的逻辑结构之上的,而运算的具体实现依赖于数据的存储结构。

通过这学期的学习,让我在去年C语言的基础上对数据与数据之间的逻辑关系有了更深的理解和认识。以前在学Matlab这一课程的时候,我们如果要实现两个数的加减乘除,或者一系列复杂的数据运算,就直接的调用函数就行,套用规则符号和运算格式,就能立马知道结果。在学习C语言这一课程时,我们逐渐开始了解函数的调用的原理,利用子函数中包含的运算规则,从而实现函数的功能。现今学习了算法,让我更深层次的知道了通过顺序表、指针、递归,能让数据算法的实现更加的简洁,明了,更易于理解。摒弃了数据的冗杂性。

在本书第二章中,主要介绍了顺序表的实现以及运用。顺序表中我认为最重要的是一个实型数组,和顺序表的表长,不论是在一个数据的倒置、插入、删除以及数据的排序过程中,都能将数据依次存入数组当中,利用数组下标之间的关系,就能实现数据的一系列操作了。在存储栈中,给我留下最深刻的映像就是“先进后出”,由于它特殊的存储特性,所以在括号的匹配,算术表达式中被大量应用。在存储队列之中,数据的删除和存储分别在表的两端进行操作,所以存储数据很方便。为节省队列浪费闲置空间的这一大缺点,所以引入了循环队列这一概念,很好用。

在第三章中,主要讲的是链式存储特性。它最突出的优点就是可以选择连续或者不连续的存储空间都行。所以,不管是数据在插入或者删除一个数据时,会很方便,不会像顺序表那样,要移动数组中的诸多元素。所以链表利用指针能很方便的进行删除或者插入操作。而链式在栈和队列的基础上,也有了多方面的应用,所以在这些方面有了更多的应用。

第四章字符串中,基本的数组内部元素的排序和字符串的匹配大部分代码自己还是能够理解,能够看懂,如果真的要将所学的大量运用于实践的话,那就要多花些功夫和时间了。在对称矩阵的压缩,三角矩阵的压缩,稀疏矩阵在存储中能够合理的进行,能大大提高空间的开支。

在第五章递归当中,就是在函数的定义之中出现了自己本身的调用,称之为递归。而递归设计出来的程序,具有结构清晰,可读性强,便于理解等优点。但是由于递归在执行的过程中,伴随着函数自身的多次调用,因而执行效率较低。如果要在追求执行效率的情况下,往往采用非递归方式实现问题的算法程序。

在第六章数型结构当中,这是区别于线性结构的另一大类数据结构,它具有分支性和层次性。它是数据表示,信息组织和程序设计的基础和工具。在本章中,映像深刻的是树的存储结构。有双亲表示法,孩子表示法,以及孩子兄弟表示法。在表示怎样存储数据之后,接着要从数型结构中将数据读取出来,于是,有了树的遍历,在遍历当中,又分为前序、中序和后序遍历,这三种遍历各有各的特点。

在第七章中,说到了树的扩展---二叉树。二叉树不同一般的树型结构的另一种重要的非线性结构,它是处理两种不同的数据结构,许多涉及树的算法采用二叉树表示和处理更加便捷和方便。其他的也是和一般的二叉树差不多。还多了一个树、森林和二叉树之间的转换。

第八章的围绕着图来展开,它是一种复杂的非线性结构,在人工智能、网络工程、数学、并行计算和工业设计有着广泛的应用。图最重要的由一个非空的顶点集合和一个描述顶点之间的多对多关系的边集合组成的一种数据结构。图的存储室通过邻接矩阵老存储图的信息。而图的读取是通过深度优先遍历和广度优先遍历实现。生成最小生成树有Prim算法和Kruskal算法,相对于这两种算法,后一种算法要更加易于理解。

数据结构与算法-教学编制 篇5

1.需求分析.........................................错误!未定义书签。2.概要设计.........................................错误!未定义书签。3.详细设计.........................................错误!未定义书签。4.测试分析.........................................错误!未定义书签。课程设计总结.......................................错误!未定义书签。参考文献...........................................错误!未定义书签。

1.需求分析

根据课程之间的依赖关系制定课程安排计划,输入课程数及课程之间的关系。需要利用代码实现排序,以及对各个学期课程安排进行排序并输出。

1.1问题描述

大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。

1.2设计思路

首先利用拓扑排序对课程先后顺序进行分析,邻接表位主要存储结构,栈为主要辅助结构,给出课程之间的先后关系比如AOV网,然后进行拓扑排序,但当又向图中存在环时,无法查找该图的一个拓扑排序,当图中的所有顶点全部输出,表示对该图排序成功,实现拓扑排序算法时,相应的建立邻接表存储AOV网,为了避免重复检测入度为零的顶点,建立一个栈来对入度为零的顶点进行存放。根据课程的先后关系,对个学期的课程进行排序,输出。

1.3设计环境、原理

设计环境和器材: 硬件:计算机;软件:Microsoft Visula C++。

设计原理说明:运用图的拓扑排序对课程先修排列的实现,并调用递归完成拓扑排序。

1.4实验目的

培养学生用学到的书本知识解决实际问题的能力;培养实际工作所需要的动手能力;培养学生以科学理论和工程上能力的技术,规范地开发大型、复杂、高质量的应用软件和系统软件具有关键性作用。通过课程设计的实践,学生可以在程序设计方法、上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

1.5实验内容

针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。

2.概要设计:

2.1流程图

void FindInDegree(ALGraph G, int indegree[])//求图中各节点的入度(如下左图)void CreatGraph(ALGraph *G)//构件图(如下右图)。

void TopologicalSort_1(ALGraph G,int numterm,int uplcredit)//有向图G采用邻接表存储结构(如下左图);

void TopologicalSort_2(ALGraph G,int numterm,int uplcredit)//有向图G采用邻接表存储结构(如下右图)。

主函数: void main()

2.2抽象数据类型图的定义 ADT Graph{

数据对象V:V是具有相同特性的数据元素的集合,称为顶点集.数据关系R: R={VR} VR={(v,w)|v,w∈V,(v,w)表示v和w之间存在直接先修关系} 基本操作P: void CreatGraph(ALGraph *);void FindInDegree(ALGraph , int *);void TopologicalSort_1(ALGraph G,int numterm,int maxcredit);void TopologicalSort_2(ALGraph G,int numterm,int maxcredit);}ADT Graph 栈的定义: ADT Stack{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…n,n>=0} 数据关系:R1={﹤ai-1 ai﹥|ai-1,ai∈D,i=2,…,n} 基本操作: void InitStack(SqStack *S);int StackEmpty(SqStack S);void Push(SqStack *S, int);int Pop(SqStack *S, int *e);}ADT Stack 2.3主程序

int main()//主函数 {

int numterm;//学期总数

int uplcredit;//一个学期的学分上限

int selectway;

ALGraph G;

printf(“请输入学期总数:n”);

scanf(“%d”,&numterm);

printf(“请输入一个学期的学分上限:n”);

scanf(“%d”,&uplcredit);

CreatGraph(&G);

printf(“请选择编排策略:1.课程尽可能集中到前几个学期;2.课程尽量均匀分布n”);

scanf(“%d”,&selectway);

if(selectway==1)

TopologicalSort_1(G,numterm,uplcredit);

if(selectway==2)

TopologicalSort_2(G,numterm,uplcredit);

system(“pause”);

return 0;} 2.4本程序只有两个模块,调用关系简单

主程序模块→拓扑排序模块

3.详细设计

3.1头结点、表结点、邻接表的定义

#define MAX_VERTEX_NUM 100 //最大课程总数 typedef struct ArcNode{ int adjvex;struct ArcNode *nextarc;}ArcNode;typedef struct VNode{ char name[24];

//课程名 int classid;

//课程号

int credit;

//课程的学分 int indegree;

//该结点的入度 int state;

//该节点的状态 ArcNode *firstarc;//指向第一条依附该顶点的弧的指针 }VNode,AdjList[MAX_VEXTEX_NUM];typedef struct{ AdjList vertices;int vexnum, arcnum;}ALGraph;邻接表的基本操作:

void CreatGraph(ALGraph *);创建邻接表

void FindInDegree(ALGraph , int *);求一个结点的入度

void TopologicalSort_1(ALGraph G,int numterm,int maxcredit);拓扑排序来编排课程

void TopologicalSort_2(ALGraph G,int numterm,int maxcredit);拓扑排序来编排课程

3.2栈的定义

#define STACk_INIT_SIZE 100 //存储空间的初时分配量 #define STACKINCREMENT 10

//存储空间的分配增量

typedef int ElemType;typedef struct { AdjList vertices;int vexnum, arcnum;}ALGraph;基本操作:

void InitStack(SqStack *S);栈的初始化

int StackEmpty(SqStack S);判断栈是否为空

void Push(SqStack *S, int);入栈操作

int Pop(SqStack *S, int *e);出栈操作

3.3主程序和其他算法:

#include #include #include // malloc()等 #include // INT_MAX等 #include // EOF(=^Z或F6),NULL #include // atoi()52 #include // eof()#include // floor(),ceil(),abs()#include

// exit()#include // cout,cin// 函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE-1 typedef int Status;// Status是函数的类型,其值是函数结果状态代码,如OK等

typedef int Boolean;// Boolean是布尔类型,其值是TRUE或FALSE #define MAX_NAME 10 /* 顶点字符串的最大长度 */ #define MAXCLASS 100 int Z=0;int X=0;int xqzs,q=1,xfsx;typedef int InfoType;typedef char VertexType[MAX_NAME];/* 字符串类型 */ /* 图的邻接表存储表示 */ #define MAX_VERTEX_NUM 100 typedef enum{DG}GraphKind;/* {有向图,有向网,无向图,无向网} */ typedef struct ArcNode { int adjvex;/* 该弧所指向的顶点的位置 */ struct ArcNode *nextarc;/* 指向下一条弧的指针 */ InfoType *info;/* 网的权值指针)*/ } ArcNode;/* 表结点 */ typedef struct { VertexType data;/* 顶点信息 */ ArcNode *firstarc;/* 第一个表结点的地址,指向第一条依附该顶点的弧的指针 */ } VNode,AdjList[MAX_VERTEX_NUM];/* 头结点 */ typedef struct { AdjList vertices,verticestwo;int vexnum,arcnum;/* 图的当前顶点数和弧数 */ int kind;/* 图的种类标志 */ }ALGraph;/* 图的邻接表存储的基本操作 */ int LocateVex(ALGraph G,VertexType u){ /* 初始条件: 图G存在,u和G中顶点有相同特征 */ /* 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 */ int i;for(i=0;iadjvex=j;p->info=NULL;/* 图 */ p->nextarc=(*G).vertices[i].firstarc;/* 插在表头 */(*G).vertices[i].firstarc=p;} return OK;} void Display(ALGraph G){ /* 输出图的邻接矩阵G */ int i;ArcNode *p;switch(G.kind){ case DG: printf(“有向图n”);} printf(“%d个顶点:n”,G.vexnum);for(i=0;iadjvex].data);p=p->nextarc;} printf(“n”);}

void FindInDegree(ALGraph G,int indegree[]){ /* 求顶点的入度,算法调用 */ int i;ArcNode *p;for(i=0;iadjvex]++;p=p->nextarc;} } } typedef int SElemType;/* 栈类型 */ /*栈的顺序存储表示 */ #define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */ #define STACKINCREMENT 2 /* 存储空间分配增量 */ typedef struct SqStack { SElemType *base;/* 在栈构造之前和销毁之后,base的值为NULL */ SElemType *top;/* 栈顶指针 */ int stacksize;/* 当前已分配的存储空间,以元素为单位 */ }SqStack;/* 顺序栈 */ /* 顺序栈的基本操作 */ Status InitStack(SqStack *S){ /* 构造一个空栈S */(*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!(*S).base)exit(OVERFLOW);/* 存储分配失败 */(*S).top=(*S).base;(*S).stacksize=STACK_INIT_SIZE;return OK;} Status StackEmpty(SqStack S){ /* 若栈S为空栈,则返回TRUE,否则返回FALSE */ if(S.top==S.base)return TRUE;else return FALSE;} Status Pop(SqStack *S,SElemType *e){ /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ if((*S).top==(*S).base)return ERROR;*e=*--(*S).top;return OK;} Status Push(SqStack *S,SElemType e){ /* 插入元素e为新的栈顶元素 */ if((*S).top-(*S).base>=(*S).stacksize)/* 栈满,追加存储空间 */ {(*S).base=(SElemType *)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof

(SElemType));if(!(*S).base)exit(OVERFLOW);/* 存储分配失败 */(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+=STACKINCREMENT;} *((*S).top)++=e;return OK;} typedef int pathone[MAXCLASS];typedef int pathtwo[MAXCLASS];Status TopologicalSort(ALGraph G){ /* 有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK, */ /* 否则返回ERROR。*/ int i,k,j=0,count,indegree[MAX_VERTEX_NUM];SqStack S;pathone a;pathtwo b;ArcNode *p;FindInDegree(G,indegree);/* 对各顶点求入度indegree[0..vernum-1] */ InitStack(&S);/* 初始化栈 */ for(i=0;inextarc){ /* 对i号顶点的每个邻接点的入度减1 */ k=p->adjvex;if(!(--indegree[k]))/* 若入度减为0,则入栈 */ Push(&S,k);} } if(count

while(q<=xqzs){ int C=0;if(X<=G.arcnum){ while(C<=xfsx){C+=*G.verticestwo[Z].data;++Z;} printf(“第%d个学期应学课程:”,q);while(X<=Z){cout<<*G.vertices[X].data<<“ ”;++X;} cout<

4.用户使用和说明

使用VC++,打开sjjg.cpp文件,接着编译,无错误,然后重建也没有错误,最后执行该文件。显示如下图:

要求输入学期总数、一个学期的学分上限、需要编排课程总数、课程名、课程号、该课程的学分,按照出现的每一步来输入该课程设计所提供的相关数据。然后还要输入课程先修课程总数,依据教科书图7.26,可以算出有16种关系,分别输出如下图所示。接着程序会根据这些数据,自动生成建立好的邻接表,用户可以根据系统显示的选择编排策略进行选择,有两种编排策略,最后结果体现在实验的正确测试结果里(如上图)。

5.调试分析

5.1实验过程中出现的问题及解决方法

我们在实验过程中遇到的最大难题是两个课程排序算法的编写。刚开始的时候没有任何的思路,网上也只有拓扑排序的算法,对于课程设计要求的排序算法没有任何头绪。经过请教老师和同学以及翻阅了一些相关书籍,并在网上的搜索有了排序算法的大体思路。经过三天的修改,终于写出了符合要求的排序算法。

5.2测试数据

学期总数:6;学分上限:10;该专业共开设12门课,课程号从01到12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。

5.3测试结果(包含正确和错误的)

正确测试结果:

错误测试结果:

5.4测试数据及程序运行情况

输入的内容如下: 课程编号

课程名称

学分

先决条件 01

程序设计基础

无 02

离散数学

01 03

数据结构

01,02 04

汇编语言

01 05 语言的设计和分析

03,04 06

计算机原理

07

编译原理

05,03 08

操作系统

03,06 09

高等数学

无 10

线性代数

09 11

普通物理

09 12

数值分析

09,10,01 两种编排方法都输出结果为: 第一学期学的课程有:高等数学程序设计基础; 第二学期学的课程有:普通物理 线性代数 汇编语言; 第三学期学的课程有:数值分析 计算机原理 离散数学; 第四学期学的课程有:数据结构;

第五学期学的课程有:操作系统 语言的设计和分析; 第六学期学的课程有:编译原理。

6.总结

刚开始学的时候确实有很多地方我很不理解,每次上课时老师都会给我们出不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心来,仔细去写程序。老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还是得继续下去,我多次请教了老师和同学,逐渐能自己找出错误,并加以改正。经过了这次课程设计,现在已经可以了解很多错误在英文里的提示,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。此次的程序设计能够成功,是我和我的同学三个人共同努力作用的结果。在这一段努力学习的过程中,我们的编程设计有了明显的提高。

其实现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。现在真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的格式。同时也对教学编制问题有了进一步的认识。只要努力去学习,就会灵活的去应用它。

7.参考文献

数据结构与算法推荐信 篇6

美国UIUC大学博士生梅俏竹

数据结构是美国所有一流计算机系的本科核心课程之一,上承计算引论与初级程序设计,下启高级算法和计算理论,向来是计算机本科教学的重中之重。我在北大上过的诸多本科基础课中,无论从课程内容和老师教学下的功夫来看,张铭老师的”数据结构与算法”课程都是首屈一指的。可以说,将北大的数据结构与算法课程,无论其内容覆盖面,前瞻性,难易程度,以及学生的工作量,都并不逊色于国外一流计算机系的同名课程。

举个例子,记得当年数据结构的大实习作业是设计并实现一个简单的搜索引擎。这并不容易。从头到尾所有的模块,包括网页抓取,内容提取,索引和信息检索都需要自己设计和完成,几乎没有现成的工具可以利用。用业内的俗语说就是”build a search engine from the scratch”,这换成UIUC计算机系的学生来讲也是很值得骄傲的事情。按计算机行业的惯例来说,业界最热门最前沿的问题出现在课堂上是有一个明显滞后的。而当时只不过是2000年,现在搜索引擎的巨头Google远未上市,百度则刚刚成立,微软和雅虎甚至还没开始研发自己的搜索引擎。北大的本科生课程实习就能有这样的前瞻性的问题绝对是值得称道的。我在UIUC的所有师兄师弟,没有别人在本科课程中有同样的经历。我自己的研究工作也从这个经历中受益良多。

和我合作这个实习题目的同学,现在在Yahoo公司Santa Clara的搜索组做工程师。我们同班的同学们,有不少去了Google, Yahoo和Microsoft从事搜索和数据挖掘相关的研究与开发工作。和他们交谈中,大家都不约而同地提到数据结构这门课程对自己的影响。归结起来,大家都认为张铭老师的“数据结构与算法课程”内容细致实用,讲授深入浅出,课程实习精巧而具前瞻性,对培养学生分析和解决问题,创造性思考,和团队合作的能力都有很好的作用。祝张老师的《数据结构与算法》成功当选北京市精品课程。

推荐人梅俏竹

2008年4月15日

推荐人简介:

梅俏竹,1999-2003就读于北京大学计算机系,获学士学位。

数据挖掘算法研究论文 篇7

1 时序数据挖掘与趋势分析

所谓时间序列数据, 是同一对象跨时间的观察值的向量所以必须按照一定顺序 (X1, X2, ..., Xt) 横截面数据一般是同一时点对不同对象的观察值的集合, 顺序的改变应该不影响计量的结果{X1, X2, ..., Xn}。时间序列数据可作季度数据、月度数据等细分, 其中很有代表性的季度时间序列模型就是因为其数据具有四季一样变化规律, 虽然变化周期不相同, 但是整体的变化趋势都是按照周期变化的。时间序列是统计学专业课程之一, 对时间序列的研究一般要建立在一定的计量经济学基础上, 计量经济学已有涉及时间序列模型, 因此很多计量经济学的模型也用到了时间序列数据。时间序列数据可分为平稳过程、去趋势平稳过程以及差分平稳过程等等很多种类。

时序数据挖掘研究的目的主要包括以下两个方面:一方面是学习待观察过程历史的行为特征, 比如会员的网站浏览习惯等;另一方面是预测未来该过程的可能状态或表现, 比如顾客是否会在短时间内进行大规模购物等。这两个方面的目的直接产生了时序数据挖掘中的一个重要的问题:寻求相似的行为模式。另一个相关的问题就是异常活动检测。关于这两个问题的详细阐述请参见第就是判断所给定的两个数据时间序列的变化趋势是否相似, 或者是指对一个较长的源时序数据时间序列进行趋势分析, 寻找出其中有意义的时序数据挖掘模式。

进行交叉预测是时序数据挖掘算法的最重要功能。基于两个单独但存在相关关系的序列为时序算法创建挖掘算法模型, 由此可以使用生成的挖掘模型来根据对某一个序列的行为的研究进而来预测另一个序列的结果。并且由此创建可应用于更多个序列的通用模型过程。交叉预测非常重要, 例如, 序列的数据来源存在很大的噪声, 可信度不高, 其结果可能造成对特定区域的预测产生极不稳定及错误的预测。但是, 可以根据所有区域的平均值情况来创建通用模型, 然后对所要研究的各个序列应用此通用模型, 从而为所需研研究的各个区域生成更准确、更稳定的预测。

2 ARTXP&ARIMA算法原理

在SQL Server 2005中时序算法仅使用一个算法ARTXP。ARTXP算法最大的特点是针对未来短期预测进行了优化, 因而可预测序列中相近时间内的可能的值。从SQL Server 2008开始时序算法同时使用这两种算法ARTXP和ARIMA。AR-IMA算法的最大特点是与ARTXP相互补, 其主要是针对长期预测进行了优化。

ATRXP算法模型为x=f (W, X, Y, Z) +, W、X、Y和Z表示输入中的回归量。最后一个数据项是, 它表示噪音。如果函数f是线性的, 就得到一个简单的线性回归。如下所示:x=aW+bX+cY+dZ+, 其中a, b, c和d表示回归系数。线性回归算法的目标是确定这些系数。因此, 如果考虑n个以前的时间点, 就会得到如下的函数:Xt=a1Xt-1+a2Xt-2+….+anXt-n+t。

ARIMA是预测时间序列的通用算法, 它考虑了许多历史数据项和这些数据项中的许多区别, 以及预测数据项中的许多错误因素。换言之它预测序列中的值, 使用实际值和预测值之间的差作为算法的因子。ARIMA模型写作ARIMA (p, d, q) , 其中p、d和q分别表示数据项的个数、差的个数和错误的个数。

3 时序数据挖掘算法的混合模型

默认情况下, 时序算法在分析模式进行预测的同时, 使用ARTXP算法和ARIMA这两种算法。其特点是使用同一数据为这两个算法的单独的训练数据模型定型:其中一个模型采用ARIMA数据挖掘算法, 而另外一个模型采用ARTXP时序数据算法。其理想的结果是, 该混合算法结合这两个模型的结果来进行可变数量时间段内的最优预测。ARTXP算法对短期预测的优化效果非常明显, 因此在一系列预测的开始时ARTXP对预测结果十分重要。但是, 随着预测的时间段不断地延伸, 数据的不断扩展, ARIMA就又变得相对比较重要了。

因此如何去探索这两种算法的混合方式, 以在时序中选择优先采用短期预测或长期预测变得尤为必要。可指定Microsoft时序算法使用以下设置之一:

(1) 对最接近历史数据的初始时间段内仅使用ARTXP;

(2) 对完成前几步预测后, 此时ARTXP算法已失去优势, 使用ARIMA;

(3) 使用这两种算法的默认混合。

如图1可以自定义时序算法混合预测模型。使用混合模型时, 时序算法按下图方式混合这两种算法。

该混合算法模型关系图左侧显示的是ARTXP模型, 右侧显示的是ARIMA模型, 这样就可以更轻松地比较这两个模型之间的不同之处。由ARTXP算法创建的结构是拆分为越来越小的分支的树状结构, 而由ARIMA算法创建的结构更像是一个棱锥图, 从较小的组件向上构建。

(1) 在最接近历史数据的初始时间段内的预测时始终只使用了ARTXP算法。

(2) 完成前几步预测后, 此时ARTXP算法已失去优势, 混合使用这两种算法。

(3) 随着预测对时间上要求的延伸深入, 预测效果越来越多地依赖ARIMA算法, 而这正是ARIMA算法的优势所在, 直至不再使用ARTXP。

4 结语

通过对ARTXP和ARIMA算法的研究与分析, 结合数据挖掘对趋势分析预测的要求, 利用ARTXP适合短期预测, 而对长期预测更适合使用ARIMA算法的特征提出ARTXP算法和ARIMA算法的有效混合模型, 从而对时间序列数据信息的知识发现过程制定比较合理的长期或短期预测, 进而为科学决策提供有效的依据。

参考文献

[1]HanJia-wei, KamberMieheline.数据挖掘概念与技术[M].北京机械工业出版社, 2001

关联规则挖掘算法的研究与应用 篇8

关键词:数据库;频集算法;关联规则;算法优化;并行规则

中图分类号:TP311.13 文献标识码:A 文章编号:1674-7712 (2014) 18-0000-01

一、关联规则简介

(一)产生与含义

关联规则的定义顾名思义,于万事万物中存在千丝万缕的关系。就如同我们所常说的蝴蝶挥翅效应一样。虽然有些事物看起来不存在必然的关联,但是由于某个事物的某种行为就会因为不断的关联而最终影响到那个看起来不关联的事物。关联规则在20世纪90年代,在研究不同商品在顾客购买时如何让顾客购买的商品更加便于管理便于数据应用进行了研究,从而提出了“关联规则”这个概念。也正因为如此,关联规则被迅速应用于超市物品购买和电子商务数据挖掘中。針对关联规则,优化关联规则从而达到数据高效挖掘管理的目的,产生了多种算法。比如Apriori算法、partition算法等等。

(二)典型算法定义与介绍

关联规则中最经典出现时间较早的算法莫过于Apriori算法、后期很多优化算法都是针对于原算法的改进。

算法大多数都是由一些数学的公式和表述方法来表示的,这样的做法主要是因为这种方式的表达更加严谨,经得住推敲。但是这种复杂的公式并不是利于人们理解的。这里以思想模式让大家了解Apriori算法。思想模式:从管理角度讲,在不断出现的各个数据中,最重要的当然是出现频率,或者简单说出现次数、管理次数最多的那个数据项。因为对这个数据项需要大量的操作,实现它的高效管理,就让数据挖掘管理更加科学更加方便。然后通过这个数据项,采用数学方法中的迭代算法,以层为概念进行搜索操作,找出与最多项频繁项的关联集合。不断的执行层面的迭代,建造多个频繁集合。这就是算法的作用。但是我们会发现,在不断的探索关联关系时候,数据项总会有某些关联。但是关联关系太远的,并不是我们提升效率的需要,也不是提升数据管理的方法,所以我们要根据一些要求与规则,去除一些关联集合,这个过程被形象的比喻成“剪枝”。就好像为了获得最美最能茁壮成长的植物,我们需要剪去一些不好的枝叶一样。至于数据定义的公式,数学方法表示,在各种参考资料中都可以方便的找到,这里就不再赘述。

二、关联规则数据挖掘

对于很多的应用来说,由于数据分布的分散性,所以很难在数据最细节的层次上发现一些强关联规则。当我们引入概念层次后,就可以在较高的层次上进行挖掘。虽然较高层次上得出的规则可能是更普通的信息,但是对于一个用户来说是普通的信息,对于另一个用户却未必如此。所以数据挖掘应该提供这样一种在多个层次上进行挖掘的功能。

三、此算法的应用方向与未来发展

(一)应用方向

从定义而来,我们都可预期关联算法的挖掘算法主要应用于电子商务、数据管理。所以针对方向从计算机角度来讲当然是数据库技术。对于商业购买(尤其是超市)具有重大作用,利用关联数据分析我们就知道了顾客最喜欢哪些商品,哪些商品是购买最多的、哪些商品销售是稳定的、哪些商品的销售不尽如人意。所以可以根据这些数据信息,可以对货品的进货频率、商品价格的提升与下降、某段时间段需要刺激客户的购买欲望等做出合理的评价与操作。同时目前比较流行的商业概念,交叉销售方法,也需要使用到关联规则挖掘算法。就是在销售给用户一种商品的时候,利用数据来分析顾客可能需要的其它商品,将这些商品合理的推荐给用户,增加销售量达到销售目的的过程。商业应用方向以为,这种数据库的分析方法还适合用于金融角度,如股票、期货等升降的趋势预测。用于医疗器材中,比如疾病基因预测。当然在其它行业如保险、通信、建筑等领域也有一定的应用空间。

(二)算法优化发展方向

挖掘算法效率的提高随着数据库尺寸的不断增大,不仅增大了采掘算法的搜索空间,而且也增加了盲目发现的可能。因此我们必须利用领域知识去提取与我们发现任务有关的数据,删除无用的数据,有效降低问题的维数,设计出更加有效的采掘算法。在这方面,基于约束的关联规则采掘具有广阔的前途。另外,数据库可能经常频繁的更新,一旦有新的数据集添加到旧的数据库后,原来的强关联规则可能不再是强关联规则了,而原来的弱关联规则也可能会变为强关联规则。所以,对数据库需要经常挖掘最新的关联规则,这时可以将现有的挖掘算法如Apriori重新运行来得到新的关联规则。这种方法虽然简单,但是有明显不足,因为在原有数据库中发现到的频繁项目集都被浪费掉了,所有的频繁项目集必须重新开始计算。因此有必要研究针对数据库变化时的挖掘算法。在这方面增量式更新算法大有前途。可视化采掘目前的关联规则挖掘过程一般是在用户规定最小支持度和最小置信度等参数之后,通过扫描数据库找出所有的频繁项目集生成关联规则最后将挖掘出的关联规则提交给用户。由于频繁项目集的寻找比较费时,用户在指定这些参数后等待较长时间才能获得挖掘结果。如果用户对所得到的挖掘结果不满意,则需要修改最小支持度、最小置信度等参数,并再次运行挖掘算法。用户要得到满意的结果可能需要多次反复上述的过程。虽然上述过程可以优化,但仍然难以达到理想的效果。增强关联规则挖掘算法与用户的交互性可以减小算法的搜索空间,提高挖掘效率挖掘出满足用户需求的关联规则。因此设计出灵活方便的交互用户界面并对所挖掘的结果进行很好的可视化表示,使非领域专家也能够挖掘是一个广阔的发展方向。

参考文献:

[1]何月顺,杜萍,丁秋林.基于数据挖掘思想的故障模式分析[J].计算机应用研究,2005(11).

[2]何月顺,丁秋林.计算机半结构化数据源的数据挖掘技术研究[J].哈尔滨工业大学学报,2005(10).

[3]彭仪普,熊拥军.关联规则挖掘AprioriTid算法的改进[J].计算机应用,2005(05).

[4]何月顺,汤彬,丁秋林.基于Web的数据挖掘技术的应用研究[J].计算机系统应用,2005(05).

[5]何月顺,刘光萍,丁秋林.XML与面向Web的数据挖掘技术的应用研究[J].江西农业大学学报,2004(06).

[6]马水山,王志旺,张漫.基于关联规则挖掘的滑坡监测资料分析[J].长江科学院院报,2004(05).

[作者简介]马峰柏(1983.09-),男 ,黑龙江人,黑龙江农业职业技术学院,教研室主任,讲师,硕士研究生,研究方向:网络、软件方向。

上一篇:特色学校管理下一篇:【精华】大学学生实习报告