黃黎明,劉振宇
(南華大學(xué)計(jì)算機(jī)學(xué)院,湖南衡陽 421001)
不同領(lǐng)域數(shù)據(jù)日益增長以及通過數(shù)據(jù)分析獲得有用信息和結(jié)果的需求使研究人員面臨各種困難。數(shù)據(jù)收集本身不會(huì)簡單地獲得有用的結(jié)果。因此,有必要將數(shù)據(jù)作為原材料進(jìn)行處理,以便通過執(zhí)行分析方法來提取有用的信息。另外,如果沒有計(jì)算機(jī)或強(qiáng)大的分析工具的幫助,很難從數(shù)據(jù)庫手工或可視化地獲得有用的結(jié)果[1]。數(shù)據(jù)庫中的知識(shí)發(fā)現(xiàn)(KDD)是利用全自動(dòng)方法從數(shù)據(jù)庫中分析和提取有用信息的一般方法,KDD是從數(shù)據(jù)集合中發(fā)現(xiàn)有用知識(shí)的過程[2]。這種廣泛使用的數(shù)據(jù)挖掘技術(shù)是一個(gè)過程,包括數(shù)據(jù)準(zhǔn)備和選擇,數(shù)據(jù)清理,結(jié)合數(shù)據(jù)集的先驗(yàn)知識(shí)和解釋觀測結(jié)果的精確解。KDD的主要應(yīng)用領(lǐng)域包括但不限于營銷,電信和制造領(lǐng)域。
最終,KDD的概念已經(jīng)擴(kuò)展到包括知識(shí)發(fā)現(xiàn)的所有階段。數(shù)據(jù)挖掘是指KDD的一個(gè)階段,其中學(xué)習(xí)算法被應(yīng)用于數(shù)據(jù)[2]。事實(shí)上,這個(gè)概念已經(jīng)擴(kuò)展到隨著時(shí)間的推移并在利用數(shù)據(jù)挖掘之后的知識(shí)發(fā)現(xiàn)的整個(gè)階段[18];因此,數(shù)據(jù)挖掘也可能涉及知識(shí)發(fā)現(xiàn)的整個(gè)過程[3-4]。
在衛(wèi)生保健方面,數(shù)據(jù)挖掘得到了重視。特別是對藥物數(shù)據(jù)進(jìn)行了一些研究[5-6]。一般來說,與其他領(lǐng)域產(chǎn)生的數(shù)據(jù)相比,醫(yī)療數(shù)據(jù)是獨(dú)一無二的。因此,他們需要更高的精度,因?yàn)樘幏桨瑐€(gè)人的私人信息,其中簡單的錯(cuò)誤會(huì)導(dǎo)致相當(dāng)多的倫理問題。據(jù)觀察,由于越來越多地使用技術(shù),特別是基于互聯(lián)網(wǎng)的處方,遇到了一些問題;因此,必須考慮其后果,以減少這些問題的范圍。世界衛(wèi)生組織指出,發(fā)展中國家的許多問題處方?jīng)]有適當(dāng)修復(fù)[16]。此外,不正確或過度的使用藥品與個(gè)人的心態(tài)有關(guān),他們只是覺得更多的藥品消費(fèi)會(huì)導(dǎo)致更快的康復(fù)療程。
文中,已經(jīng)嘗試澄清醫(yī)療處方給藥房帶來的藥物是相互依賴的。為了實(shí)現(xiàn)這一目標(biāo),必須提供一個(gè)完全真實(shí)的數(shù)據(jù)庫,從中可以提取有效的信息。在這方面,暫時(shí)沒有發(fā)現(xiàn)可供研究人員輕松獲取的數(shù)據(jù)庫。因此,藥店的信息是人工收集的,這是非常耗時(shí)的任務(wù)。
近年來,已經(jīng)發(fā)表了許多關(guān)于購買組合分析的論文,并提出了藥店最佳銷售藥品的新方法。還有一些方法可以通過差異化銷售表示選定的最大利潤。例如,ChEMBL是一個(gè)具有醫(yī)學(xué)性質(zhì)并已被人工收集的大型信息數(shù)據(jù)庫[13]。為了提取有用的信息,應(yīng)該在數(shù)據(jù)庫中測試假設(shè)條件,然后跟蹤錯(cuò)誤事件。這些被解決的案例可以被視為數(shù)據(jù)挖掘問題,其中模式檢測是這方面的一個(gè)非常重要的工具。在大多數(shù)提及的論文中,購買組合分析更受歡迎。然而有人開發(fā)了一個(gè)特殊的軟件系統(tǒng)[14],其中由用戶/患者提供的癥狀是輸入,系統(tǒng)然后根據(jù)癥狀開藥。在志愿者協(xié)助下,用戶也可以對其他人推薦的新藥進(jìn)行初步評估。
美國食品和藥物管理局(FDA)還利用數(shù)據(jù)挖掘方法在其數(shù)據(jù)庫中使用了有關(guān)藥物副作用的信息[15]。為此,可以比傳統(tǒng)方法提前5年確定藥物的副作用,成功率為67%[9]。
文中研究的目的是設(shè)計(jì)和實(shí)施一個(gè)系統(tǒng),它可以找到藥房中藥物之間的關(guān)聯(lián)。在這些藥物中發(fā)現(xiàn)這種關(guān)聯(lián)具有以下優(yōu)點(diǎn):
1)幫助藥店內(nèi)部設(shè)計(jì)和合理安排藥物;
2)考慮保險(xiǎn)公司對藥物集合的折扣;
3)準(zhǔn)備相關(guān)藥物,以盡量減少或避免缺少相關(guān)處方藥;因?yàn)槿绻幏街械乃兴幬锒加校蠖鄶?shù)人通常會(huì)從藥店購買藥物。
文中,首先解釋了本研究中應(yīng)用的數(shù)據(jù)挖掘算法和方法。然后,解釋這個(gè)算法在數(shù)據(jù)集上的實(shí)現(xiàn),最后得到規(guī)則和結(jié)果。
1)提出的改進(jìn)算法相比較傳統(tǒng)Apriori算法內(nèi)存消耗和時(shí)間消耗低。
2)無論是稀疏數(shù)據(jù)集還是密集數(shù)據(jù)集中新方法在時(shí)間消耗和內(nèi)存消耗上都要優(yōu)于傳統(tǒng)數(shù)據(jù)挖掘算法。
3)該方案不產(chǎn)生候選項(xiàng)目集,且僅為剪枝數(shù)據(jù)庫構(gòu)建FP-Tree,這樣數(shù)據(jù)庫可以很容易地裝入主存。因此節(jié)省了很多時(shí)間和空間。
為了找到藥物之間的關(guān)聯(lián),應(yīng)該有一個(gè)完整的數(shù)據(jù)庫來提取必要的信息。該數(shù)據(jù)庫應(yīng)包含每種藥物的名稱,類型,代碼,劑量和條件??傊?,這項(xiàng)研究的數(shù)據(jù)庫包括3 444種藥物(藥物)。為了構(gòu)建這樣的數(shù)據(jù)庫,處方在藥店人工收集的。然后,編寫軟件代碼用于將這些處方輸入到數(shù)據(jù)庫中。在下一步中,為了使本研究中應(yīng)用的數(shù)據(jù)挖掘軟件能夠輕松地處理該數(shù)據(jù)庫,該數(shù)據(jù)庫中的數(shù)據(jù)被轉(zhuǎn)換為單一格式。然后,從這些數(shù)據(jù)集中提取關(guān)聯(lián)規(guī)則。為此,應(yīng)用了包含不同數(shù)據(jù)挖掘算法的SPSS Clementine軟件[8]。Apriori算法是求解關(guān)聯(lián)規(guī)則的算法之一,然后應(yīng)用于本研究中。這種算法的優(yōu)點(diǎn)是它將搜索問題減少到可控和可管理的大小[7]。這對于減少搜索空間也非常有用。
該算法是在數(shù)據(jù)庫或數(shù)據(jù)集內(nèi)的數(shù)據(jù)之間查找關(guān)聯(lián)規(guī)則的傳統(tǒng)算法之一。這些規(guī)則主要基于數(shù)據(jù)庫內(nèi)的交易和項(xiàng)目[7]。在這個(gè)討論中,項(xiàng)目是指一組相互關(guān)聯(lián)的數(shù)據(jù),它傳達(dá)了一個(gè)概念(對象或?qū)嶓w)[10],其中應(yīng)該找到一些關(guān)聯(lián)。實(shí)際上,一個(gè)項(xiàng)目可以是單個(gè)成員,只包含一個(gè)數(shù)據(jù)。一組放在一起并構(gòu)建一個(gè)帶有記錄的工作單元的項(xiàng)目稱為事務(wù)處理[11]。例如,在商店中,來自商店的顧客的購買組合是交易,并且購買組合內(nèi)的購買物品是其物品。這些項(xiàng)目中的每一個(gè)都包含一個(gè)或多個(gè)數(shù)據(jù)片段,這些數(shù)據(jù)片段可以是項(xiàng)目編號(hào),項(xiàng)目名稱/標(biāo)識(shí),以及店內(nèi)商品的商品價(jià)格。
該算法在以下兩個(gè)步驟中工作:
1)尋找傳統(tǒng)的項(xiàng)目集;
2)根據(jù)找到的集合構(gòu)造關(guān)聯(lián)規(guī)則;
這個(gè)算法考慮了以下兩個(gè)假設(shè):
1)迭代項(xiàng)集的每個(gè)子集都是迭代的。如果假設(shè)集合{a,b,c}是迭代的,那么集合{a,b}也是迭代的[7];
2)非迭代項(xiàng)集的每個(gè)超集都是非迭代的[7]。
如果集合{a,b}被假定為非迭代的,那么集合{a,b,c}也是非迭代的[12]。
Apriori[7]從每個(gè)時(shí)間長度為K的所選項(xiàng)目集構(gòu)造一系列長度為K+1的大型項(xiàng)目集,并持續(xù)到達(dá)到具有最長長度的項(xiàng)集,前提是支持度超過了所需的閾。
提出的該算法基于Apriori屬性[2],即所有頻繁項(xiàng)目集的非空子集也頻繁。
算法有兩個(gè)過程。在第一個(gè)過程中,在數(shù)據(jù)庫中找到所有這些重復(fù)出現(xiàn)的最大交易稱為最大頻繁項(xiàng)集[15]。然后根據(jù)Apriori屬性獲得這些最大頻繁項(xiàng)目集的所有非空子集。掃描數(shù)據(jù)庫到找到頻繁的元素??赡苡性S多項(xiàng)目是1項(xiàng)集頻繁,但不在最大的頻繁交易中。因此,通過僅考慮數(shù)據(jù)庫中的包含1項(xiàng)集但不包括在最大頻繁項(xiàng)目集中的頻繁元素的那些事務(wù)來修剪數(shù)據(jù)庫?,F(xiàn)在修剪了數(shù)據(jù)庫在平均情況下比實(shí)際數(shù)據(jù)庫小,最好情況下是沒有項(xiàng)目剩下。
對于第二個(gè)過程,將剪枝數(shù)據(jù)庫作為輸入并掃描剪枝數(shù)據(jù)庫,一旦發(fā)現(xiàn)1項(xiàng)集頻繁并從交易中刪除那些不是1-項(xiàng)集頻繁的元素。然后僅基于修剪事務(wù)構(gòu)造FP-tree[6]。通過這種方式,它減少了FP-tree的內(nèi)存問題,因?yàn)閿?shù)據(jù)庫大部分都減少了。在最好的情況下,不需要構(gòu)建FP-tree,因?yàn)樗性囟荚诘谝徊肯日业搅?。在最壞的情況下,如果沒有最大的頻繁交易存在,那么只有進(jìn)行第二部,計(jì)算性能與FP-tree相同。這個(gè)想法關(guān)鍵之一在找到最大頻繁項(xiàng)集和形成FP-tree之后修剪數(shù)據(jù)庫,修剪數(shù)據(jù)從而減少了FP-tree中的內(nèi)存問題并使快速挖掘過程成為可能。更詳細(xì)的步驟如下:
過程1:
輸入:數(shù)據(jù)庫D,最小支持度。
第1步:取2維數(shù)組;將帶重復(fù)次數(shù)計(jì)數(shù)的事務(wù)置于2維數(shù)組中。
步驟2:根據(jù)每個(gè)模式的長度以遞增順序排列交易。
第3步:從數(shù)量大于或等于最小支持度的數(shù)組中查找稱為最大頻繁項(xiàng)集或事務(wù)的最大事務(wù)(k-項(xiàng)集)。如果k-項(xiàng)集計(jì)數(shù)小于最小支持度,然后找到k-項(xiàng)集和(k-1)項(xiàng)集連接為下一個(gè)(k-1)最大項(xiàng)目集合等,直到?jīng)]有發(fā)現(xiàn)項(xiàng)目集計(jì)數(shù)比最低的支持更大的項(xiàng)目集。如果沒有找到這樣的事務(wù),則轉(zhuǎn)到過程2。
步驟4:一旦發(fā)現(xiàn)最大的頻繁項(xiàng)目集,根據(jù)Apriori屬性其所有非空子集是頻繁的。
步驟5:剩余的項(xiàng)目集不包含在最大頻繁項(xiàng)目集中,但他們很頻繁。因此,找到所有頻繁的1項(xiàng)目集并修剪僅考慮那些包含頻繁的1-項(xiàng)集元素但不包含在最大頻繁項(xiàng)中的事務(wù)數(shù)據(jù)庫。
輸出:部分或全部頻繁項(xiàng)目集,修剪數(shù)據(jù)庫D1。
過程2:
輸入:修剪數(shù)據(jù)庫D1,最小支持度
第1步:從修剪過的數(shù)據(jù)庫中查找頻繁的1項(xiàng)目集;刪除所有這些
不是頻繁的1-項(xiàng)集的項(xiàng)目。
步驟2:通過前面討論的FP-樹算法[6]的程序按以下步驟構(gòu)造剩余頻繁項(xiàng)目集的FP-tree。
輸出:剩余頻繁項(xiàng)目集。
支持度表示前項(xiàng)與后項(xiàng)在一個(gè)數(shù)據(jù)集中同時(shí)出現(xiàn)的頻率。在這個(gè)討論中,交易意味著處方。術(shù)語“元組”有時(shí)用來代替事務(wù)。換句話說,規(guī)則“支持度”表示包括集合A和B的交易與集合D(1)中可用的總交易的比率,
本研究的輸入數(shù)據(jù)被轉(zhuǎn)換為文本文件,然后作為輸入源應(yīng)用于Clementine。存儲(chǔ)的數(shù)據(jù)從文件中讀取并發(fā)送到流。在我們提出的Apriori算法實(shí)現(xiàn)后,獲得了9條規(guī)則,這些規(guī)則顯示為先行和后續(xù)。圖1顯示了藥物之間的關(guān)聯(lián)。在這個(gè)圖中,較強(qiáng)的關(guān)聯(lián)用粗線表示,較弱的關(guān)聯(lián)用虛線表示。
規(guī)則1顯示了獲得的關(guān)聯(lián)規(guī)則。然后,研究獲得的規(guī)則。
規(guī)則1和2:
規(guī)則1:如果維生素D3,則鈣D片;
規(guī)則2:如果鈣-D則維生素D3。
得到的結(jié)果顯示維生素D和鈣都具有最大置信系數(shù),并在表格的最上面一行給出。這兩種藥物都被稱為先導(dǎo)及后繼的。維生素D和鈣是人體內(nèi)兩種重要的物質(zhì)。鈣在骨骼力量,牙齒,凝血,神經(jīng)收縮和肌肉中起著有效的作用。
圖1 藥物關(guān)系圖
表1 Apriori算法的結(jié)果
規(guī)則3:如奧美拉唑則甲硝唑
規(guī)則10:如甲硝唑則奧美拉唑
甲硝唑和奧美拉唑是用于治療消化問題的藥物。甲硝唑是一種抗菌藥物,奧美拉
唑具有抗?jié)冏饔谩榱酥斡罎?,這兩種藥物大多是一起開處方。更具體地說,如果開處方甲硝唑,奧美拉唑的處方概率為28.6%。
規(guī)則4:如果維生素D3則吡羅昔康G
吡羅昔康凝膠是一種消炎藥,對緩解疼痛,肌肉僵硬和炎癥非常有效。維生素D對增強(qiáng)骨骼,增強(qiáng)神經(jīng),治療收縮和肌肉痙攣以及治療肌肉無力非常有用。該規(guī)則意味著,如果患者服用維生素D,那么匹羅昔康凝膠也將以25%的置信系數(shù)進(jìn)行處方。
規(guī)則5:如果倍他米松則茶堿G
茶堿G用于治療支氣管痙攣,并與倍他米松一起處方,作為治療季節(jié)性過敏,哮喘和支氣管炎的抗組胺藥。
規(guī)則6:如阿莫西林則甲硝唑
阿莫西林是青霉素類抗生素藥物,用于治療許多感染,特別是耳部或呼吸道感染。甲硝唑也是一種抗菌藥物,用于治療感染。
本文的目的是基于藥店的處方來獲取藥物間的關(guān)聯(lián)規(guī)則。由于處方藥不是隨機(jī)排列在一起,而是根據(jù)患者的疾病和癥狀,使用處方內(nèi)藥物可以發(fā)現(xiàn)處方藥之間的關(guān)聯(lián)。為此,從藥店的銷售訂單收集處方及其藥物數(shù)據(jù)庫。為此,編寫一個(gè)程序。然后將這些數(shù)據(jù)的格式轉(zhuǎn)換為適用于Clementine[8]軟件的格式。通過在此軟件中應(yīng)用Apriori算法來識(shí)別一些關(guān)聯(lián)規(guī)則。已經(jīng)確定維生素D和鈣是最相關(guān)的藥物,并且在大多數(shù)處方中彼此應(yīng)用。奧美拉唑和甲硝唑在關(guān)聯(lián)方面排名第二。本文還發(fā)現(xiàn)并討論了其他關(guān)聯(lián)規(guī)則。
應(yīng)用其他算法找到這些數(shù)據(jù)的關(guān)聯(lián)規(guī)則是繼續(xù)本文工作的一個(gè)建議思路。處理這些藥物在處方中關(guān)聯(lián)的其他方面也是另一個(gè)建議。在這項(xiàng)研究中解決的最重要的問題是難以完成的數(shù)據(jù)收集,因?yàn)闇y試中參與的藥店是手工保存處方。他們必須轉(zhuǎn)換成電腦處方。因此,建議通過電腦收集那些接受處方的藥店的數(shù)據(jù),如果有幾家藥店,可以進(jìn)行比較。如果收集來自不同地理區(qū)域的藥店的數(shù)據(jù)樣本,則可以獲得更好的比較結(jié)果。