李淳淳
(青島大學(xué),山東 青島 266071)
目前,大多數(shù)管理系統(tǒng)只是在功能性上側(cè)重于信息數(shù)據(jù)的基礎(chǔ)性管理工作,但無(wú)法發(fā)現(xiàn)數(shù)據(jù)中存在的關(guān)系和規(guī)則,無(wú)法根據(jù)現(xiàn)有的數(shù)據(jù)預(yù)測(cè)未來(lái)的發(fā)展趨勢(shì),缺乏挖掘數(shù)據(jù)背后隱藏的知識(shí)的手段,最終導(dǎo)致了“數(shù)據(jù)爆炸但知識(shí)貧乏”的現(xiàn)象[1]。因此,本文重點(diǎn)介紹了數(shù)據(jù)挖掘技術(shù)中經(jīng)典的Apriori算法[2]。
數(shù)據(jù)挖掘是指從大量的數(shù)據(jù)中,通過(guò)統(tǒng)計(jì)學(xué)、人工智能、機(jī)器學(xué)習(xí)等方法,挖掘出未知的且有價(jià)值的信息和知識(shí)的過(guò)程。數(shù)據(jù)挖掘主要側(cè)重解決四類(lèi)問(wèn)題:分類(lèi)、聚類(lèi)、關(guān)聯(lián)和預(yù)測(cè)(定量、定性)[3],數(shù)據(jù)挖掘的重點(diǎn)在尋找未知的模式與規(guī)律,發(fā)現(xiàn)其中潛在的、有價(jià)值的知識(shí)。
關(guān)聯(lián)規(guī)則是數(shù)據(jù)挖掘技術(shù)中的一項(xiàng)重要技術(shù),是反映兩種或多種事物之間存在的相互依存性和關(guān)聯(lián)性的一種重要指標(biāo)[4]。一般分為兩個(gè)階段:第一階段即從大量的、真實(shí)的、已清洗的數(shù)據(jù)集中找出所有高頻出現(xiàn)的數(shù)據(jù)組合,即頻繁項(xiàng)集;第二階段即對(duì)這些頻繁項(xiàng)集進(jìn)行處理后,找出多個(gè)數(shù)據(jù)之間存在的潛在聯(lián)系。
Apriori算法是比較基礎(chǔ)也是最為常用的挖掘數(shù)據(jù)關(guān)聯(lián)規(guī)則的算法。算法的具體實(shí)現(xiàn)步驟根據(jù)核心思想可劃分為發(fā)現(xiàn)頻繁項(xiàng)集、挖掘關(guān)聯(lián)規(guī)則兩大步驟。每個(gè)步驟的運(yùn)算過(guò)程及思想有以下兩點(diǎn)。
該步驟通過(guò)generate_L函數(shù),利用迭代的方法檢索出數(shù)據(jù)庫(kù)中的所有支持度不低于用戶(hù)設(shè)定的閾值的頻繁項(xiàng)集。在此過(guò)程中,利用定理1:如果某個(gè)項(xiàng)集是頻繁的,那么它的所有非空子集也是頻繁的。即如果{B,C}是頻繁的,那么{B}、{C}也一定是頻繁的。
首先,遍歷整個(gè)數(shù)據(jù)集生成所有單項(xiàng)的頻繁集列表C1。然后掃描數(shù)據(jù)集及C1中的候選集,若C1中的集合,是某條記錄中的一部分,那么增加數(shù)據(jù)字典中對(duì)應(yīng)的計(jì)數(shù)值,當(dāng)掃描完數(shù)據(jù)集中所有的項(xiàng)及候選集時(shí),便可計(jì)算該項(xiàng)集的支持度(item_count[item]/ t_num),如果滿(mǎn)足用戶(hù)輸入的最小支持度,則將該項(xiàng)集加入L1列表中。重復(fù)該過(guò)程,逐漸得到L2,L3……Lk,直至所有非頻繁的項(xiàng)集都被去掉,得到最終的頻繁項(xiàng)集L與數(shù)據(jù)字典。
該步驟通過(guò)generate_big_rules函數(shù)返回所有滿(mǎn)足最小置信度要求的規(guī)則列表。在此過(guò)程中,利用定理2: 如果一個(gè)項(xiàng)集是非頻繁的,那么它的所有超集也是非頻繁的。即如果{A, B}是非頻繁的,那么{A, B, C},{A, B, C, D}也一定是頻繁的。
為了保存這些規(guī)則,首先需要?jiǎng)?chuàng)建一個(gè)規(guī)則空列表。接下來(lái),遍歷頻繁項(xiàng)集L中的所有項(xiàng)集并計(jì)算它們的置信度。在置信度的計(jì)算時(shí)使用generate_L函數(shù)生成的支持度數(shù)據(jù),通過(guò)導(dǎo)入這些支持度數(shù)據(jù)可以節(jié)省大量計(jì)算時(shí)間。在遍歷的過(guò)程中,如果某條規(guī)則滿(mǎn)足最小置信度且沒(méi)有在規(guī)則列表中出現(xiàn)過(guò),那么將這些規(guī)則加入規(guī)則列表。
在原算法的基礎(chǔ)上雖然已通過(guò)連接步和剪枝步進(jìn)行過(guò)篩選,但每次通過(guò)k-1階頻繁項(xiàng)集Lk-1生成一個(gè)k階頻繁項(xiàng)集時(shí)就要掃描一遍L(zhǎng)k-1。改進(jìn)的算法思想是先掃描一遍L(zhǎng)k-1,對(duì)于Lk-1中的任意元素Lk-1[i],去掃描Ck并判斷Lk-1[i]是否為Ck中元素Ck[j]的子集,如果是,則對(duì)Ck[j]進(jìn)行計(jì)數(shù),最終將Ck[j]的計(jì)數(shù)小于k的元素都刪掉,剩余即所有k階頻繁項(xiàng)集。由此可得出推論:如果在Lk-1中包含某個(gè)k階項(xiàng)集Tk的k-1階子集的個(gè)數(shù)小于k,則Tk是非頻繁的。
若當(dāng)前已得到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]的子集,掃描一遍過(guò)后計(jì)數(shù)為{1,0}。重復(fù)上述步驟直到Lk-1全部掃描完畢,得到的計(jì)數(shù)為{3,1},此時(shí)k=3,所以只有一個(gè)元素的計(jì)數(shù)為3,即最終得到Lk={{1,2,3}}。
下面針對(duì)關(guān)聯(lián)規(guī)則在學(xué)生選課和各科考試成績(jī)中的應(yīng)用案例做了簡(jiǎn)單的介紹介紹。實(shí)驗(yàn)所需的基礎(chǔ)數(shù)據(jù)大部分來(lái)源于學(xué)生選課數(shù)據(jù)表,原始數(shù)據(jù)表結(jié)構(gòu)大致包括:學(xué)生姓名、課程號(hào)、課程名、選課屬性、學(xué)分、學(xué)時(shí)、總評(píng)等字段。
在符合實(shí)驗(yàn)?zāi)康那疤嵯拢鶕?jù)我們所需的數(shù)據(jù)結(jié)構(gòu)處理后學(xué)生選課科目的數(shù)據(jù)結(jié)構(gòu)為:[學(xué)生姓名,選科名稱(chēng)列表]。
輸入清洗后的數(shù)據(jù)集、頻繁項(xiàng)集最大項(xiàng)數(shù)設(shè)置為3、最小支持度設(shè)置為0.07,將上述3個(gè)參數(shù)帶入函數(shù)generate_L中,算法進(jìn)行后得出學(xué)生所有選課科目中的所有3項(xiàng)以?xún)?nèi)、最小支持度不小于0.07的頻繁項(xiàng)集。輸入generate_L函數(shù)發(fā)現(xiàn)的所有符合最小支持度的頻繁項(xiàng)集、生成的各頻繁項(xiàng)集與支持度相對(duì)應(yīng)的數(shù)據(jù)字典、設(shè)置最小置信度為0.9,將上述3個(gè)參數(shù)帶入函數(shù)generate_big_rules后,算法運(yùn)行后得出所有置信度不小于0.9的關(guān)聯(lián)規(guī)則,數(shù)據(jù)格式為:[規(guī)則前件,規(guī)則后件,前件支持度,置信度],例如:[微機(jī)原理與匯編語(yǔ)言,Linux操作系統(tǒng), 0.10989, 0.9066]。
得到的數(shù)據(jù)結(jié)果中,支持度越高,表明本門(mén)課程在學(xué)生的選課列表中出現(xiàn)的次數(shù)越多,即學(xué)生對(duì)本門(mén)課程的興趣程度越高;置信度越高,表明如果某學(xué)生選擇了規(guī)則前件中的課程,會(huì)有多大的概率去選擇規(guī)則后件中的課程,即表明了多門(mén)課程之間的相互關(guān)聯(lián)性越大。
根據(jù)4.1中描述的表結(jié)構(gòu)在符合實(shí)驗(yàn)?zāi)康那疤嵯拢覀冎恍杼崛〕雒總€(gè)學(xué)生所選擇課程的課程名及考試成績(jī)即可。但為了方便計(jì)算與展示,我們將所有課程名稱(chēng)依次對(duì)應(yīng)為阿拉伯?dāng)?shù)字編碼。具體對(duì)應(yīng)關(guān)系如下所示:[信息安全數(shù)學(xué)基礎(chǔ),1]、[C語(yǔ)言課程設(shè)計(jì)Ⅰ,2]、[微機(jī)原理與匯編語(yǔ)言,3]、…、[加權(quán)平均分,Z]等。我們將提取出來(lái)的數(shù)據(jù)按分?jǐn)?shù)進(jìn)一步轉(zhuǎn)化,例如把成績(jī)分為A、B、C、D、E 5個(gè)等級(jí),分別對(duì)應(yīng)90分以上、80~90分、70~80分、60~70分及60分以下。所以最終我們通過(guò)對(duì)數(shù)據(jù)的預(yù)處理,得到一個(gè)較為完善的數(shù)據(jù)表,數(shù)據(jù)結(jié)構(gòu)為:[科目代碼+成績(jī),…,科目代碼+成績(jī)]。
重復(fù)上一個(gè)實(shí)驗(yàn)的步驟,經(jīng)過(guò)多次實(shí)驗(yàn)對(duì)比后,將最小支持度設(shè)為0.2,最小置信度設(shè)為0.7時(shí),得到的數(shù)據(jù)比較全面且能完整的體現(xiàn)出各科成績(jī)之間的隱藏關(guān)系,得到的部分強(qiáng)關(guān)聯(lián)規(guī)則結(jié)果,數(shù)據(jù)格式同上,例如:[6A,4A,0.3148148148148148, 0.7254901960784313]。
得到的數(shù)據(jù)結(jié)果中,置信度越高,代表本條規(guī)則前后件之間的關(guān)聯(lián)程度越大,即重要程度越高。分析后,我們可以將獲得的關(guān)聯(lián)規(guī)則分為如下兩類(lèi):
第一類(lèi)是各科課程的合理性安排規(guī)則,如“2C=>5C”和“5C=>8C”這兩個(gè)規(guī)則,我們可以發(fā)現(xiàn)如果該學(xué)生“C語(yǔ)言課程設(shè)計(jì)Ⅰ”的成績(jī)不理想,則會(huì)導(dǎo)致“面向?qū)ο蟪绦蛟O(shè)計(jì)方法”的成績(jī)不理想,最終“算法設(shè)計(jì)與分析Ⅰ”的成績(jī)也會(huì)受到很大的影響,所以我們?cè)谡n程安排上,將“C語(yǔ)言課程設(shè)計(jì)Ⅰ”安排在前面,并注重提高課程質(zhì)量與教學(xué)水平,讓學(xué)生順利掌握該課程的內(nèi)容,那么接下來(lái)“面向?qū)ο蟪绦蛟O(shè)計(jì)方法”和“算法設(shè)計(jì)與分析Ⅰ”的學(xué)習(xí)效果就會(huì)顯著提升。
第二類(lèi)是單獨(dú)科目對(duì)總成績(jī)的影響規(guī)則,如“3A=>ZA”“7A=>ZA” “9A=>ZA”“10A=>ZA”等規(guī)則,可以看出“微機(jī)原理與匯編語(yǔ)言”“計(jì)算機(jī)操作系統(tǒng)原理”“高等數(shù)學(xué)”“計(jì)算機(jī)網(wǎng)絡(luò)原理”這幾門(mén)科目的成績(jī)占比是比較重要的,往往這幾門(mén)科目成績(jī)好的同學(xué),總分都會(huì)偏高。所以教師在安排課程時(shí)候,應(yīng)更加注重這幾門(mén)課程的培養(yǎng),并可適當(dāng)?shù)卣{(diào)整這幾門(mén)課程所占的學(xué)分權(quán)重,以此來(lái)均衡學(xué)生的專(zhuān)業(yè)水平。
通過(guò)實(shí)踐結(jié)果證明,基于Apriori算法的關(guān)聯(lián)規(guī)則挖掘在教務(wù)綜合服務(wù)平臺(tái)中的應(yīng)用,具有一定的實(shí)用價(jià)值。盡管數(shù)據(jù)挖掘技術(shù)在目前的教務(wù)工作中運(yùn)用比例并不高,但應(yīng)用案例遠(yuǎn)不止如此,比如:挖掘?qū)W生高考成績(jī)與報(bào)名專(zhuān)業(yè)之間的關(guān)聯(lián)規(guī)則、挖掘?qū)W生轉(zhuǎn)出專(zhuān)業(yè)與轉(zhuǎn)入專(zhuān)業(yè)之間的關(guān)聯(lián)規(guī)則、學(xué)生各科成績(jī)之間的關(guān)聯(lián)規(guī)則等等諸多應(yīng)用方案。因此,在教務(wù)的日常工作中,結(jié)合實(shí)際工作,良好的運(yùn)用關(guān)聯(lián)規(guī)則挖掘技術(shù),在節(jié)省了時(shí)間的同時(shí),對(duì)完善課程體系、優(yōu)化課程安排、預(yù)測(cè)選課方案都能提供更多有力的科學(xué)依據(jù),打造一套更適合學(xué)生全面發(fā)展的教務(wù)管理系統(tǒng)。