李淳淳
(青岛大学,山东 青岛 266071)
目前,大多数管理系统只是在功能性上侧重于信息数据的基础性管理工作,但无法发现数据中存在的关系和规则,无法根据现有的数据预测未来的发展趋势,缺乏挖掘数据背后隐藏的知识的手段,最终导致了“数据爆炸但知识贫乏”的现象[1]。因此,本文重点介绍了数据挖掘技术中经典的Apriori算法[2]。
数据挖掘是指从大量的数据中,通过统计学、人工智能、机器学习等方法,挖掘出未知的且有价值的信息和知识的过程。数据挖掘主要侧重解决四类问题:分类、聚类、关联和预测(定量、定性)[3],数据挖掘的重点在寻找未知的模式与规律,发现其中潜在的、有价值的知识。
关联规则是数据挖掘技术中的一项重要技术,是反映两种或多种事物之间存在的相互依存性和关联性的一种重要指标[4]。一般分为两个阶段:第一阶段即从大量的、真实的、已清洗的数据集中找出所有高频出现的数据组合,即频繁项集;第二阶段即对这些频繁项集进行处理后,找出多个数据之间存在的潜在联系。
Apriori算法是比较基础也是最为常用的挖掘数据关联规则的算法。算法的具体实现步骤根据核心思想可划分为发现频繁项集、挖掘关联规则两大步骤。每个步骤的运算过程及思想有以下两点。
该步骤通过generate_L函数,利用迭代的方法检索出数据库中的所有支持度不低于用户设定的阈值的频繁项集。在此过程中,利用定理1:如果某个项集是频繁的,那么它的所有非空子集也是频繁的。即如果{B,C}是频繁的,那么{B}、{C}也一定是频繁的。
首先,遍历整个数据集生成所有单项的频繁集列表C1。然后扫描数据集及C1中的候选集,若C1中的集合,是某条记录中的一部分,那么增加数据字典中对应的计数值,当扫描完数据集中所有的项及候选集时,便可计算该项集的支持度(item_count[item]/ t_num),如果满足用户输入的最小支持度,则将该项集加入L1列表中。重复该过程,逐渐得到L2,L3……Lk,直至所有非频繁的项集都被去掉,得到最终的频繁项集L与数据字典。
该步骤通过generate_big_rules函数返回所有满足最小置信度要求的规则列表。在此过程中,利用定理2: 如果一个项集是非频繁的,那么它的所有超集也是非频繁的。即如果{A, B}是非频繁的,那么{A, B, C},{A, B, C, D}也一定是频繁的。
为了保存这些规则,首先需要创建一个规则空列表。接下来,遍历频繁项集L中的所有项集并计算它们的置信度。在置信度的计算时使用generate_L函数生成的支持度数据,通过导入这些支持度数据可以节省大量计算时间。在遍历的过程中,如果某条规则满足最小置信度且没有在规则列表中出现过,那么将这些规则加入规则列表。
在原算法的基础上虽然已通过连接步和剪枝步进行过筛选,但每次通过k-1阶频繁项集Lk-1生成一个k阶频繁项集时就要扫描一遍Lk-1。改进的算法思想是先扫描一遍Lk-1,对于Lk-1中的任意元素Lk-1[i],去扫描Ck并判断Lk-1[i]是否为Ck中元素Ck[j]的子集,如果是,则对Ck[j]进行计数,最终将Ck[j]的计数小于k的元素都删掉,剩余即所有k阶频繁项集。由此可得出推论:如果在Lk-1中包含某个k阶项集Tk的k-1阶子集的个数小于k,则Tk是非频繁的。
若当前已得到Lk-1为{{1,2},{1,3},{2,3},{2,4}},求Lk。
由Lk-1我们可以得出Ck为{{1,2,3},{2,3,4}},首先从Lk-1中取元素{1,2},扫描Ck中的所有元素Ck[j],看{1,2}是否为Ck[j]的子集,扫描一遍过后计数为{1,0}。重复上述步骤直到Lk-1全部扫描完毕,得到的计数为{3,1},此时k=3,所以只有一个元素的计数为3,即最终得到Lk={{1,2,3}}。
下面针对关联规则在学生选课和各科考试成绩中的应用案例做了简单的介绍介绍。实验所需的基础数据大部分来源于学生选课数据表,原始数据表结构大致包括:学生姓名、课程号、课程名、选课属性、学分、学时、总评等字段。
在符合实验目的前提下,根据我们所需的数据结构处理后学生选课科目的数据结构为:[学生姓名,选科名称列表]。
输入清洗后的数据集、频繁项集最大项数设置为3、最小支持度设置为0.07,将上述3个参数带入函数generate_L中,算法进行后得出学生所有选课科目中的所有3项以内、最小支持度不小于0.07的频繁项集。输入generate_L函数发现的所有符合最小支持度的频繁项集、生成的各频繁项集与支持度相对应的数据字典、设置最小置信度为0.9,将上述3个参数带入函数generate_big_rules后,算法运行后得出所有置信度不小于0.9的关联规则,数据格式为:[规则前件,规则后件,前件支持度,置信度],例如:[微机原理与汇编语言,Linux操作系统, 0.10989, 0.9066]。
得到的数据结果中,支持度越高,表明本门课程在学生的选课列表中出现的次数越多,即学生对本门课程的兴趣程度越高;置信度越高,表明如果某学生选择了规则前件中的课程,会有多大的概率去选择规则后件中的课程,即表明了多门课程之间的相互关联性越大。
根据4.1中描述的表结构在符合实验目的前提下,我们只需提取出每个学生所选择课程的课程名及考试成绩即可。但为了方便计算与展示,我们将所有课程名称依次对应为阿拉伯数字编码。具体对应关系如下所示:[信息安全数学基础,1]、[C语言课程设计Ⅰ,2]、[微机原理与汇编语言,3]、…、[加权平均分,Z]等。我们将提取出来的数据按分数进一步转化,例如把成绩分为A、B、C、D、E 5个等级,分别对应90分以上、80~90分、70~80分、60~70分及60分以下。所以最终我们通过对数据的预处理,得到一个较为完善的数据表,数据结构为:[科目代码+成绩,…,科目代码+成绩]。
重复上一个实验的步骤,经过多次实验对比后,将最小支持度设为0.2,最小置信度设为0.7时,得到的数据比较全面且能完整的体现出各科成绩之间的隐藏关系,得到的部分强关联规则结果,数据格式同上,例如:[6A,4A,0.3148148148148148, 0.7254901960784313]。
得到的数据结果中,置信度越高,代表本条规则前后件之间的关联程度越大,即重要程度越高。分析后,我们可以将获得的关联规则分为如下两类:
第一类是各科课程的合理性安排规则,如“2C=>5C”和“5C=>8C”这两个规则,我们可以发现如果该学生“C语言课程设计Ⅰ”的成绩不理想,则会导致“面向对象程序设计方法”的成绩不理想,最终“算法设计与分析Ⅰ”的成绩也会受到很大的影响,所以我们在课程安排上,将“C语言课程设计Ⅰ”安排在前面,并注重提高课程质量与教学水平,让学生顺利掌握该课程的内容,那么接下来“面向对象程序设计方法”和“算法设计与分析Ⅰ”的学习效果就会显著提升。
第二类是单独科目对总成绩的影响规则,如“3A=>ZA”“7A=>ZA” “9A=>ZA”“10A=>ZA”等规则,可以看出“微机原理与汇编语言”“计算机操作系统原理”“高等数学”“计算机网络原理”这几门科目的成绩占比是比较重要的,往往这几门科目成绩好的同学,总分都会偏高。所以教师在安排课程时候,应更加注重这几门课程的培养,并可适当地调整这几门课程所占的学分权重,以此来均衡学生的专业水平。
通过实践结果证明,基于Apriori算法的关联规则挖掘在教务综合服务平台中的应用,具有一定的实用价值。尽管数据挖掘技术在目前的教务工作中运用比例并不高,但应用案例远不止如此,比如:挖掘学生高考成绩与报名专业之间的关联规则、挖掘学生转出专业与转入专业之间的关联规则、学生各科成绩之间的关联规则等等诸多应用方案。因此,在教务的日常工作中,结合实际工作,良好的运用关联规则挖掘技术,在节省了时间的同时,对完善课程体系、优化课程安排、预测选课方案都能提供更多有力的科学依据,打造一套更适合学生全面发展的教务管理系统。