◎張志山 陳育煌
(1.惠州衛(wèi)生職業(yè)技術(shù)學(xué)院教育技術(shù)與信息中心;2.惠州衛(wèi)生職業(yè)技術(shù)學(xué)院藥學(xué)系,廣東惠州516025)
從技術(shù)上而言,數(shù)據(jù)挖掘就是從大量的已知的數(shù)據(jù)中,補(bǔ)齊修正不完整的數(shù)據(jù),去除噪音數(shù)據(jù),從中尋找那些人們往往需要依賴經(jīng)驗(yàn)才能體會(huì)的潛在知識(shí)和信息的過程[1]。由于新藥臨床前諸多因素的制約,對(duì)于新藥的副作用的認(rèn)識(shí)非常局限,必須通過藥品的上市后監(jiān)測(cè)(Post Marketing Study,PMS)即IV期臨床試驗(yàn),完成對(duì)一種新藥的全面評(píng)價(jià)[2]。另一方面,藥物副作用(ADR)引起的病患占據(jù)所有醫(yī)院病患的6%,這儼然成為導(dǎo)致醫(yī)院死亡的第五大因素[3],可見,藥物副作用帶來的危害越來越大。
目前,對(duì)于上市后的藥品安全性評(píng)估主要有神經(jīng)網(wǎng)絡(luò)、回歸分析法、數(shù)據(jù)離散法、函數(shù)依賴法等,這些算法往往需要知道各參數(shù)之間的關(guān)系,訓(xùn)練時(shí)間較長(zhǎng),過程復(fù)雜,額外開銷大,很難推廣。影響評(píng)估數(shù)值的因素很多,各種因素之間存在著復(fù)雜的非線性聯(lián)系,采用一般的數(shù)學(xué)統(tǒng)計(jì)方法很難準(zhǔn)確預(yù)測(cè)其含量[4]。文獻(xiàn)[5]提出的基因表達(dá)式編程(gene expression programming,GEP)是進(jìn)化計(jì)算的新成員,具有遺傳算法(genetic algorithm,GA)和遺傳規(guī)劃(genetic programming,GP)的優(yōu)點(diǎn),同時(shí)克服了GA和GP的缺點(diǎn),但是GEP算法在進(jìn)化過程中容易陷入局部最優(yōu)不能自拔。文獻(xiàn)[6]則提出了一種基于種群密集度的GEP算法挖掘藥物不良反應(yīng),對(duì)文獻(xiàn)[5]的方法進(jìn)行改進(jìn),提出了種群密集度和新陳代謝等概念,證明了種群密集度的性質(zhì)等,為進(jìn)一步加強(qiáng)ADR監(jiān)測(cè)提供一種有效的技術(shù)手段[6]。文獻(xiàn)[7]則利用GEP算法建立起對(duì)脂肪肝的輔助診斷的新方法。
關(guān)聯(lián)規(guī)則挖掘是數(shù)據(jù)挖掘中的一種重要應(yīng)用。它通過對(duì)數(shù)據(jù)集的分析處理,挖掘出數(shù)據(jù)集中頻繁項(xiàng)之間的有趣聯(lián)系[8]。關(guān)聯(lián)規(guī)則挖掘中尤以Apriori算法最為經(jīng)典。該算法結(jié)構(gòu)簡(jiǎn)單、數(shù)據(jù)要求低,但Apriori算法也存在一些缺點(diǎn),如要對(duì)數(shù)據(jù)庫多次掃描,內(nèi)存占用大、候選集項(xiàng)目多,運(yùn)行效率不高[9]。Apriori算法涉及的主要概念如下:支持度是指項(xiàng)集出現(xiàn)的概率,其公式是Support(A->B)=P(AUB)。置信度是指在總事物集中包含A的同時(shí)也包含B的百分比,其公式是Confidence(A->B)=P(A|B)=P(A,B)/P(A)=P(AUB)/P(A)。提升度Lift(A->B)=P(B|A)/P(B)。當(dāng)提升度為1時(shí),表示A與B相互獨(dú)立,即是否有A對(duì)于B的出現(xiàn)無影響。當(dāng)提升度滿足0<Lift(A->B)<1時(shí),表示A與B存在負(fù)相關(guān)聯(lián)系。當(dāng)提升度滿足Lift(A->B)>1時(shí),表示A與B存在正相關(guān)聯(lián)系。強(qiáng)規(guī)則是指同時(shí)滿足最小支持度和最小置信度的關(guān)聯(lián)規(guī)則[8],否則就是弱規(guī)則。
(1)選擇頻繁項(xiàng)集。關(guān)聯(lián)規(guī)則挖掘并不是每次都要挖掘所有的屬性關(guān)聯(lián),對(duì)數(shù)據(jù)庫中無須挖掘的屬性謂詞,算法不予考慮,進(jìn)行剔除。
(2)基于維數(shù)目約束。通常,一個(gè)規(guī)則的有用與否最終取決于用戶的需要,所以只有用戶才能決定關(guān)聯(lián)規(guī)則的取舍。為此,算法中加入了number參數(shù)(用戶想知道的最大的頻繁項(xiàng)集數(shù)目)作為維數(shù)目約束值,算法根據(jù)number值選擇掃描到L[2],L[3]……L[number]個(gè)鏈表。
(3)基于事務(wù)集的約簡(jiǎn)。第一次迭代掃描數(shù)據(jù)庫D1后,剔除不可能是頻繁1-項(xiàng)集的事務(wù),更新數(shù)據(jù)庫為D2,第二次迭代掃描數(shù)據(jù)庫D2后,剔除不可能是2-項(xiàng)集的元素,更新數(shù)據(jù)庫為D3,以此類推,直到數(shù)據(jù)庫Dnumber。從而達(dá)到降低I/O開銷,減少數(shù)據(jù)庫和謂詞集存儲(chǔ),提高挖掘速度的目的。
(4)基于鏈表結(jié)構(gòu)。從第二次掃描數(shù)據(jù)庫D2開始,將對(duì)應(yīng)的事務(wù)數(shù)據(jù)庫拆解成用戶需要的各類候選2-、3-……K-候選集,并把結(jié)果存入對(duì)應(yīng)的鏈表結(jié)構(gòu)中,直至產(chǎn)生所有的候選謂詞集。最后,分別計(jì)算各候選集的支持度,滿足最小支持度和最小置信度的即為頻繁k項(xiàng)集。
根據(jù)上述改進(jìn)算法思想得到該算法的偽代碼如下:
輸入:原始數(shù)據(jù)庫D1,最小支持度support,最小置信度confidence,最大頻繁項(xiàng)集數(shù)量number。
輸出:正關(guān)聯(lián)規(guī)則positive rule、負(fù)關(guān)聯(lián)規(guī)則negative rule。
//找出候選L1,在LK中加入頻繁1-項(xiàng)謂詞集,在Ck中加入候選1謂詞集。
Dime set=get Multi Dime(t.屬性);//搜索頻繁謂詞集,并計(jì)數(shù)
根據(jù)上述算法設(shè)計(jì)思想,進(jìn)行系統(tǒng)的分析和設(shè)計(jì)。藥物副作用挖掘系統(tǒng)的結(jié)構(gòu)如圖1所示,具體包括三個(gè)模塊,從上到下分別是模型可視化分析模塊、關(guān)聯(lián)規(guī)則算法模塊和數(shù)據(jù)預(yù)處理模塊。
每個(gè)副作用擁有一個(gè)UMLS(Unified Medical Language System)一體化醫(yī)學(xué)語言系統(tǒng)的概念編號(hào)CUI,并由含義相同的一種或者多種副作用名稱構(gòu)成[10]。具體如表1所示。
圖1 關(guān)聯(lián)規(guī)則挖掘系統(tǒng)架構(gòu)
表1 UMLS分配
實(shí)驗(yàn)平臺(tái):PC為I5-7200U-2.5GHZ,雙核,8GB的DDR4內(nèi)存,256GB固態(tài)硬盤,widows7旗艦版64位。用戶操作子系統(tǒng)的WEB服務(wù)器采用Apache的tomcat7作為容器管理,數(shù)據(jù)庫采用微軟的SQL Server2008R2存儲(chǔ)用戶操作數(shù)據(jù)。數(shù)據(jù)挖掘子系統(tǒng)采用Weka 3.6作為基礎(chǔ)框架做進(jìn)一步擴(kuò)展開發(fā)。對(duì)Apriori算法和本文改進(jìn)算法進(jìn)行模擬,得到如圖2所示的執(zhí)行時(shí)間比較??梢?,筆者改進(jìn)算法在各個(gè)支持度下都比Apriori算法執(zhí)行效率高。
應(yīng)用筆者改進(jìn)算法,得到如表2、表3和表4所示的,頻繁1-項(xiàng)集、頻繁2-項(xiàng)集和頻繁3-項(xiàng)集出現(xiàn)頻率最高的5個(gè)。得出結(jié)論,藥物副作用中,皮膚損傷最為常見,當(dāng)2個(gè)副作用同時(shí)出現(xiàn)時(shí),皮膚損傷和視覺系統(tǒng)傷害最為常見。當(dāng)3個(gè)副作用同時(shí)出現(xiàn)時(shí),皮膚損傷、神經(jīng)系統(tǒng)損害和重度全身性損害最為常見。
圖2 執(zhí)行時(shí)間比較
實(shí)驗(yàn)結(jié)果分析,從表5得到部分關(guān)聯(lián)規(guī)則,第一項(xiàng)表示,當(dāng)皮膚損害和視覺系統(tǒng)傷害同時(shí)發(fā)生時(shí),有62%的可能性會(huì)同時(shí)導(dǎo)致重度全身性傷害,以及有62%的可能性肝膽不受損。最后一項(xiàng)表示,當(dāng)重度全身性傷害和非呼吸系統(tǒng)損害同時(shí)發(fā)生時(shí),有54%的可能性會(huì)使肝膽傷害,以及有54%的可能性神經(jīng)系統(tǒng)不受傷害。
表2 頻繁1-項(xiàng)集頻率最高的前5個(gè)
表3 頻繁2-項(xiàng)集頻率最高的前5個(gè)
表4 頻繁3-項(xiàng)集頻率最高的前5個(gè)
表5 部分關(guān)聯(lián)規(guī)則
筆者對(duì)經(jīng)典關(guān)聯(lián)規(guī)則算法進(jìn)行升級(jí)改造,提出了基于維數(shù)目約束、事務(wù)集約簡(jiǎn)的關(guān)聯(lián)規(guī)則挖掘算法,給出了改進(jìn)算法的偽代碼,并將算法思想,應(yīng)用于藥物副作用挖掘系統(tǒng)。該算法與經(jīng)典Apriori算法相比,提高了挖掘速度,減少了存儲(chǔ)空間,能夠更加有效地挖掘出有研究?jī)r(jià)值的藥物副作用關(guān)聯(lián)規(guī)則,為藥物研制和使用提供了科學(xué)決策依據(jù),具有重要的意義。