本發(fā)明屬于數(shù)據(jù)挖掘、醫(yī)療信息和大數(shù)據(jù)技術(shù)領(lǐng)域,具體涉及一種基于全記憶事件序列挖掘模型的用藥分析方法。
背景技術(shù):
有效的用藥方案對(duì)于患者獲取最佳治療是非常重要的。利用已經(jīng)積累的大規(guī)模的患者臨床用藥歷史數(shù)據(jù)進(jìn)行分析建模,有助于醫(yī)生對(duì)患者下一步用藥提供決策支持。數(shù)據(jù)挖掘方法已經(jīng)被用于用藥分析,傳統(tǒng)的用藥數(shù)據(jù)挖掘方法采用頻繁模式挖掘發(fā)現(xiàn)頻繁出現(xiàn)的用藥組合,推斷藥物之間的關(guān)聯(lián)。然而,一方面,不考慮用藥順序的頻繁模式挖掘忽略了疾病演變的特征對(duì)用藥的影響;另一方面,雖然已有考慮“序”和時(shí)間特征的頻繁序列模式挖掘方法被使用,然而,大量冗余的結(jié)果模式和關(guān)聯(lián)規(guī)則限制了方法的實(shí)際應(yīng)用。更重要的是,患者的用藥并不是簡(jiǎn)單的考慮先后關(guān)系,還需要考慮在治療過(guò)程中前序不同時(shí)間點(diǎn)的用藥對(duì)目標(biāo)時(shí)間點(diǎn)的用藥的影響的差異。
本發(fā)明針對(duì)患者用藥歷史數(shù)據(jù),提出一種基于全記憶事件序列挖掘模型的用藥分析方法。首先,采用事件序列形式建模表示用藥歷史數(shù)據(jù),即形成用藥事件序列;然后,針對(duì)患者疾病隨時(shí)間的變化,以及用藥受不同階段用藥情況的影響,將需要預(yù)測(cè)事件的時(shí)間節(jié)點(diǎn)前的所有事件看作為預(yù)測(cè)事件的記憶,對(duì)預(yù)測(cè)事件記憶加權(quán)構(gòu)成事件記憶特征表示,并構(gòu)建訓(xùn)練數(shù)據(jù)集;再構(gòu)建訓(xùn)練模型,設(shè)置損失函數(shù),求解參數(shù);最后,對(duì)于待預(yù)測(cè)用藥事件序列實(shí)現(xiàn)事件預(yù)測(cè)。該方法不僅考慮了時(shí)間順序,以及不同階段患者用藥的影響差異,而且對(duì)比以往的一階或高階事件序列分析方法,能夠利用盡可能多的數(shù)據(jù)來(lái)用于決策,從而減少?zèng)Q策的失誤。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的主要目的是提供一種基于用藥記錄數(shù)據(jù)的用藥分析方法,能夠使用患者周期內(nèi)所有歷史用藥事件記憶來(lái)幫助預(yù)測(cè)下一個(gè)用藥事件的發(fā)生。
本發(fā)明提供了一種基于全記憶事件序列挖掘模型的用藥分析方法,事件序列的記憶是以預(yù)測(cè)事件的時(shí)間節(jié)點(diǎn)為前提定義的,在預(yù)測(cè)事件的時(shí)間節(jié)點(diǎn)前的所有事件被看作為預(yù)測(cè)事件的記憶。本發(fā)明的主要思想是:將原始用藥數(shù)據(jù)轉(zhuǎn)換成類別型的用藥事件發(fā)生序列,把所有類別型用藥事件序列的每個(gè)用藥事件節(jié)點(diǎn)轉(zhuǎn)換為歐式空間的多維向量表示,此基礎(chǔ)上,根據(jù)要預(yù)測(cè)的用藥事件的前一個(gè)節(jié)點(diǎn)(稱為當(dāng)前事件)來(lái)對(duì)所有歷史記錄的事件(預(yù)測(cè)事件的記憶,設(shè)置一個(gè)特定的記憶長(zhǎng)度閾值,選擇高于該閾值的序列用于構(gòu)造訓(xùn)練數(shù)據(jù)集)加權(quán)求和,形成預(yù)測(cè)事件的記憶的特征表示,作為預(yù)測(cè)下一個(gè)事件向量的分類器的標(biāo)準(zhǔn)輸入,把要預(yù)測(cè)的事件的多維向量表示作為輸出,訓(xùn)練一個(gè)預(yù)測(cè)模型,再把歐式空間的多維向量映射回原來(lái)的類別型空間,使用所有用藥事件序列訓(xùn)練;最后,對(duì)于新的用藥事件序列,輸入訓(xùn)練好的模型,用于預(yù)測(cè)未來(lái)事件。該方法不僅考慮了時(shí)間順序,以及不同階段患者用藥的影響差異,而且對(duì)比以往的一階或高階事件序列分析方法,能夠利用盡可能多的數(shù)據(jù)來(lái)用于決策,從而減少?zèng)Q策的失誤
本發(fā)明提供的基于全記憶事件序列挖掘模型的用藥分析方法,其流程如圖1所示,具體步驟如下:
(1)首先,對(duì)患者歷史用藥數(shù)據(jù)進(jìn)行預(yù)處理,即采集用藥事件序列的原始數(shù)據(jù),將原始用藥數(shù)據(jù)轉(zhuǎn)換成用藥事件發(fā)生序列;然后,對(duì)用藥事件序列數(shù)據(jù)進(jìn)行處理,將序列中的每個(gè)事件都用一個(gè)或多個(gè)類別型的變量進(jìn)行表示;
(2)對(duì)于已經(jīng)處理好的類別型變量表示的事件序列,設(shè)置一個(gè)特定的記憶長(zhǎng)度閾值,選擇高于該閾值的序列用于構(gòu)造訓(xùn)練數(shù)據(jù)集;
(3)采用基于全記憶事件序列方法構(gòu)建訓(xùn)練預(yù)測(cè)模型;
(4)對(duì)于新的用藥事件序列,輸入預(yù)測(cè)模型實(shí)現(xiàn)對(duì)未來(lái)時(shí)間節(jié)點(diǎn)的用藥事件進(jìn)行預(yù)測(cè)。
本發(fā)明步驟(1)中,患者歷史用藥數(shù)據(jù)的事件序列的轉(zhuǎn)化表示,將患者歷史用藥記錄表示為事件,每個(gè)事件用一個(gè)或多個(gè)類別型變量表示。
本發(fā)明步驟(2)中,將患者用藥的歷史事件作為記憶序列,形成記憶特征表示。
本發(fā)明步驟(4)中,把新的用藥事件序列作為訓(xùn)練好的預(yù)測(cè)模型的輸入,使用模型輸出預(yù)測(cè)結(jié)果
本發(fā)明步驟(2)中,構(gòu)造訓(xùn)練數(shù)據(jù)集方法的具體步驟為:
(1)設(shè)置一個(gè)特定的記憶長(zhǎng)度閾值M,要高于這個(gè)閾值的序列才用于構(gòu)造訓(xùn)練數(shù)據(jù)集合;
(2)對(duì)于每個(gè)事件序列,從第M+1個(gè)事件節(jié)點(diǎn)開(kāi)始設(shè)置預(yù)測(cè)節(jié)點(diǎn),采集訓(xùn)練集;預(yù)測(cè)節(jié)點(diǎn)的每個(gè)類別變量作為模型的輸出,當(dāng)前節(jié)點(diǎn)之前的所有節(jié)點(diǎn)作為模型的輸入;預(yù)測(cè)節(jié)點(diǎn)不斷向右移動(dòng),每移動(dòng)一個(gè)時(shí)間節(jié)點(diǎn)就形成一個(gè)或多個(gè)新的訓(xùn)練數(shù)據(jù)。如圖2所示。
本發(fā)明步驟(3)中,構(gòu)建訓(xùn)練模型方法的具體步驟為:
(1)設(shè)置一個(gè)最大記憶數(shù)量T,使用的記憶數(shù)量不能超過(guò)這個(gè)數(shù)量,通常設(shè)置大于數(shù)據(jù)中大部分序列的長(zhǎng)度;
(2)初始化變換矩陣A,把預(yù)測(cè)事件的前一個(gè)事件投影到多維連續(xù)空間中的向量,并求和形成一個(gè)向量q;
(3)初次化變換矩陣B、C,把預(yù)測(cè)事件之前的所有事件(前一個(gè)事件除外)分別投影到多維連續(xù)空間中的多個(gè)向量,這些稱為記憶向量,表示預(yù)測(cè)事件的所有記憶;
(4)使用向量q和經(jīng)過(guò)B投影矩陣變換后的向量做內(nèi)積,形成權(quán)重向量,再使用這些權(quán)重向量和經(jīng)過(guò)C投影矩陣變換后的記憶向量加權(quán)求和,形成最終的一個(gè)記憶向量表示m;
(5)向量m和向量q相加,作為預(yù)測(cè)分類器的輸入,并使用一個(gè)變換矩陣W,投影到原始的離散事件空間,再使用softmax函數(shù),得到下一個(gè)預(yù)測(cè)事件的每一項(xiàng)的概率;
(6)使用交叉熵?fù)p失函數(shù)作為目標(biāo)函數(shù),使用梯度下降的方法求參數(shù),即求得參數(shù)A、B、C和W。
這里,變換矩陣A、B、C可以是隨機(jī)投影矩陣(或其它離散變量的嵌入式方法embedding matrix)。
本發(fā)明方法可根據(jù)患者用藥記錄數(shù)據(jù)來(lái)對(duì)患者用藥情況進(jìn)行數(shù)據(jù)分析,并對(duì)患者后期用藥情況和疾病或并發(fā)癥進(jìn)行推斷。
本發(fā)明方法對(duì)事件序列進(jìn)行預(yù)測(cè),對(duì)比以往的一階或高階事件序列分析方法,能夠利用盡可能多的數(shù)據(jù)來(lái)用于決策,從而減少?zèng)Q策的失誤。
附圖說(shuō)明
圖1為本發(fā)明的挖掘方法流程示意圖。
圖2為本發(fā)明方法中構(gòu)造訓(xùn)練集的方法示例圖。
圖3為發(fā)明方法的具體實(shí)施方式示例圖。
具體實(shí)施方式:
下面給出該方法的具體實(shí)施方式,如圖3所示。
(1)用藥事件序列生成:統(tǒng)計(jì)所有用藥事件序列中的出現(xiàn)的用藥事件內(nèi)容,用離散變量的集合表示用藥事件序列中的每個(gè)用藥事件,例如,(1,3,5)-(6,7)-(8)是一個(gè)長(zhǎng)度為3的用藥事件序列,每個(gè)用藥事件序列的節(jié)點(diǎn)用離散變量的集合表示。例如,上面的用藥事件序列中假設(shè)一共有8種藥物,每種藥物對(duì)應(yīng)的離散變量表示為1~8,那么上述序列表示患者第一次用了1,3,5這三個(gè)編號(hào)的藥物,第二次用了6,7這兩個(gè)編號(hào)的藥物,第三次使用了8這個(gè)編號(hào)的藥物。
(2)訓(xùn)練數(shù)據(jù)集構(gòu)造:使用上述生成的用藥事件離散序列來(lái)構(gòu)建訓(xùn)練數(shù)據(jù)集(X,Y),其中,X是分類器的輸入,Y是分類器的輸出。根據(jù)預(yù)先指定的最短記憶長(zhǎng)度M,把一個(gè)N個(gè)事件的用藥事件序列分為|N-M|個(gè)訓(xùn)練數(shù)據(jù)集合,每個(gè)訓(xùn)練數(shù)據(jù)集合的形式分別是(X=x1,x2,x3,…,xT,y), 其中y是原始序列中xT的下一個(gè)事件,也就是xT+1。例如,對(duì)于上例中的用藥事件序列,如果指定最短歷史記憶長(zhǎng)度為2(即M=2),那么,該序列可以作為其中一個(gè)訓(xùn)練數(shù)據(jù)集,X=[x1,x2]=[(1,3,5),(6,7)],y=(8),其中x1=(1,3,5),x2=(6,7)。
例如:在圖2中,假設(shè)其中一個(gè)事件序列數(shù)據(jù)樣本為(1,2)-(5)-(9,1)-(7)-(13),如果設(shè)置最短記憶長(zhǎng)度為2,則可以形成以下4個(gè)訓(xùn)練樣本:第1和第2個(gè)訓(xùn)練樣本是以第3個(gè)時(shí)間節(jié)點(diǎn)的事件為預(yù)測(cè)事件,標(biāo)簽分別為9和1,輸入為(1,2)-5。第2個(gè)訓(xùn)練樣本以第4個(gè)時(shí)間節(jié)點(diǎn)的事件為預(yù)測(cè)事件,標(biāo)簽為7,輸入為(1,2)-(5)-(9,1)。第4個(gè)樣本以第5個(gè)時(shí)間節(jié)點(diǎn)的事件為預(yù)測(cè)事件,標(biāo)簽為13,輸入為(1,2)-(5)-(9,1)-(7)。
(3)使用一個(gè)隨機(jī)投影矩陣C(或其它離散變量的嵌入式方法embedding matrix),把輸入變量x中的前T-1個(gè)離散變量集合序列[x1,x2,…,xT-2,xT-1]轉(zhuǎn)變成一個(gè)歐氏空間的多維連續(xù)向量序列[xc1,xc2,…,xcT-2,xcT-1],其中,每個(gè)xci是一個(gè)多維連續(xù)向量。實(shí)現(xiàn)的方法是把每個(gè)離散變量用C矩陣的對(duì)應(yīng)的列表示,然后,一個(gè)時(shí)間節(jié)點(diǎn)上的事件的所有離散變量對(duì)應(yīng)的多維連續(xù)變量相加,形成表示一個(gè)事件的多維向量,例如,在上面的例子中,x1=(1,3,5),xc1=(C~1+C~3+C~5)是矩陣C的對(duì)應(yīng)第1,3,5這三列相加,使用數(shù)學(xué)表達(dá)式的方法就是把一個(gè)事件里的每個(gè)離散變量使用one-h(huán)ot方法表示,即xi1=0000010…00,那么xci=C*xi1+C*xi2+C*xi3。
(4)使用另一個(gè)隨機(jī)投影矩陣B(或其它離散變量嵌入式方法),把[x1,x2,…,xT-2,xT-1]用歐氏空間的多維連續(xù)向量表示為[xb1,xb2,…,xbT-2,xbT-1]。其中每個(gè)事件xbi是一個(gè)多維連續(xù)向量。實(shí)現(xiàn)的方法和上面的步驟相同,只是投影矩陣不同。其中B、C矩陣和下面提到的A矩陣都可以看做是特征矩陣,也可以看做是模型的參數(shù),作用在于把離散事件序列的輸入轉(zhuǎn)換為多維度歐式空間的特征。
(5)使用第三個(gè)隨機(jī)投影矩陣A把當(dāng)前事件集合[xT]用一個(gè)歐式空間的高維連續(xù)向量表示[xq]。在上面的例子中,x2=xT=(6,7),那么xq=A~6+B~7,也就是把矩陣A的第6列和第7列相加,來(lái)表示xq這個(gè)歐式空間的多維向量。
(6)把xq分別和[xb1,xb2,…,xbT-2,xbT-1]做向量?jī)?nèi)積,得到一個(gè)權(quán)重向量P=(p1,p2,…,pT-1)。
(7)把權(quán)重向量p1,p2,…,pT-1分別乘以xb1,xb2,…,xbT-2,xbT-1,再求和,得到輸出記憶向量O=p1*xb1+…+pT-1*xbT-1。
(8)把xq和O相加,得到分類器的輸入向量。
(9)分類器的輸出設(shè)置為:y=softmax(W(xq+O)),其中,y是輸出的離散變量。W是D*|V|的矩陣,其中D是提前設(shè)置的多維向量的維度,|V|是所有出現(xiàn)的用藥事件內(nèi)容的個(gè)數(shù)。
(10)設(shè)置交叉熵?fù)p失函數(shù),作為訓(xùn)練這個(gè)預(yù)測(cè)模型的目標(biāo)函數(shù)。其中yik=1,表示一個(gè)訓(xùn)練樣本的輸出為離散索引k(表示藥物標(biāo)號(hào)),yik-就是預(yù)測(cè)的概率取值,取值為0~1之間,由上一步的softmax函數(shù)得到。
(11)訓(xùn)練模型,即求解參數(shù)A、B、C和W,這里使用梯度下降方法求解。
(12)預(yù)測(cè):對(duì)于一個(gè)序列[x1,x2,…,xT],要預(yù)測(cè)xT+1,按照前面(1)~(9)步驟,得到要輸出的事件的類別型變量表示,再根據(jù)事件的內(nèi)容編碼解釋數(shù)據(jù)的內(nèi)容。例如,如果模型的輸出結(jié)果是5,那么對(duì)應(yīng)的預(yù)測(cè)結(jié)果就是5所對(duì)應(yīng)的藥物。
(13)例如:在圖3中,當(dāng)一個(gè)訓(xùn)練樣本為(1,2)-(5)-(9,1)-(7)-(13),其中標(biāo)簽為(13),輸入為(1,2)-(5)-(9,1)-(7),根據(jù)步驟(3)~(10),事件變量(7)和(1,2)-(5)-(9,1)分別形成最后的多維歐式空間中的向量q和m,然后相加作為分類器的輸入,使用W矩陣和softmax函數(shù)形成最后的輸出,并和真實(shí)標(biāo)簽共同計(jì)算交叉熵?fù)p失函數(shù)。