王 兵,黃丹,李文璟
西南石油大學(xué)計(jì)算機(jī)科學(xué)學(xué)院,四川 成都610500
鉆井是石油開(kāi)采的重要過(guò)程之一,在作業(yè)過(guò)程中存在著較多可能導(dǎo)致意外事故的安全隱患,隨著科學(xué)技術(shù)的進(jìn)步和生產(chǎn)力水平的提高,石油安全生產(chǎn)也得到了高度關(guān)注和重視[1]。鉆井作業(yè)安全隱患是導(dǎo)致事故發(fā)生的重要因素之一,系統(tǒng)化的鉆井安全隱患管理應(yīng)用越來(lái)越廣泛。在日常安全檢查、隱患排查以及標(biāo)準(zhǔn)化建設(shè)過(guò)程中積累了大量的隱患數(shù)據(jù)信息。然而,“數(shù)據(jù)豐富,信息匱乏”的問(wèn)題依然存在,在實(shí)際作業(yè)中,大多數(shù)企業(yè)僅能利用這些數(shù)據(jù)進(jìn)行指導(dǎo)隱患整改工作[2]。為了從海量的安全隱患數(shù)據(jù)中提取出有用的安全管理信息,解決人工分析數(shù)據(jù)效率低、主觀性強(qiáng)等問(wèn)題,為管理者提供針對(duì)性的輔助決策,將數(shù)據(jù)挖掘技術(shù)應(yīng)用于事故隱患預(yù)警過(guò)程中[3]。
關(guān)聯(lián)規(guī)則挖掘算法是數(shù)據(jù)挖掘領(lǐng)域中一個(gè)重要的研究方法,其目的是挖掘事務(wù)數(shù)據(jù)庫(kù)項(xiàng)目集之間的隱藏信息,為用戶在決策時(shí)提供理論支撐[4-5]。Apriori 算法是數(shù)據(jù)挖掘算法中關(guān)聯(lián)規(guī)則發(fā)現(xiàn)的經(jīng)典算法,是挖掘布爾型關(guān)聯(lián)規(guī)則頻繁項(xiàng)集的最重要算法之一。該算法采用逐層搜索的迭代方法,利用k-項(xiàng)集探索(k+1)-項(xiàng)集來(lái)生成頻繁項(xiàng)集,并引入了頻繁項(xiàng)集性質(zhì)的先驗(yàn)知識(shí)以減少搜索空間。但該算法存在兩個(gè)性能瓶頸:一是數(shù)據(jù)庫(kù)需頻繁掃描導(dǎo)致I/O 負(fù)載過(guò)大;二是會(huì)產(chǎn)生大量的候選項(xiàng)集,且處理候選項(xiàng)集的時(shí)間開(kāi)銷(xiāo)大,使算法效率降低[6]。
針對(duì)以上問(wèn)題,許多學(xué)者提出算法的改進(jìn)方法。Han 等提出了基于模式增長(zhǎng)的FP-Growth算法[7],該算法參考Huffman 樹(shù)結(jié)構(gòu),將數(shù)據(jù)集存儲(chǔ)于FP 樹(shù)結(jié)構(gòu)上后挖掘頻繁項(xiàng)集,只需掃描兩次數(shù)據(jù)庫(kù),在一定程度上提高了算法的執(zhí)行效率;但隨著項(xiàng)集數(shù)目的增加,構(gòu)建FP 樹(shù)的難度增加。Yang 等提出了基于矩陣的Apriori 算法[8-9],只需掃描一次數(shù)據(jù)庫(kù)來(lái)生成布爾矩陣,算法的剪枝操作都在矩陣上實(shí)現(xiàn),減少計(jì)算成本。楊秋翔等提出了一種基于權(quán)值向量矩陣約簡(jiǎn)的Apriori 算法[10],通過(guò)引入權(quán)值和矩陣約簡(jiǎn)的方法,降低了源數(shù)據(jù)及候選項(xiàng)集的規(guī)模;但該算法在執(zhí)行前需要對(duì)源數(shù)據(jù)進(jìn)行篩選,前期工作量較大。Wang 等提出了基于壓縮矩陣的改進(jìn)Apriori 算法[11-15],利用矩陣有效地表示數(shù)據(jù)庫(kù)中的事務(wù),并使用“與”運(yùn)算處理矩陣,該算法只需掃描一次數(shù)據(jù)庫(kù)且減少了候選項(xiàng)集的數(shù)量;但由于在壓縮矩陣過(guò)程中數(shù)據(jù)丟失的問(wèn)題,將導(dǎo)致頻繁項(xiàng)集遺漏的問(wèn)題。
為此,提出了支持度矩陣優(yōu)化頻繁項(xiàng)集的改進(jìn)Apriori算法—MM-Aprior(iMatrix Multiplication Apriori)算法。該算法使用布爾矩陣來(lái)表示事務(wù)數(shù)據(jù)庫(kù),利用事務(wù)矩陣乘法來(lái)構(gòu)造支持度矩陣,進(jìn)而獲得支持度計(jì)數(shù),簡(jiǎn)化了支持度的計(jì)算方法,并改變了原算法的自連接方式,在解決頻繁項(xiàng)集遺漏問(wèn)題的同時(shí)進(jìn)一步提高了算法的執(zhí)行效率。
Apriori 用于挖掘頻繁項(xiàng)集并生成關(guān)聯(lián)規(guī)則。該算法運(yùn)用逐層搜索的迭代方式,通過(guò)連接和剪枝兩步,由頻繁k-項(xiàng)集探索生成頻繁(k+1)-項(xiàng)集,直至找到最大頻繁項(xiàng)集[16]。Apriori 算法包含了支持度和置信度兩個(gè)重要的概念,支持度是指在所有事務(wù)中頻繁出現(xiàn)項(xiàng)集的頻率,P(X∪Y)表示事件X和Y同時(shí)發(fā)生的概率,它反映了此關(guān)聯(lián)規(guī)則的重要性。置信度是指事件X發(fā)生時(shí)事件Y也同時(shí)發(fā)生的概率P(Y|X),它是關(guān)聯(lián)規(guī)則準(zhǔn)確性的度量[17]。同時(shí)滿足最小支持度及最小置信度的規(guī)則在關(guān)聯(lián)規(guī)則挖掘中稱(chēng)為強(qiáng)關(guān)聯(lián)規(guī)則。通常分為頻繁項(xiàng)集的生成及由頻繁項(xiàng)集產(chǎn)生強(qiáng)關(guān)聯(lián)規(guī)則兩個(gè)主要步驟。
Apriori 算法的具體操作[18-19]步驟為:
(1)掃描初始事務(wù)數(shù)據(jù)庫(kù),計(jì)算出每個(gè)項(xiàng)目支持度,滿足最小支持度的項(xiàng)目生成頻繁1-項(xiàng)集L1。
(2)連接步驟操作:利用Lk自連接生成候選k-項(xiàng)集Ck。
(3)剪枝步驟操作:利用先驗(yàn)性質(zhì)對(duì)Ck進(jìn)行剪枝操作,若候選k-項(xiàng)集的(k?1)-項(xiàng)的子集不在Lk?1中,則該候選k-項(xiàng)集也不是頻繁項(xiàng)集,因此可從Ck中直接刪除。
(4)反復(fù)迭代操作,直至不能找到頻繁k-項(xiàng)集為止。
(5)產(chǎn)生規(guī)則:從得到的頻繁項(xiàng)集中找出所有滿足最小置信度的規(guī)則。
為實(shí)現(xiàn)石油鉆井生產(chǎn)過(guò)程中不同的安全決策需求,通過(guò)傳統(tǒng)關(guān)聯(lián)算法(如Apriori 算法、FP-rowth算法)來(lái)挖掘鉆井事故和復(fù)雜情況關(guān)聯(lián)規(guī)則,且將獲得的關(guān)聯(lián)規(guī)則作為鉆井預(yù)警與分析模塊的知識(shí),為鉆井事故和復(fù)雜情況的預(yù)防和處理提供很好的依據(jù),鉆井安全隱患關(guān)聯(lián)挖掘流程如圖1所示。
圖1 鉆井安全隱患關(guān)聯(lián)挖掘流程Fig.1 Flow chart of associated mining of drilling safety hazards
鉆井歷史隱患數(shù)據(jù)具有海量性與復(fù)雜性的特點(diǎn),因此在利用數(shù)據(jù)挖掘技術(shù)前,首先,要對(duì)數(shù)據(jù)進(jìn)行數(shù)據(jù)預(yù)處理;其次,使用關(guān)聯(lián)算法挖掘鉆井隱患事務(wù)中的關(guān)聯(lián)規(guī)則,進(jìn)而獲得潛在的強(qiáng)關(guān)聯(lián)規(guī)則;最后,分析強(qiáng)關(guān)聯(lián)規(guī)則進(jìn)行關(guān)聯(lián)隱患挖掘,根據(jù)頻繁前項(xiàng)發(fā)生再映射到對(duì)應(yīng)關(guān)聯(lián)規(guī)則,從而預(yù)測(cè)頻繁后項(xiàng)的發(fā)生,以此獲取預(yù)測(cè)知識(shí)。
改進(jìn)算法的相關(guān)定義:
定義1設(shè)矩陣,則為矩陣A與B的Hadamard 積。
定義2矩陣乘法。在迭代過(guò)程中,給定一個(gè)布爾矩陣,通過(guò)該矩陣的轉(zhuǎn)置乘以矩陣Ak(k=1,2,···),得到對(duì)稱(chēng)矩陣Dk,記作,其中矩陣Dk中的第i行第j列元素可以表示為:,則矩陣Dk中的第i行第j列元素的值表示對(duì)應(yīng)項(xiàng)集的支持度計(jì)數(shù),特別的,對(duì)角線上的值為各k-項(xiàng)集的支持度計(jì)數(shù)。因此,Dk也稱(chēng)為支持度矩陣。
定義3設(shè)事務(wù)數(shù)據(jù)庫(kù)包含n個(gè)事務(wù)和m個(gè)項(xiàng)目,則可構(gòu)造布爾矩陣,也稱(chēng)為初始事務(wù)矩陣A1,即項(xiàng)集的矩陣表示為
定義4若有事務(wù)項(xiàng)的長(zhǎng)度小于2,則可以將事務(wù)矩陣中所對(duì)應(yīng)的行向量刪除[20]。
定義5若某頻繁k項(xiàng)集集合中項(xiàng)集的個(gè)數(shù)小于k+1,則該頻繁項(xiàng)集為最大頻繁項(xiàng)集[21]。
改進(jìn)思想如下:
(1)利用支持度矩陣得到頻繁項(xiàng)集?;趥鹘y(tǒng)的矩陣改進(jìn)Apriori算法中利用向量的邏輯“與”運(yùn)算來(lái)計(jì)算支持度的思想,引入了支持度矩陣來(lái)得到支持度。利用定義2中的矩陣乘法,可一次性得到矩陣中所有項(xiàng)集向量的支持度計(jì)數(shù)。掃描事務(wù)數(shù)據(jù)庫(kù)得到事務(wù)矩陣A1,在迭代過(guò)程中,通過(guò)該事務(wù)矩陣的轉(zhuǎn)置乘以矩陣Ak,得到支持度矩陣Dk。支持度矩陣Dk中的值表示各個(gè)項(xiàng)集的支持度計(jì)數(shù),特別的,對(duì)角線上的值為各k-項(xiàng)集的支持度計(jì)數(shù)。其中,將各k-項(xiàng)集的支持度計(jì)數(shù)與設(shè)置最小支持度閾值比較可得到頻繁k-項(xiàng)集Lk。支持度矩陣Dk上三角(下三角)中的值滿足最小支持度計(jì)數(shù)的(k+1)-項(xiàng)集即為頻繁(k+1)-項(xiàng)集Lk+1。
(2)連接操作。在迭代過(guò)程中,使用頻繁項(xiàng)集Lk+1及事務(wù)矩陣,構(gòu)造出兩個(gè)矩陣,將得到的兩個(gè)矩陣?yán)枚x1通過(guò)Hadamard 積運(yùn)算,即可得到事務(wù)矩陣Ak+1。
(3)矩陣的約簡(jiǎn)。通過(guò)m×n的事務(wù)矩陣Ak+1乘以m×1的全1矩陣,得到各個(gè)事務(wù)的事務(wù)長(zhǎng)度。再根據(jù)定義4若事務(wù)長(zhǎng)度小于2時(shí),刪除該事務(wù)所對(duì)應(yīng)的行,從而簡(jiǎn)化事務(wù)矩陣,得到Ak+1′。
通過(guò)上述操作,達(dá)到了不產(chǎn)生候選項(xiàng)集直接生成頻繁項(xiàng)集且逐步簡(jiǎn)化事務(wù)矩陣的目的,極大地提高算法的效率及生成頻繁項(xiàng)集的速度。
算法流程如下:
(1)生成頻繁1-項(xiàng)集。①掃描初始事務(wù)數(shù)據(jù)庫(kù),并用布爾矩陣來(lái)表示,其中行表示事務(wù),列表示項(xiàng)目,得到挖掘?qū)ο笫聞?wù)矩陣A1。②根據(jù)用戶設(shè)定的最小支持度,確定最小支持度計(jì)數(shù)。利用事務(wù)矩陣A1的轉(zhuǎn)置乘以事務(wù)矩陣A1,即得到支持度矩陣D1。支持度矩陣D1的對(duì)角線上的值對(duì)應(yīng)為各1-項(xiàng)集的支持度計(jì)數(shù),提取出滿足最小支持度計(jì)數(shù)的1-項(xiàng)集,從而得到頻繁1-項(xiàng)集L1。
(2)生成頻繁2-項(xiàng)集。①提取支持度矩陣D1的上三角(下三角)中滿足最小支持度計(jì)數(shù)的2-項(xiàng)集,從而得到頻繁2-項(xiàng)集L2。②使用頻繁2-項(xiàng)集及矩陣A1構(gòu)造兩個(gè)矩陣C1與C1′。將矩陣C1與C1′進(jìn)行Hadamard 運(yùn)算,即A2=C1°C1′,得到事務(wù)矩陣A2。③通過(guò)m×n矩陣A2乘以n×1的全1矩陣,可計(jì)算出各個(gè)事務(wù)的事務(wù)長(zhǎng)度。再根據(jù)定義4對(duì)矩陣A2進(jìn)行簡(jiǎn)化,從而得到矩陣A2′。
(3)生成頻繁k-項(xiàng)集。①利用矩陣A2′的轉(zhuǎn)置A2′T乘以矩陣A2′得到支持度矩陣D2,即提取D2的上三角(下三角)中滿足最小支持度計(jì)數(shù)的的3-項(xiàng)集,從而得到頻繁3-項(xiàng)集L3。使用頻繁3-項(xiàng)集及矩陣構(gòu)造A2′兩個(gè)矩陣C2與C2′。將矩陣C2與C2′進(jìn)行Hadamard 積運(yùn)算,即A3=C2°C2′,可得到事務(wù)矩陣A3。②通過(guò)m′×n′的矩陣A3乘以n′×1的全1矩陣,可計(jì)算出各個(gè)事務(wù)的事務(wù)長(zhǎng)度。再根據(jù)定義4 對(duì)矩陣A3行簡(jiǎn)化,從而得到矩陣A3′。③重復(fù)以上步驟,直到某頻繁k項(xiàng)集集合中項(xiàng)集的個(gè)數(shù)小于k+1,則該頻繁項(xiàng)集為最大頻繁項(xiàng)集,算法結(jié)束。
(4)所有的頻繁項(xiàng)集即為各頻繁k-項(xiàng)集的并。再根據(jù)最小置信度篩選出強(qiáng)關(guān)聯(lián)規(guī)則。
與Apriori 算法、基于壓縮矩陣的Apriori算法[12]相比,改進(jìn)后的算法有以下優(yōu)點(diǎn):
(1)改進(jìn)后的算法僅需掃描一次事務(wù)數(shù)據(jù)庫(kù),運(yùn)行效率明顯提高。若將生成對(duì)應(yīng)的事務(wù)矩陣記為An×m,該算法的時(shí)間復(fù)雜度為O(n2mk)。Apriori 算法的時(shí)間復(fù)雜度為O(Nk+1),N代表事務(wù)數(shù)據(jù)庫(kù)中事務(wù)的個(gè)數(shù),其值遠(yuǎn)大于n。由于利用先驗(yàn)性質(zhì)進(jìn)行剪枝,Apriori 算法的時(shí)間復(fù)雜度降低了不少,但改進(jìn)算法的時(shí)間復(fù)雜度仍然優(yōu)于Apriori 算法。
(2)改進(jìn)后的算法與基于壓縮矩陣的Apriori 算法都使用布爾矩陣表示事務(wù)數(shù)據(jù)庫(kù),減少了I/O負(fù)載。與基于壓縮矩陣的Apriori 算法不同的是:①改變了計(jì)算支持度的方法。不再使用事務(wù)矩陣中項(xiàng)集向量逐個(gè)進(jìn)行循環(huán)求“與”運(yùn)算,再計(jì)算“1”的個(gè)數(shù)來(lái)得到個(gè)項(xiàng)目的支持度計(jì)數(shù)。而是引入了自定義的支持度矩陣,只需掃描支持度矩陣的上三角(下三角)來(lái)得到支持度,簡(jiǎn)化了支持度的計(jì)算方法,減少了計(jì)算頻繁項(xiàng)集的時(shí)間開(kāi)銷(xiāo),提高了算法的效率。②算法的連接方法不同。在迭代過(guò)程中,不需要矩陣中項(xiàng)集向量逐個(gè)進(jìn)行邏輯“與”操作來(lái)得到新的事務(wù)矩陣。而是只需利用上一次產(chǎn)生的頻繁項(xiàng)集及事務(wù)矩陣來(lái)得到新的事務(wù)矩陣。因此,能極大地減少計(jì)算量。
在生成頻繁項(xiàng)集的過(guò)程中由于引入的支持度矩陣,避免了大量冗余的候選項(xiàng)集的產(chǎn)生,提高了頻繁項(xiàng)集的生成效率。并且在迭代過(guò)程中,實(shí)時(shí)地約簡(jiǎn)事務(wù)矩陣的規(guī)模,頻繁k項(xiàng)集對(duì)應(yīng)的事務(wù)矩陣Ak結(jié)構(gòu)會(huì)隨著k值的增長(zhǎng)而變得愈簡(jiǎn)單,從而簡(jiǎn)化了矩陣規(guī)模,降低矩陣運(yùn)算的復(fù)雜程度,減少了空間的占用。
MM-Apriori 算法對(duì)表1所示的事務(wù)數(shù)據(jù)庫(kù)進(jìn)行關(guān)聯(lián)挖掘,獲取頻繁項(xiàng)集。事務(wù)T={T1,T2,···,T10},對(duì)應(yīng)的項(xiàng)目集I={I1,I2,I3,I4,I5},假設(shè)最小支持度(Smin_support)為0.2,則最小支持度計(jì)數(shù)為ceiling(Sminsup_count)=ceiling(Smin_support×|T|)=2。
表1 事務(wù)數(shù)據(jù)庫(kù)Tab.1 Transaction database
(1)掃描初始事務(wù)數(shù)據(jù)庫(kù),生成事務(wù)矩陣A1,其中行表示事務(wù),列表示項(xiàng)。再得出對(duì)應(yīng)的轉(zhuǎn)置矩陣。
(2)生成L1。通過(guò),得到支持度矩陣D1。D1中的值表示各項(xiàng)集的支持度計(jì)數(shù),其中,對(duì)角線上的值表示各1-項(xiàng)集的支持度計(jì)數(shù)。比較D1中對(duì)角線上各1-項(xiàng)集的支持?jǐn)?shù)與最小支持度計(jì)數(shù)的大小,提取出滿足最小支持度計(jì)數(shù)的項(xiàng)目集。由于每一項(xiàng)都滿足最小支持度計(jì)數(shù)從而得到頻繁1-項(xiàng)集,即
(3)生成L2。將對(duì)稱(chēng)矩陣D1的上三角(下三角)中的各2-項(xiàng)集的計(jì)數(shù)與最小支持度計(jì)數(shù)進(jìn)行比較,提取出滿足最小支持度計(jì)數(shù)的項(xiàng)目集從而得到頻繁2-項(xiàng)集。即
利用頻繁2-項(xiàng)集及矩陣A1構(gòu)造兩個(gè)矩陣,通過(guò)兩個(gè)矩陣的Hadamard 積的方法得到事務(wù)矩陣A2。首先,拆分頻繁2-項(xiàng)集{I1|I2},{I1|I3},{I1|I4},{I1|I5},{I2|I3},{I2|I4},{I2|I5},{I3|I4},{I3|I5},左邊的項(xiàng)集放入C1,右邊的項(xiàng)集放入C1′;然后,掃描矩陣A1,可得到矩陣C1與C1′,將矩陣C1與C1′進(jìn)行Hadamard 積運(yùn)算,即A2=C1°C1′;最后,可得到事務(wù)矩陣A2。
事務(wù)矩陣A2乘以9×1 的全1 矩陣,可得到AAA2中對(duì)應(yīng)的事務(wù)長(zhǎng)度,根據(jù)定義4 簡(jiǎn)化矩陣,可得到簡(jiǎn)化后的事務(wù)矩陣A2′。
(4)生成L3。通過(guò)D2=A2′TA2′得到支持度矩陣D2。
將D2的上三角(下三角)中的各3-項(xiàng)集的計(jì)數(shù)與最小支持度計(jì)數(shù)進(jìn)行比較,提取出滿足最小支持度計(jì)數(shù)的項(xiàng)目集(不重復(fù)提?。亩玫筋l繁3-項(xiàng)集。即L3={{I1I2I3},{I1I2I4},{I1I2I5},{I1I3I5},{I2I3I4},{I2I3I5}}。
利用頻繁3-項(xiàng)集及矩陣A2′構(gòu)造兩個(gè)矩陣,通過(guò)兩個(gè)矩陣的Hadamard 積可得到事務(wù)矩陣A3。
將頻繁3-項(xiàng)集拆分{I1I2|I2I3},{I1I2|I2I4},{I1I2|I2I5},{I1I3|I3I5},{I2I3|I3I4},{I2I3|I3I5},左邊的項(xiàng)目放入矩陣C2,右邊的項(xiàng)目放入矩陣C2′,再通過(guò)掃描矩陣A2′,得到矩陣C2與C2′,將矩陣C2與C2′進(jìn)行Hadamard 積運(yùn)算,即A3=C2°C2′,可得到事務(wù)矩陣A3。
事務(wù)矩陣A3乘以6×1 的全1 矩陣,可以得到A3中對(duì)應(yīng)的事務(wù)長(zhǎng)度,根據(jù)定義4,對(duì)矩陣簡(jiǎn)化得到矩陣A3′。
(5)生成L4。通過(guò)D3=A3′TA3′的上三角(下三角)中的各4-項(xiàng)集的計(jì)數(shù)與最小支持度計(jì)數(shù)進(jìn)行比較,提取出滿足最小支持度計(jì)數(shù)的項(xiàng)目集(不重復(fù)提取)從而得到頻繁4-項(xiàng)集,即L4={I1I2I3I5}。
式中,Ci為重金屬i在土壤中的實(shí)測(cè)含量(mg/kg);Bi為重金屬i在土壤中的背景值(mg/kg)。通常對(duì)于重金屬i:Igeo≤0,土壤無(wú)污染;0
(6)根據(jù)定義5 判斷,L4中的項(xiàng)集個(gè)數(shù)小于5個(gè),所以頻繁4-項(xiàng)集為最大頻繁項(xiàng)集,算法終止。輸出頻繁項(xiàng)集L=L1∪L2∪L3∪L4。
由頻繁項(xiàng)集的挖掘結(jié)果可知,使用MM-Apriori算法獲得的頻繁項(xiàng)集與基于壓縮矩陣的Apriori 算法[12]及Apriori 算法生成的頻繁項(xiàng)集結(jié)果一致,驗(yàn)證了算法的可行性。
為驗(yàn)證改進(jìn)算法的性能,對(duì)Apriori、基于壓縮矩陣的Apriori 算法、MM-Apriori 算法在相同的實(shí)驗(yàn)環(huán)境下進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)環(huán)境:CPU 為Inter Core i7-4770K CPU @ 3.5 GHz、內(nèi)存32 GB 和Windows 10 專(zhuān)業(yè)版操作系統(tǒng)。程序采用python3.6實(shí)現(xiàn)。實(shí)驗(yàn)數(shù)據(jù)來(lái)源于UCI 公共數(shù)據(jù)集中的蘑菇(Mushroom)數(shù)據(jù)集,共8 124 條事務(wù),119 個(gè)項(xiàng)。
實(shí)驗(yàn)一:比較在不同支持度下3 種算法生成的頻繁項(xiàng)集個(gè)數(shù),如圖2 所示。
圖2 不同支持度下的3 種算法產(chǎn)生的頻繁項(xiàng)集個(gè)數(shù)Fig.2 The number of frequent item sets produced by three algorithms with different support degrees
圖2 描述了在不同支持度下的3 種算法產(chǎn)生的頻繁項(xiàng)集個(gè)數(shù),該實(shí)驗(yàn)的事務(wù)數(shù)目為8 124,項(xiàng)目數(shù)為112。由圖2 可知,當(dāng)設(shè)置相同支持度閾值時(shí),MM-Apriori 算法與Apriori 算法生成的頻繁項(xiàng)集數(shù)量相同,且比基于壓縮矩陣的Apriori 算法生成的頻繁項(xiàng)集數(shù)量多,隨著支持度閾值的提高,3 種算法的頻繁項(xiàng)集個(gè)數(shù)趨于相等。MM-Apriori 算法在不同支持度下均無(wú)頻繁項(xiàng)集丟失的問(wèn)題。
實(shí)驗(yàn)二:通過(guò)分別設(shè)置不同的最小支持度、不同的事務(wù)數(shù)目及不同的項(xiàng)目數(shù)目來(lái)比較算法的性能,實(shí)驗(yàn)結(jié)果如圖3~圖5 所示。
圖3 描述了在不同最小支持度的情況下3 種算法的執(zhí)行時(shí)間,該實(shí)驗(yàn)的事務(wù)數(shù)目為6 500,項(xiàng)目數(shù)為112。由圖3 可知,改進(jìn)后,MM-Apriori 算法與基于壓縮矩陣的Apriori 算法的執(zhí)行時(shí)間都比Apriori算法短,但MM-Apriori 算法的執(zhí)行效率是3 種算法中最優(yōu)的。
圖3 不同最小支持度下的3 種算法執(zhí)行時(shí)間Fig.3 Execution time of two algorithms with different minimum support thresholds
圖4 不同事務(wù)數(shù)下的3 種算法執(zhí)行時(shí)間Fig.4 Execution time of three algorithms under different transaction numbers
圖5 描述了在不同項(xiàng)目數(shù)目的情況下3 種算法的執(zhí)行時(shí)間,該實(shí)驗(yàn)的事務(wù)數(shù)目為8 124,最小支持度為0.3。由圖5 可知,當(dāng)項(xiàng)目數(shù)目較小時(shí),3 種算法的執(zhí)行時(shí)間差距不大,但隨著項(xiàng)目數(shù)目規(guī)模的增大,MM-Apriori 算法的執(zhí)行效率明顯優(yōu)于Apriori算法。
圖5 不同項(xiàng)目數(shù)下的3 種算法執(zhí)行時(shí)間Fig.5 Execution time of two algorithms under different number of projects
綜上所述,MM-Apriori 算法的有效性且不存在頻繁項(xiàng)集遺漏的問(wèn)題,與Apriori 及基于壓縮矩陣的Apriori 算法[12]相比,具有更好的性能:無(wú)論事務(wù)數(shù)目、項(xiàng)目數(shù)目或最小支持度如何變化,該算法仍能穩(wěn)定地快速運(yùn)行,有效地提高了算法的效率。
鉆井隱患記錄以數(shù)據(jù)庫(kù)的形式存儲(chǔ),可以對(duì)隱患記錄進(jìn)行相關(guān)性分析,挖掘數(shù)據(jù)間的關(guān)聯(lián)規(guī)則。為石油鉆井作業(yè)的安全管理決策提供指導(dǎo)意見(jiàn),有助于提高安全管理的效率,對(duì)預(yù)防事故的發(fā)生起到積極作用。以某石油鉆探公司65 536 條包含107 個(gè)屬性的歷史安全隱患記錄進(jìn)行方法可行性的驗(yàn)證。
為準(zhǔn)確高效地對(duì)隱患數(shù)據(jù)進(jìn)行挖掘分析,先對(duì)隱患數(shù)據(jù)進(jìn)行預(yù)處理,進(jìn)而易于分析和挖掘的知識(shí)。鉆井隱患數(shù)據(jù)為文字型數(shù)據(jù),需將隱患屬性數(shù)據(jù)轉(zhuǎn)換為布爾型變量值來(lái)進(jìn)行規(guī)則挖掘,發(fā)生該項(xiàng)隱患標(biāo)識(shí)為1,未發(fā)生標(biāo)識(shí)為0。表2 為處理好的鉆井隱患數(shù)據(jù)片段。
表2 中的隱患數(shù)據(jù)使用MM-Apriori 算法進(jìn)行關(guān)聯(lián)挖掘。針對(duì)鉆井作業(yè)隱患屬性指標(biāo)間錯(cuò)綜復(fù)雜的問(wèn)題,為提高挖掘準(zhǔn)確度,引入了Kulc 和IR(不平衡比參數(shù))兩個(gè)相關(guān)性度量值[22-23],來(lái)過(guò)濾偽強(qiáng)關(guān)聯(lián)規(guī)則,使挖掘出的規(guī)則在保證效率的情況下更具有使用價(jià)值(為提升風(fēng)險(xiǎn)評(píng)估的實(shí)用性,僅選擇后項(xiàng)為1 的關(guān)聯(lián)規(guī)則)。設(shè)定最小支持度為0.5,最小置信度為0.8;最小Kulc 值為0.5,最大IR 值為0.5。實(shí)驗(yàn)挖掘的部分關(guān)聯(lián)規(guī)則結(jié)果如表3所示。
表2 處理后的鉆井隱患數(shù)據(jù)片段Tab.2 Data fragments of drilling hazards after treatment
對(duì)表3 的規(guī)則進(jìn)行分析,可得到如下解釋?zhuān)河梢?guī)則1、2 可看出,“井控設(shè)備配套不全或不符合設(shè)計(jì)要求”與“設(shè)備擺放不合理”很大概率會(huì)同時(shí)出現(xiàn)。提醒監(jiān)督人員在安全隱患排查中若發(fā)現(xiàn)設(shè)備擺放不合理,那么將同時(shí)著重檢查井控設(shè)備配套的完整性與是否符合設(shè)計(jì)要求。由規(guī)則3、4 可看出,當(dāng)“點(diǎn)火裝置缺陷”出現(xiàn)時(shí),大約會(huì)有70%的概率發(fā)生“安全防護(hù)裝置、連鎖裝置、安全附件缺失或失效”、“液氣分離器缺陷”的問(wèn)題。規(guī)則5 可看出,當(dāng)出現(xiàn)“通風(fēng)不良”時(shí),監(jiān)督人員應(yīng)注重安全附件的校驗(yàn)。通過(guò)以上規(guī)則可發(fā)現(xiàn),井控設(shè)備配套不全或不符合設(shè)計(jì)要求”與“設(shè)備擺放不合理”出現(xiàn)的頻率很高,反映出設(shè)備維護(hù)人員工作職責(zé)不到位,在日常工作中管理者重點(diǎn)應(yīng)督促設(shè)備維護(hù)人員及時(shí)對(duì)設(shè)備進(jìn)行維護(hù)。
表3 部分鉆井隱患關(guān)聯(lián)規(guī)則Tab.3 Association rules of drilling hazards
通過(guò)以上分析,為管理者提供針對(duì)性的決策依據(jù),便于制定相關(guān)的管控措施,對(duì)預(yù)防事故和減少事故提供科學(xué)幫助。
(1) 針對(duì)鉆井隱患數(shù)據(jù)具有量大、冗余等特點(diǎn),為了能夠準(zhǔn)確高效地對(duì)隱患記錄進(jìn)行關(guān)聯(lián)挖掘,提出了一種支持度矩陣優(yōu)化頻繁項(xiàng)集的改進(jìn)Apriori 算法。
(2)在傳統(tǒng)基于矩陣Apriori 算法上,引入了自定義的支持度矩陣來(lái)計(jì)算支持度并得到頻繁項(xiàng)集,并改變了算法的連接方法,有效提高挖掘效率且不會(huì)造成頻繁項(xiàng)集的丟失。標(biāo)準(zhǔn)UCI 數(shù)據(jù)集實(shí)驗(yàn)證明了改進(jìn)后的Apriori 算法能準(zhǔn)確且高效生成頻繁項(xiàng)集,提升了規(guī)則的挖掘效率。
(3)將該算法應(yīng)用于鉆井一體化軟件的鉆井事故和復(fù)雜情況關(guān)聯(lián)規(guī)則的挖掘,且將獲得的關(guān)聯(lián)規(guī)則作為鉆井事故和復(fù)雜情況的預(yù)防處理與分析模塊的知識(shí),為管理者提供科學(xué)的決策依據(jù),降低石油鉆井事故的發(fā)生概率。下一步將研究如何增強(qiáng)該算法對(duì)隱患嚴(yán)重程度較大、出現(xiàn)頻率較低的事故隱患稀有模式的挖掘能力。