張燕紅 王鳳芹 王麗娜 杜 晶
(海軍航空大學(xué) 煙臺(tái) 264001)
飛參數(shù)據(jù)是借助飛機(jī)上的參數(shù)記錄系統(tǒng)記錄并保存的飛機(jī)飛行過(guò)程中的狀態(tài)、性能信息和關(guān)鍵技術(shù)參數(shù)的一系列數(shù)據(jù),在飛機(jī)研制、飛行狀態(tài)監(jiān)控、飛行質(zhì)量分析評(píng)估、視情維修、事故調(diào)查等應(yīng)用方面有著非常重要的參考價(jià)值。飛參數(shù)據(jù)通常由飛機(jī)的飛行記錄系統(tǒng)自動(dòng)記錄,并以文件形式存儲(chǔ)在SD卡中,其往往涵蓋整個(gè)完整的飛行過(guò)程,未明確劃分飛行階段。然而飛機(jī)飛行狀態(tài)和性能在起飛、巡航、下降等不同飛行階段存在很大差異,飛機(jī)性能監(jiān)控、飛行質(zhì)量分析評(píng)估、飛行安全預(yù)測(cè)等諸多研究均建立在飛行階段劃分的思想上[1~2]。因此,利用飛參數(shù)據(jù)劃分飛行階段對(duì)在飛行領(lǐng)域開(kāi)展深層次研究具有重要的指導(dǎo)意義[3]。
根據(jù)飛行技術(shù)手冊(cè)和飛行特點(diǎn),飛機(jī)的整個(gè)飛行過(guò)程通常可簡(jiǎn)單分為以下五個(gè)通用階段:起飛、爬升、巡航、下降、著陸[4],如圖1所示。目前,飛行階段的劃分一般有兩種方式:一是靠人工經(jīng)驗(yàn)判斷;二是利用飛參數(shù)據(jù)采用算法分類(lèi)模型實(shí)現(xiàn)。顯然,人工經(jīng)驗(yàn)判斷主觀性強(qiáng)、效率低,不能滿(mǎn)足信息系統(tǒng)自動(dòng)化的要求。在利用飛參數(shù)據(jù)劃分飛行階段方面,有的采用主成分分析和支持向量機(jī)的方法,建立飛行階段劃分模型[5]。還有的采用貝葉斯、神經(jīng)網(wǎng)絡(luò)和決策樹(shù)等方法[6]。不同的方法有不同的優(yōu)缺點(diǎn)。
圖1 飛行階段劃分
決策樹(shù)算法是一種典型的分類(lèi)方法。基于訓(xùn)練樣本數(shù)據(jù)集、所有特征和切分點(diǎn),依據(jù)基尼指數(shù)生成決策樹(shù),即分類(lèi)規(guī)則,然后通過(guò)決策樹(shù)對(duì)測(cè)試樣本數(shù)據(jù)進(jìn)行分類(lèi)。而隨機(jī)森林是利用多個(gè)決策樹(shù)對(duì)樣本進(jìn)行訓(xùn)練并預(yù)測(cè)的一種分類(lèi)器,它兼顧了解決分類(lèi)和回歸問(wèn)題的能力。對(duì)于分類(lèi)問(wèn)題,隨機(jī)森林算法輸出的類(lèi)別是由個(gè)別決策樹(shù)輸出類(lèi)別的眾數(shù)決定的。對(duì)于回歸問(wèn)題,隨機(jī)森林把每一個(gè)決策樹(shù)的輸出進(jìn)行平均得到最終的回歸結(jié)果。因此,相比于單一的決策樹(shù)算法,隨機(jī)森林的表現(xiàn)一般要更優(yōu)。本文對(duì)某型飛機(jī)實(shí)際飛行過(guò)程中產(chǎn)生的飛行數(shù)據(jù),采用隨機(jī)森林算法劃分飛行階段,同時(shí)將基于CART決策樹(shù)的隨機(jī)森林算法與單一CART決策樹(shù)算法進(jìn)行對(duì)比仿真,取得了較好的實(shí)驗(yàn)效果,解決了每次依靠人工劃分飛行階段,主觀性強(qiáng)、效率低的問(wèn)題。
飛機(jī)記錄的飛參數(shù)據(jù)通常有幾十種,經(jīng)過(guò)研究發(fā)現(xiàn),影響階段劃分的只有其中的某幾種,而大部分飛參數(shù)據(jù)與階段劃分無(wú)明顯關(guān)聯(lián),稱(chēng)為冗余參數(shù)。如果把所有的飛行參數(shù)都用于構(gòu)建決策樹(shù)模型,就會(huì)使決策樹(shù)有非常多的分叉,復(fù)雜臃腫,甚至導(dǎo)致誤判。因此在使用決策樹(shù)和隨機(jī)森林算法構(gòu)建分類(lèi)模型之前,需要對(duì)飛行參數(shù)進(jìn)行約簡(jiǎn)。參數(shù)約簡(jiǎn)的主要思想是去除冗余、無(wú)關(guān)的參數(shù),只保留關(guān)鍵參數(shù),以提高決策效率。
本文所使用的飛參數(shù)據(jù)包含高度、俯仰角、空速、磁航向角度、攻角、升降速度、發(fā)動(dòng)機(jī)轉(zhuǎn)速、機(jī)體軸向加速度、橫滾角等42 個(gè)特征參數(shù)。根據(jù)各個(gè)飛行階段的特點(diǎn),提取的主要參數(shù)為高度、俯仰角、空速、機(jī)體軸向加速度四個(gè)飛行參數(shù),作為特征參數(shù)。
決策樹(shù)算法常見(jiàn)的決策分支方式有三種:基于信息增益的ID3、基于信息增益比的C4.5 和基于基尼指數(shù)的CART。前兩者是基于信息熵的。sklearn中只實(shí)現(xiàn)了ID3 與CART 決策樹(shù)。由于ID3 決策樹(shù)涉及了大量的對(duì)數(shù)運(yùn)算,運(yùn)算復(fù)雜,而CART 決策樹(shù)更適合大規(guī)模樣本處理,因而本文采用CART 決策樹(shù)進(jìn)行飛行階段劃分。
采用CART 決策樹(shù)構(gòu)建分類(lèi)模型時(shí),利用已經(jīng)劃分好飛行階段的飛參數(shù)據(jù)建立訓(xùn)練樣本數(shù)據(jù)集,輸入為訓(xùn)練樣本數(shù)據(jù)集、設(shè)定好基尼指數(shù)的閾值以及樣本個(gè)數(shù)閾值,輸出為CART 決策樹(shù)。建立CART 決策樹(shù)分類(lèi)模型的方法是根據(jù)飛參訓(xùn)練樣本數(shù)據(jù)集,先構(gòu)建根結(jié)點(diǎn),再自頂向下利用飛參訓(xùn)練樣本數(shù)據(jù)集遞歸創(chuàng)建每一個(gè)結(jié)點(diǎn),從而構(gòu)建劃分飛行階段的整個(gè)CART決策樹(shù)。具體步驟如下:
1)判斷結(jié)點(diǎn)中的樣本個(gè)數(shù)是否小于預(yù)定閾值,或者是否沒(méi)有更多特征,如果是,則返回決策樹(shù),停止迭代,算法結(jié)束;如果否,則進(jìn)行第2)步。
2)計(jì)算結(jié)點(diǎn)現(xiàn)有特征對(duì)當(dāng)前訓(xùn)練數(shù)據(jù)集的基尼指數(shù),判斷樣本集的基尼指數(shù)是否小于預(yù)定的閾值,如果是,則返回決策樹(shù),停止迭代,算法結(jié)束;如果否,則進(jìn)行第3)步。
3)在所有特征的所有切分點(diǎn)中,依據(jù)基尼指數(shù)最小的原則,選定最優(yōu)特征與最佳切分點(diǎn),劃分屬性。即根據(jù)選定的最優(yōu)特征與最佳切分點(diǎn),將當(dāng)前結(jié)點(diǎn)生成兩個(gè)子結(jié)點(diǎn),并將訓(xùn)練樣本數(shù)據(jù)集相應(yīng)地也分配到這兩個(gè)子結(jié)點(diǎn)中。
4)對(duì)剛剛生成的兩個(gè)子結(jié)點(diǎn),重復(fù)剛才的步驟1)、2)、3)。
基于決策樹(shù)算法的飛行階段劃分的流程圖如圖2所示。
Python 中sklearn 模塊定義了DecisionTreeClassifier類(lèi)實(shí)現(xiàn)決策樹(shù)算法,關(guān)鍵代碼如下:
#將數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集
x_train,x_test,y_train,y_test=train_test_split(x_train,y_train,test_size=0.5)
#創(chuàng)建決策樹(shù)對(duì)象
clf=DecisionTreeClassifier(criterion='gini',random_state=1,max_depth=4)
#根據(jù)數(shù)據(jù)構(gòu)造決策樹(shù)
model=clf.fit(x_train,y_train)
#預(yù)測(cè)
y_pred=model.predict(x_test)
#計(jì)算準(zhǔn)確度
score_c=clf.score(x_test,y_test)
隨機(jī)森林是利用多個(gè)決策樹(shù)對(duì)樣本進(jìn)行訓(xùn)練并進(jìn)行預(yù)測(cè)的一種分類(lèi)器,它的基礎(chǔ)是決策樹(shù)。一個(gè)測(cè)試樣本,對(duì)于決策樹(shù)算法,只能有一個(gè)分類(lèi)結(jié)果;而對(duì)于隨機(jī)森林算法,森林中的每個(gè)決策樹(shù)都會(huì)有一個(gè)分類(lèi)結(jié)果。隨機(jī)森林算法會(huì)根據(jù)各個(gè)決策樹(shù)的分類(lèi)結(jié)果,將投票次數(shù)最多的類(lèi)別定為最后的輸出類(lèi)別。隨機(jī)森林算法能處理高維特征,不容易產(chǎn)生過(guò)擬合,模型訓(xùn)練速度比較快,特別是對(duì)規(guī)模較大的數(shù)據(jù)而言[11]。
本文設(shè)計(jì)的隨機(jī)森林分類(lèi)模型采用的是有放回的抽取飛參數(shù)據(jù)。根據(jù)前面的分析,仍然選取飛機(jī)的高度、俯仰角、空速以及機(jī)體軸向加速度四個(gè)飛行參數(shù)作為特征參數(shù),劃分飛行階段。
從原始數(shù)據(jù)集S 中有放回地隨機(jī)抽取2/3,構(gòu)造子數(shù)據(jù)集,作為每個(gè)決策樹(shù)的訓(xùn)練樣本集S,再?gòu)倪x取的4 個(gè)飛行參數(shù)中隨機(jī)選取兩個(gè),作為CART 決策樹(shù)的特征輸入量。再?gòu)倪x出的特征子集中選擇基尼指數(shù)在最小情況下時(shí)進(jìn)行分裂。
基于隨機(jī)森林算法的飛行階段劃分流程圖如圖3所示。
圖3 隨機(jī)森林算法流程圖
Python 中sklearn 模塊定義了RandomForest-Classifier類(lèi)實(shí)現(xiàn)隨機(jī)森林算法。關(guān)鍵代碼如下:
#將數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集
x_train,x_test,y_train,y_test=train_test_split(x_train,y_train,test_size=0.5)
#創(chuàng)建隨機(jī)森林對(duì)象
rfc=RandomForestClassifier(random_state=1,criterion='gini',n_estimators=25)
#根據(jù)數(shù)據(jù)構(gòu)造隨機(jī)森林
model=rfc.fit(x_train,y_train)
#預(yù)測(cè)
y_pred=model.preict(x_test)
#計(jì)算準(zhǔn)確度
score_r=rfc.score(x_test,y_test)
為驗(yàn)證本文算法的有效性,選取某型飛機(jī)連續(xù)飛行31min,采集的共21186 幀數(shù)據(jù)作為數(shù)據(jù)集,該數(shù)據(jù)集包含42 個(gè)飛行參數(shù)。實(shí)驗(yàn)在Windows 10 操作系統(tǒng)下,用Python程序設(shè)計(jì)語(yǔ)言在Anaconda 3環(huán)境中進(jìn)行。
以某機(jī)型的實(shí)際飛行數(shù)據(jù)進(jìn)行基于隨機(jī)森林算法的飛行階段劃分,并仿真對(duì)比決策樹(shù)算法,需首先進(jìn)行數(shù)據(jù)準(zhǔn)備。在飛行過(guò)程中由經(jīng)驗(yàn)豐富的一級(jí)飛行教官人工劃分飛行階段,得到已劃分好飛行階段的飛行參數(shù)數(shù)據(jù)集。為實(shí)驗(yàn)方便,將起飛、爬升、巡航、下降以及著陸這5 個(gè)階段依次編號(hào)為1、2、3、4、5,作為標(biāo)簽。用sklearn 中的train_test_split函數(shù),將上述已劃分好起飛、爬升、巡航、下降以及著陸這5 個(gè)階段的飛行參數(shù)數(shù)據(jù)集分成訓(xùn)練樣本集與測(cè)試樣本集。隨機(jī)森林的輸入為建立好的訓(xùn)練樣本數(shù)據(jù)和其對(duì)應(yīng)的飛行階段編號(hào),以此進(jìn)行訓(xùn)練,得到訓(xùn)練好的隨機(jī)森林模型;然后將建立好的測(cè)試樣本數(shù)據(jù)經(jīng)已訓(xùn)練好的隨機(jī)森林模型進(jìn)行飛行階段的分類(lèi)識(shí)別,輸出分類(lèi)識(shí)別出的飛行階段編號(hào);最后對(duì)比輸出結(jié)果與實(shí)際結(jié)果的匹配度,計(jì)算識(shí)別準(zhǔn)確度,并記錄識(shí)別時(shí)間。得到的實(shí)驗(yàn)結(jié)果如表1所示。
表1 飛行階段的劃分結(jié)果
因而可以得到在測(cè)試樣本數(shù)據(jù)集規(guī)模為10593 幀時(shí),利用決策樹(shù)算法與隨機(jī)森林算法對(duì)測(cè)試數(shù)據(jù)進(jìn)行飛行階段劃分的結(jié)果,如圖4所示。
圖4 各飛行階段的識(shí)別率對(duì)比圖
從實(shí)驗(yàn)結(jié)果可以看出,對(duì)某型飛機(jī)一段時(shí)間的實(shí)際飛行數(shù)據(jù),使用隨機(jī)森林分類(lèi)算法,對(duì)起飛、下降、著陸等特征區(qū)別明顯的階段幾乎可以完全識(shí)別出來(lái),連巡航階段也達(dá)到了99.01%的準(zhǔn)確度。而決策樹(shù)算法在各個(gè)階段的識(shí)別率均低于隨機(jī)森林算法,且只有著陸階段可以完全識(shí)別。以上分析表明,對(duì)于該型飛機(jī),使用隨機(jī)森林算法劃分飛行階段,相比于直接使用決策樹(shù)算法效果更好,而且,實(shí)驗(yàn)表明,在樣本數(shù)量相同的情況下,隨機(jī)森林算法用時(shí)更短,識(shí)別速度更快。
為在明確劃分各個(gè)飛行階段的基礎(chǔ)上,進(jìn)行更為深入的飛行領(lǐng)域研究,本文采用基于CART 決策樹(shù)的隨機(jī)森林算法,對(duì)某型飛機(jī)產(chǎn)生的實(shí)際飛行數(shù)據(jù)進(jìn)行飛行階段劃分,并與單一CART 決策樹(shù)算法進(jìn)行對(duì)比仿真。實(shí)驗(yàn)結(jié)果表明,使用隨機(jī)森林算法進(jìn)行飛行階段劃分的準(zhǔn)確率是非常高的,比決策樹(shù)算法更為有效。所以可以將基于隨機(jī)森林算法的飛行階段劃分方法應(yīng)用到該型飛機(jī)的飛行訓(xùn)練中,以實(shí)現(xiàn)飛行階段劃分的客觀性、高效性和自動(dòng)化,為飛行質(zhì)量評(píng)估、飛機(jī)性能測(cè)試、故障診斷等各種飛行訓(xùn)練系統(tǒng)提供應(yīng)用基礎(chǔ)。