(中國(guó)運(yùn)載火箭技術(shù)研究院,北京 100076)
近年來(lái)數(shù)據(jù)挖掘技術(shù)得到了迅速的發(fā)展,如相似模式搜索,模式聚類,事件檢測(cè),規(guī)則提取等技術(shù)和方法已經(jīng)成功應(yīng)用于金融、醫(yī)療、生物等領(lǐng)域[1]。隨著近年來(lái)飛行任務(wù)的不斷增加,大量飛行器的飛行試驗(yàn)積累了海量遙測(cè)數(shù)據(jù)。飛行器遙測(cè)數(shù)據(jù)是地面運(yùn)管系統(tǒng)判斷其運(yùn)行狀態(tài)的唯一依據(jù)[2],是遙測(cè)地面分析系統(tǒng)的最要組成部分[3]。充分利遙測(cè)數(shù)據(jù)進(jìn)行對(duì)比分析,有助于故障分析和掌握飛行器的飛行特征,并不斷改進(jìn)設(shè)計(jì)以提高飛行器產(chǎn)品的質(zhì)量[4],對(duì)于提高飛行器在軌運(yùn)行的安全性和可靠性具有重要的意義[5]。而我國(guó)在航天領(lǐng)域的大數(shù)據(jù)挖掘還處于理論研究、探索階段。
本文針對(duì)飛行器電源系統(tǒng)遙測(cè)數(shù)據(jù)的關(guān)聯(lián)規(guī)則挖掘算法進(jìn)行了對(duì)比分析,并以基于時(shí)間時(shí)序的飛行器電源系統(tǒng)遙測(cè)參數(shù)中,某幾個(gè)參數(shù)之間的關(guān)聯(lián)規(guī)則為例,進(jìn)行試驗(yàn)對(duì)比和數(shù)據(jù)驗(yàn)證,為未來(lái)飛行器遙測(cè)參數(shù)關(guān)聯(lián)規(guī)則挖掘提供參考。
飛行器在地面試驗(yàn)、發(fā)射、在軌飛行等階段均會(huì)產(chǎn)生大量的數(shù)據(jù),數(shù)據(jù)量大是飛行器遙測(cè)數(shù)據(jù)的顯著特點(diǎn)。同時(shí)由于飛行器本身是個(gè)復(fù)雜的系統(tǒng),遙測(cè)數(shù)據(jù)又包含電力、溫度、壓力、速度等各個(gè)方面,因此數(shù)據(jù)種類多也是飛行器遙測(cè)數(shù)據(jù)的明顯特點(diǎn)。在繁多的數(shù)據(jù)中,數(shù)據(jù)類型不僅限于數(shù)字、文本,圖像、視頻、音頻等數(shù)據(jù)的頻繁使用,也使數(shù)據(jù)類型的多樣性特征凸顯出來(lái)。
FP-Growth(Frequent Pattern Growth)算法是一種不產(chǎn)生候選模式,而采用頻繁模式增長(zhǎng)的方法挖掘頻繁模式的算法[6]。它是一種擴(kuò)展的前綴樹(shù)(即FP樹(shù))結(jié)構(gòu),存儲(chǔ)了關(guān)于頻繁模式數(shù)量的重要信息.樹(shù)中只包含長(zhǎng)度為1的頻繁項(xiàng)作為節(jié)點(diǎn),并且那些頻度高的節(jié)點(diǎn)更靠近樹(shù)的根節(jié)點(diǎn),因此,頻度高的項(xiàng)比那些頻度低的項(xiàng)有更多的機(jī)會(huì)共享同一個(gè)節(jié)點(diǎn)[7]?;谶@一特性,可以計(jì)算出各頻繁項(xiàng)間的關(guān)聯(lián)規(guī)則。
基于FP-Growth算法的關(guān)聯(lián)規(guī)則挖掘分為構(gòu)建FP樹(shù),利用FP樹(shù)挖掘頻繁項(xiàng)集,關(guān)聯(lián)規(guī)則挖掘3個(gè)步驟。以飛行器供電系統(tǒng)中電壓與系統(tǒng)指令的遙測(cè)數(shù)據(jù)為例,電壓值的變化與發(fā)出的指令密切相關(guān),假設(shè)由電壓A,B,C和指令D,E構(gòu)成示例數(shù)據(jù)集,如表1所示。其中第一條數(shù)據(jù){A,B}表示電壓A與B在時(shí)刻1時(shí)發(fā)生變化,而第四條數(shù)據(jù){A,B,C,E}表示電壓A,B,C在時(shí)刻4時(shí)發(fā)生變化,同時(shí)指令E發(fā)出。
表1 示例數(shù)據(jù)集
1)構(gòu)建FP樹(shù):
掃描示例數(shù)據(jù)集(表1)中全部數(shù)據(jù),計(jì)算出頻繁項(xiàng)集F1。設(shè)定最小支持度為2,如果任何一個(gè)頻繁項(xiàng)的頻繁度小于等于最小支持度,則將該頻繁項(xiàng)從頻繁項(xiàng)集中刪除。在頻繁項(xiàng)集F1中,頻繁項(xiàng)“E”的頻繁度為2,則從頻繁項(xiàng)集F1中刪除頻繁項(xiàng)“E”。然后將頻繁項(xiàng)集F1按照頻繁度降序排序,得出表2所示結(jié)果。
表2 頻繁項(xiàng)集F1
將示例數(shù)據(jù)集中全部數(shù)據(jù)按照頻繁項(xiàng)集F1中的記錄重新排序,如表3所示。
表3 排序后的數(shù)據(jù)
建立FP樹(shù)根節(jié)點(diǎn)“root”,從根節(jié)點(diǎn)出發(fā),第一條數(shù)據(jù){B,A}各頻繁項(xiàng)“B”和“A”按照順序依次加入FP樹(shù)中,并記錄各節(jié)點(diǎn)頻數(shù)Count為1;當(dāng)?shù)诙l數(shù)據(jù){B,C,D}加入FP樹(shù)時(shí),首個(gè)頻繁項(xiàng)“B”已經(jīng)在FP樹(shù)中存在,則只需將“B”節(jié)點(diǎn)的頻數(shù)Count加1,然后再將頻繁項(xiàng)“C”作為節(jié)點(diǎn)“B”的一個(gè)新子節(jié)點(diǎn)加入FP樹(shù)中從而得到一個(gè)新的分支。如此往復(fù),將表3中每條數(shù)據(jù)依次加入到FP樹(shù)中,得到圖1所示的FP樹(shù)。
圖1 FP樹(shù)構(gòu)建步驟
2)利用FP樹(shù)挖掘頻繁項(xiàng)集:
在得到FP樹(shù)之后,可以進(jìn)行頻繁項(xiàng)集的挖掘。以圖1中構(gòu)建完成的FP樹(shù)為例,首先選擇一分支末端節(jié)點(diǎn)“D”,由“D”向根節(jié)點(diǎn)倒推,找出所有包含節(jié)點(diǎn)“D”的路徑,并找出每個(gè)包含“D”的分支:{B,C,D: 2},{A,C,D: 1},其中“2”和“1”分別表示分支{B,C,D}和{A,C,D}分別出現(xiàn)2次和1次。分支的“Count”值,由分支后綴節(jié)點(diǎn)“D”出現(xiàn)的次數(shù)決定。
除去節(jié)點(diǎn)“D”,我們得到前綴路徑{B,C: 2},{A,C: 1},根據(jù)前綴路徑,創(chuàng)建一棵條件FP樹(shù)。然后獲取前綴路徑的每個(gè)節(jié)點(diǎn)的前綴路徑,并建立條件FP樹(shù),直到條件FP樹(shù)中只包含一個(gè)元素時(shí)返回(如圖2所示)。最后,得到節(jié)點(diǎn)“D”的頻繁項(xiàng)集為{{D},{C,D}}。
圖2 頻繁項(xiàng)集挖掘流程
3)關(guān)聯(lián)規(guī)則挖掘:
通過(guò)FP-Growth算法得到數(shù)據(jù)的頻繁項(xiàng)集后,針對(duì)頻繁項(xiàng)集中的各個(gè)頻繁項(xiàng)構(gòu)建可能的關(guān)聯(lián)規(guī)則。例如,對(duì)“D”的頻繁項(xiàng)集中的頻繁項(xiàng){C,D}而言,可能的關(guān)聯(lián)規(guī)則為{C}->{D},{D}->{C}。
在得到這些可能的關(guān)聯(lián)規(guī)則后,按如下公式計(jì)算置信度:
置信度(A->B)=(同時(shí)包含A和B的頻繁項(xiàng)數(shù)量)/(包含A的頻繁項(xiàng)數(shù)量),
在示例中:
置信度({C}->{D})=(包含{C,D}的數(shù)量:3)/(包含{C}的數(shù)量:4)=0.75,
置信度({D}->{C})=(包含{C,D}的數(shù)量:3)/(包含{D}的數(shù)量:3)=1。
在計(jì)算得到所有關(guān)聯(lián)規(guī)則的置信度后,保留大于置信度最小閾值的關(guān)聯(lián)規(guī)則,就可以得到各頻繁項(xiàng)之間的關(guān)聯(lián)規(guī)則。在例子中,由于{D}->{C}的置信度為1,可以知道指令D發(fā)出一定會(huì)引起電壓C的變化,而{C}->{D}的置信度為0.75,可以得出電壓C的變化有75%的可能是由指令D引起的。
對(duì)于連續(xù)的參數(shù)和離散的指令之間的關(guān)聯(lián)規(guī)則挖掘,連續(xù)參數(shù)的狀態(tài)轉(zhuǎn)換與指令觸發(fā)時(shí)段之間的聯(lián)系對(duì)關(guān)聯(lián)規(guī)則的挖掘有至關(guān)重要的影響?;跔顟B(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則算法,則以此為基礎(chǔ),在連續(xù)參數(shù)的曲線中,提取參數(shù)狀態(tài)轉(zhuǎn)換位置,再與指令觸發(fā)的影響時(shí)域進(jìn)行比對(duì),從而得出參數(shù)與指令間關(guān)聯(lián)規(guī)則的一種算法。
基于狀態(tài)轉(zhuǎn)換提取的的關(guān)聯(lián)規(guī)則算法分為數(shù)據(jù)預(yù)處理,提取數(shù)據(jù)跳變位置,構(gòu)建狀態(tài)矩陣和關(guān)聯(lián)性分析4個(gè)步驟。
1)數(shù)據(jù)預(yù)處理:
對(duì)于試驗(yàn)數(shù)據(jù),首先采取預(yù)處理措施,除去數(shù)據(jù)中的非數(shù)值和異常跳變數(shù)據(jù),以避免異常數(shù)據(jù)對(duì)算法分析的影響。
(1)非數(shù)值處理,即將數(shù)據(jù)中的非數(shù)值(NaN)替換成該幀后一幀或前一幀的數(shù)據(jù)值。
(2)異常跳變數(shù)據(jù)處理,是在非數(shù)值處理后,針對(duì)數(shù)據(jù)中的異常數(shù)據(jù)進(jìn)行的異常過(guò)濾處理。首先,計(jì)算數(shù)據(jù)標(biāo)準(zhǔn)差,并以±1.5倍標(biāo)準(zhǔn)差為預(yù)估異常范圍去篩選異常數(shù)據(jù),并得到異常數(shù)據(jù)集S1。然后,計(jì)算數(shù)據(jù)的二階差分,并以二階差分最大幅度的1/3和10倍標(biāo)準(zhǔn)差作為標(biāo)準(zhǔn),對(duì)異常數(shù)據(jù)集S1進(jìn)行二次篩選。最后,對(duì)異常數(shù)據(jù)集S1中的每一條數(shù)據(jù)進(jìn)行逐一確認(rèn),如果數(shù)據(jù)前后兩幀數(shù)據(jù)均為疑似跳變點(diǎn),且該數(shù)據(jù)跳變幅度在前后數(shù)據(jù)幀跳變幅度的2倍以上,則該數(shù)據(jù)點(diǎn)可以確認(rèn)為異常數(shù)據(jù),并將該數(shù)據(jù)替換成后一幀或前一幀的數(shù)據(jù)值。
2)提取狀態(tài)轉(zhuǎn)換位置:
在數(shù)據(jù)預(yù)處理后,取一次差分前段少量數(shù)據(jù),濾除大于6倍標(biāo)準(zhǔn)差的數(shù)值后,再取其標(biāo)準(zhǔn)差的n倍作為最小閾值標(biāo)準(zhǔn),大于最小閾值的位置,很有可能是狀態(tài)跳轉(zhuǎn)位置。假設(shè)疑似狀態(tài)跳轉(zhuǎn)位置前后的均值和標(biāo)準(zhǔn)差分別是μ1,μ2,σ1,σ2,若其滿足下式則當(dāng)前位置為狀態(tài)轉(zhuǎn)換位置,并將這個(gè)狀態(tài)轉(zhuǎn)換位置加入到狀態(tài)轉(zhuǎn)換位置集S2中。
|μ1-μ2|>n*σ1or|μ1-μ2|>n*σ2
其中:n是置信度水平(默認(rèn)為3),得到的狀態(tài)轉(zhuǎn)換位置如圖3所示,虛線框內(nèi)即為數(shù)據(jù)狀態(tài)轉(zhuǎn)換位置。
圖3 狀態(tài)轉(zhuǎn)換位置示意圖
3)構(gòu)建狀態(tài)轉(zhuǎn)換矩陣:
在得到狀態(tài)轉(zhuǎn)換位置集S2后,對(duì)于參數(shù)的每一幀數(shù)據(jù),按時(shí)序分別用0和1標(biāo)注該數(shù)據(jù)是否發(fā)生狀態(tài)轉(zhuǎn)換,即將集合S2中的每一個(gè)狀態(tài)轉(zhuǎn)換位置的數(shù)據(jù)標(biāo)記為1。基于考慮參數(shù)在指令發(fā)出后變化的延遲性,將狀態(tài)轉(zhuǎn)換位置前后m幀的數(shù)據(jù)范圍作為狀態(tài)轉(zhuǎn)換影響域(轉(zhuǎn)換影響域的范圍會(huì)影響參數(shù)關(guān)聯(lián)性的計(jì)算,m值太小可能會(huì)導(dǎo)致關(guān)鍵關(guān)聯(lián)丟失,m值太大則會(huì)造成過(guò)多冗余,這里m值默認(rèn)為3),同時(shí)狀態(tài)標(biāo)記為1,其他數(shù)據(jù)標(biāo)記為0。這樣可以得到如圖4所示的參數(shù)狀態(tài)轉(zhuǎn)換矩陣A。
圖4 參數(shù)狀態(tài)轉(zhuǎn)換矩陣
4)關(guān)聯(lián)性計(jì)算:
在得到參數(shù)狀態(tài)轉(zhuǎn)換矩陣A之后,按照提取矩陣A中的各列數(shù)據(jù)組成n個(gè)一維數(shù)組,如圖5所示,并將各個(gè)數(shù)組分別相乘,得到的值便是兩個(gè)參數(shù)間的關(guān)聯(lián)度Cij,其中i,j分別代表兩個(gè)不同的參數(shù),即C12表示參數(shù)1和參數(shù)2之間的關(guān)聯(lián)度大小。然后,由計(jì)算得到的關(guān)聯(lián)度集合{C}組成參數(shù)間的關(guān)聯(lián)度表,圖5中三角區(qū)域?yàn)榧蟵C}的值,其他部分由0填充。
在關(guān)聯(lián)度表的基礎(chǔ)上,設(shè)置最小關(guān)聯(lián)度MA(minimum association),篩選關(guān)聯(lián)度表中關(guān)聯(lián)度大于MA(默認(rèn)為2)的值,這些值所在的行列表示的參數(shù),可以視為關(guān)聯(lián)參數(shù)對(duì),每一個(gè)關(guān)聯(lián)參數(shù)對(duì)即為兩條參數(shù)相關(guān)聯(lián)的關(guān)聯(lián)規(guī)則。如圖5中參數(shù)1與參數(shù)n可以組成關(guān)聯(lián)參數(shù)對(duì),則得到一條參數(shù)1與參數(shù)n相關(guān)聯(lián)的關(guān)聯(lián)規(guī)則。
圖5 參數(shù)關(guān)聯(lián)度計(jì)算
為分析FP-Growth算法和基于狀態(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則挖掘算法在遙測(cè)參數(shù)間關(guān)聯(lián)規(guī)則挖掘的表現(xiàn)和可行性,基于Windows7操作系統(tǒng),Python3.8和Tensorflow1.15.0等搭建運(yùn)行環(huán)境,運(yùn)用對(duì)比法設(shè)計(jì)試驗(yàn)[8],通過(guò)對(duì)比兩種算法的準(zhǔn)確率和冗余率,給出一個(gè)更佳的關(guān)聯(lián)規(guī)則挖掘方法。
本次試驗(yàn)以某次飛行器地面試驗(yàn)的供電系統(tǒng)遙測(cè)數(shù)據(jù)中的一段為試驗(yàn)數(shù)據(jù),利用系統(tǒng)發(fā)出的指令與某電路電流和電壓等三十余萬(wàn)條數(shù)據(jù)按時(shí)序構(gòu)成試驗(yàn)數(shù)據(jù)集。其中系統(tǒng)指令為離散型數(shù)據(jù),電流、電壓等參數(shù)隨時(shí)間呈連續(xù)變化。試驗(yàn)中驗(yàn)證數(shù)據(jù)為人工梳理出的參數(shù)與系統(tǒng)指令之間已知的關(guān)聯(lián)表,如表4所示。
表4 支路電流I、電壓與U指令關(guān)聯(lián)表(部分)
試驗(yàn)數(shù)據(jù)通過(guò)分別執(zhí)行FP-Growth算法和基于狀態(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則挖掘算法,對(duì)連續(xù)變化的參數(shù)與離散的系統(tǒng)指令之間的關(guān)聯(lián)規(guī)則進(jìn)行挖掘,得到參數(shù)與指令之間的關(guān)聯(lián)規(guī)則表。再將試驗(yàn)結(jié)果與驗(yàn)證數(shù)據(jù)進(jìn)行對(duì)比,計(jì)算出挖掘結(jié)果的準(zhǔn)確率和冗余率。
試驗(yàn)通過(guò)對(duì)15個(gè)不同參數(shù)與5個(gè)指令之間已知的31條關(guān)聯(lián)規(guī)則進(jìn)行挖掘,F(xiàn)P-Growth算法和基于狀態(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則挖掘算法分別挖掘到55條和37條規(guī)則,兩算法的準(zhǔn)確率和冗余率,如表5所示。
根據(jù)試驗(yàn)結(jié)果可見(jiàn),基于狀態(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則挖掘結(jié)果明顯好于FP-Growth算法。產(chǎn)生這種結(jié)果的主要原因一方面與飛行器供電系統(tǒng)遙測(cè)數(shù)據(jù)的實(shí)際特征有關(guān),在無(wú)指令觸發(fā)情況下,參數(shù)值變化較小,幾乎無(wú)波動(dòng)。如圖6中參數(shù)隨時(shí)間變化結(jié)果,在指令觸發(fā)(圖中虛線處)前后,參數(shù)值幾乎無(wú)變化,曲線近似為直線。而指令的觸發(fā)只是改變參數(shù)的穩(wěn)定域,所以參數(shù)呈“斷崖”式變化。
表5 挖掘結(jié)果準(zhǔn)確率、冗余率
圖6 參數(shù)值跳變前后對(duì)比圖
另一方面,某些指令觸發(fā)次數(shù)少,也是導(dǎo)致FP-Growth算法結(jié)果準(zhǔn)確率低的又一原因,如開(kāi)機(jī)指令(CM1017)和斷電指令(CM1056),這兩個(gè)指令在整個(gè)試驗(yàn)中只能觸發(fā)一次,雖然在FP-Growth算法中也設(shè)定了指令的作用域,但是這樣的觸發(fā)頻率依然很可能被篩選出去,所以無(wú)法被挖掘出來(lái)。
而基于狀態(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則挖掘,則可以很好地利用數(shù)據(jù)的特點(diǎn),準(zhǔn)確地找到數(shù)據(jù)跳變的位置即狀態(tài)發(fā)生轉(zhuǎn)換的時(shí)刻,再去將這些時(shí)刻進(jìn)行關(guān)聯(lián)計(jì)算,從而得出更好的關(guān)聯(lián)結(jié)果。如圖7所示,對(duì)于同一參數(shù)UM7的挖掘,F(xiàn)P-Growth算法的挖掘結(jié)果為CM1001和CM1013兩條指令。而基于狀態(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則挖掘算法在CM1001和CM1013基礎(chǔ)上,準(zhǔn)確地挖掘出開(kāi)機(jī)指令和斷電指令(即圖中CM1017和CM1056兩條指令)共四條指令。
圖7 參數(shù)UM7隨時(shí)間變化與指令觸發(fā)時(shí)刻示意圖
在冗余方面,由于基于狀態(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則挖掘算法在算法設(shè)計(jì)初期考慮到狀態(tài)轉(zhuǎn)換存在延遲性,所以可以更好地處理數(shù)據(jù)發(fā)生狀態(tài)轉(zhuǎn)換后到狀態(tài)轉(zhuǎn)換完成之間數(shù)據(jù)過(guò)渡的不穩(wěn)定期。而FP-Growth算法則是基于頻繁模式,只要數(shù)據(jù)出現(xiàn)次數(shù)高于最小閾值,便可以認(rèn)為是有效頻繁項(xiàng),所以無(wú)法很好地處理過(guò)渡期的非穩(wěn)定數(shù)據(jù)。如圖8所示,在挖掘參數(shù)UM1與指令之間的關(guān)聯(lián)時(shí),基于狀態(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則算法(圖a)很好地挖掘出3條正確關(guān)聯(lián)的指令。而FP-Growth算法(圖b)的挖掘結(jié)果比正確結(jié)果多了兩條,主要因?yàn)镕P-Growth算法將參數(shù)值0也作為一種頻繁項(xiàng)進(jìn)入算法計(jì)算,得到了第一條關(guān)聯(lián)規(guī)則(圖b中CM1017),還有在第一次指令發(fā)出后,參數(shù)UM1發(fā)生一次跳變(即圖b中CM1001)后有一段時(shí)間的過(guò)渡期,過(guò)渡期的存在導(dǎo)致了FP-Growth算法的第二條冗余關(guān)聯(lián)(即圖b中CM1003)。
圖8 冗余對(duì)比
本文對(duì)飛行器遙測(cè)數(shù)據(jù)的關(guān)聯(lián)規(guī)則挖掘算法進(jìn)行研究,通過(guò)試驗(yàn)對(duì)比FP-Growth算法和基于狀態(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則挖掘算法在某次試驗(yàn)數(shù)據(jù)中的關(guān)聯(lián)規(guī)則挖掘的表現(xiàn)可以看出,基于狀態(tài)轉(zhuǎn)換提取的關(guān)聯(lián)規(guī)則挖掘在數(shù)據(jù)狀態(tài)變化的挖掘和在離散數(shù)據(jù)量很少時(shí)的關(guān)聯(lián)規(guī)則挖掘表現(xiàn)更好于FP-Growth算法。這些研究結(jié)論可以為未來(lái)飛行器遙測(cè)數(shù)據(jù)間的關(guān)聯(lián)規(guī)則挖掘以及基于關(guān)聯(lián)規(guī)則的飛行器數(shù)據(jù)異常檢測(cè)等方面提供參考。