王曉東, 馬旭穎
(上海船舶運輸科學研究所 艦船自動化系統(tǒng)事業(yè)部,上海 200135)
相比互聯(lián)網(wǎng)等新興行業(yè),船舶行業(yè)在大數(shù)據(jù)與人工智能(Artificial Intelligence,AI)的結(jié)合應用方面起步較晚,所做的工作相對滯后。船舶行業(yè)涉及到很多業(yè)務,包括船舶設(shè)計、船舶建造和貨物運輸?shù)?,因此蘊含有大量有價值的數(shù)據(jù)信息。將大數(shù)據(jù)分析技術(shù)應用到船舶行業(yè)中,不僅能節(jié)省船舶運輸成本,而且能更好地對船舶設(shè)備進行故障診斷[1],大大提升船舶的運行效率。
本文以船舶柴油機的故障診斷為例,研究將大數(shù)據(jù)分析方法和支持向量機(Support Vector Machine,SVM)模型算法應用到柴油機故障診斷中的可行性,為船舶行業(yè)提供一種基于大數(shù)據(jù)分析的船舶設(shè)備故障診斷方法。
隨著社會的不斷發(fā)展、科技的不斷進步,大數(shù)據(jù)分析技術(shù)越來越成熟,已廣泛應用到很多行業(yè)中。在船舶行業(yè),目前已有很多船企和船舶組織將大數(shù)據(jù)分析技術(shù)應用到其實際業(yè)務中,取得了良好的效果。
1)航行中的船舶能不間斷地采集其主要設(shè)備的運行數(shù)據(jù),通過對這些數(shù)據(jù)進行分析,判斷主要設(shè)備的運行狀態(tài),在此基礎(chǔ)上,根據(jù)主要設(shè)備的運行數(shù)據(jù)要求預測其故障發(fā)生概率,從而提前采取設(shè)備維護措施,為設(shè)備的正常運行提供保障。
2)船企通過對船舶航行數(shù)據(jù)進行采集、分析和預測,獲得船舶的主機功率、航速、航行過程中的能耗、各船用設(shè)備的運行狀態(tài)和航行區(qū)域的海況等數(shù)據(jù)。通過對這些數(shù)據(jù)進行分析,了解海況對航速、航行能效、主機功率和各類設(shè)備的運行狀態(tài)的影響。
3)應用大數(shù)據(jù)分析技術(shù)能得到準確測量和預測清理水下船體和螺旋槳表面附著物的最佳時間,并進一步分析出船底污物與船舶航行時間和航線之間的關(guān)系,結(jié)合進塢維修時測算的清污成本就可預測出能使成本最低的進塢維修、清污時間節(jié)點。
4)應用大數(shù)據(jù)分析技術(shù)能大大提高船舶節(jié)能減排的效率。船企能通過基于大數(shù)據(jù)分析技術(shù)的船舶航行能源需求預測系統(tǒng)監(jiān)控船位、柴油發(fā)動機能耗和轉(zhuǎn)速等數(shù)據(jù),實現(xiàn)對船舶燃油情況的實時遠程監(jiān)測。同時,能通過實時采集數(shù)據(jù)并進行大數(shù)據(jù)分析,根據(jù)柴油機油耗量、船舶排水量和航速之間的關(guān)系,對船舶能耗策略進行優(yōu)化,得到一個能指導船舶運行在最佳工作點上的能耗指標,實現(xiàn)船舶能耗最少的目標。
5)應用大數(shù)據(jù)分析技術(shù)可對船舶設(shè)備進行故障診斷。通過采集船舶設(shè)備的重要參數(shù),如柴油機轉(zhuǎn)速、柴油機功率和柴油機滑油壓力等,并應用大數(shù)據(jù)分析技術(shù)分析、預測船舶設(shè)備的故障發(fā)生概率,達到及時消除故障和預測故障發(fā)生的目標,大大提高船舶航行的安全性和可靠性。
SVM屬于有監(jiān)督的機器學習算法,可用于對離散因變量進行分類和對連續(xù)因變量進行預測,能將低維度的線性不可分的空間轉(zhuǎn)換為高維度的線性可分的空間。該算法的核心思想是利用某些支持向量構(gòu)成的“超平面”,對不同類別的樣本點進行劃分(見圖1)。該模型算法的優(yōu)點有:
圖1 SVM算法核心思想示意
1)有很好的魯棒性,能避免“維度災難”的發(fā)生(模型計算的復雜度不會隨數(shù)據(jù)維度的增多而提高);
2)有很好的泛化能力,能避免模型過擬合;
3)能避免模型在運算過程中出現(xiàn)局部最優(yōu)。
SVM模型算法分為線性可分模型算法和非線性模型算法2種,其中線性可分的SVM模型示意見圖2。
圖2 線性可分的SVM模型示意
通過推導得出SVM線性可分模型算法的目標函數(shù)[2]為
(1)
(2)
αi≥0
(3)
式(1)~式(3)中:xi為樣本點;yi為樣本點所屬的類別;αi為拉格朗日乘子;(xi·xj)為2個樣本點的內(nèi)積。計算分割面w′x+b=0的參數(shù)w和b[2],有
(4)
(5)
當遇到樣本點線性不可分的情況(見圖3)時,解決方法是將二維線性不可分樣本映射到高維空間中,使樣本點在高維空間中線性可分(見圖4)。
圖3 線性不可分樣本示意
圖4 二維樣本映射到高維空間示意
通過推導得出SVM非線性模型算法的目標函數(shù)[2]為
(6)
(7)
0≤αi≤C
(8)
式(6)~式(8)中:內(nèi)積φ(xi)·φ(xj)可利用核函數(shù)替換,即K(xi·xj)=φ(xi)·φ(xj);C為懲罰系數(shù)值,默認為1。推導出線性“超平面”參數(shù)w和b的值[2]為
(9)
(10)
核函數(shù)可選擇線性核函數(shù)、多項式核函數(shù)、高斯核函數(shù)和Sigmoid核函數(shù)等。以高斯核函數(shù)為例,其表達式為
(11)
故對應的分割“超平面”為
(12)
式(11)和式(12)中:γ為高斯核函數(shù)的參數(shù)[2]。
船舶柴油機是船舶動力裝置的核心設(shè)備,下面以該設(shè)備為例進行船舶設(shè)備故障診斷分析。若該設(shè)備頻繁發(fā)生故障,會影響船舶的正常航行,因此保證船舶柴油機正常工作非常重要。船舶柴油機滑油系統(tǒng)是船舶柴油機中最重要的系統(tǒng),其作用是通過潤滑油保證柴油機的零件表面潤滑,以減小其摩擦阻力和零件間的磨損,并帶走摩擦產(chǎn)生的熱量和磨損產(chǎn)物,同時具有防腐、傳遞動力和減輕噪聲等作用。若柴油機滑油系統(tǒng)出現(xiàn)故障,會導致柴油機降速運行,甚至停止運行,造成重大事故[3]。
船舶柴油機長時間工作之后,受機器振動和機器零件磨損、疲勞等因素的影響,其滑油系統(tǒng)可能會發(fā)生故障。例如,某油船在長時間航行之后,其柴油機滑油系統(tǒng)油泵出口壓力突然從0.42 MPa降到0.23 MPa,造成柴油機主機降速,險些引發(fā)重大事故。經(jīng)過排查得知,該問題是第四缸曲柄箱內(nèi)零件斷裂導致的[3]。
通過分析可知,船舶柴油機各工況的運行時間和超過主機額定功率的運行時間等因素與柴油機零件的磨損和疲勞存在對應關(guān)系,因此也與柴油機滑油壓力低的故障存在對應關(guān)系[4]。由此,可采用SVM模型算法分析船舶柴油機滑油壓力低的故障與船舶柴油機各工況的運行時間和超過主機額定功率的運行時間等因素之間的關(guān)系。通過采集船舶航行數(shù)據(jù),采用SVM模型算法對“柴油機滑油壓力低”這個故障點進行預測。
Python語言屬于解釋型腳本語言,具有簡潔、易讀和可擴展等特點,廣泛應用于科學計算、大數(shù)據(jù)統(tǒng)計、AI、軟件開發(fā)和網(wǎng)絡(luò)爬蟲等領(lǐng)域中。本文采用Python語言編寫程序,結(jié)合其自帶的sklearn機器學習模塊,實現(xiàn)SVM模型算法的實際應用。
采用某船6個月的航行數(shù)據(jù)進行大數(shù)據(jù)分析,這些數(shù)據(jù)為船舶每天航行之后保存的數(shù)據(jù),包括各工況的運行時間、超過主機額定功率運行時間和柴油機滑油壓力低故障報警等。
1)采集數(shù)據(jù)之后,需對這些數(shù)據(jù)進行清洗,包括查看數(shù)據(jù)集中是否存在數(shù)據(jù)缺失問題、數(shù)據(jù)是否具有完整性和一致性、數(shù)據(jù)中是否存在異常值等。當數(shù)據(jù)集中存在數(shù)據(jù)缺失問題時,采用替換法,用均值替換缺失值;當數(shù)據(jù)集中存在異常數(shù)據(jù)(即遠離正常值的數(shù)值)時,采用刪除法刪除這些異常數(shù)據(jù)。
2)對數(shù)據(jù)進行轉(zhuǎn)化處理,將每天各工況的運行時間數(shù)據(jù)轉(zhuǎn)化為2次柴油機滑油壓力低故障報警之間的時間數(shù)據(jù),每當出現(xiàn)新的報警時,就將運行時間數(shù)據(jù)從0開始累加;對柴油機滑油壓力低故障進行歸一化處理,報警數(shù)據(jù)轉(zhuǎn)化為1,正常數(shù)據(jù)轉(zhuǎn)化為0。數(shù)據(jù)采集點對應變量見表1。將柴油機滑油壓力低故障作為特征值。
表1 數(shù)據(jù)采集點對應變量
3)采用Python語言對數(shù)據(jù)進行訓練集和測試集拆分,同時采用網(wǎng)格搜索法選擇最佳懲罰系數(shù)C,采用SVM模型對訓練集數(shù)據(jù)進行訓練,訓練之后在測試集中進行測試。
4)對比SVM線性模型算法與SVM非線性模型算法的測試結(jié)果。選擇2個模型中訓練效果更好、滿足數(shù)據(jù)擬合要求的模型作為該船的SVM模型。
采用SVM模型算法的工作流程見圖5。
圖5 采用SVM模型算法的工作流程
首先采用SVM線性模型算法建模,采用Python語言編寫的代碼如下:
1. from sklearn import svm
2. import pandas as pd
3. from sklearn import mdel_selection
4. datas=pd.read_csv(r'C:UsersNeighborWangDesktopDatas.csv')
5. predatas=datas.columns[1:]
6. x_trainSVM,x_testSVM,y_trainSVM,y_testSVM=model_selection.train_test_split(datas[predatas],datas.柴油機滑油壓力報警,test_size=0.25,random_state=1234)
7. C=[0.05,0.1,0.5,1,2,5]
8. paramSVM={'C':C}
9. model_linear_svc=model_selection.GridSearchCV(estimator=svm.LinearSVC(),param_grid=paramSVM,scoring='accuracy',cv=5,verbose=1)
10. model_linear_svc.fit(x_trainSVM,y_trainSVM)
11. model_linear_svc.best_params_,model_linear_svc.best_score_
12. Out[11]: #輸出結(jié)果
13. ({'C': 5}, 0.9259259259259259)
14. preModel_linear_svc=model_linear_svc.predict(x_testSVM)
15. metrics.accuracy_score(y_testSVM,preModel_linear_svc)
16. Out[13]: #輸出結(jié)果
17. 0.7333333333333333
采用網(wǎng)格搜索法5重交叉驗證之后,發(fā)現(xiàn)SVM線性模型最佳的懲罰系數(shù)C=5,雖然該模型在訓練數(shù)據(jù)集上的平均預測準確率有92.5%,但其在測試數(shù)據(jù)集上的預測準確率只有73.3%,說明存在過擬合現(xiàn)象,故SVM線性可分模型并不適合在該數(shù)據(jù)集上應用。
隨后采用SVM非線性模型算法重新建模,采用Python語言編寫的代碼如下:
1. kernelSVM=['rbf','linear','poly','sigmoid']
2. C1=[0.1,0.5,1,2,5]
3. paramSVM1={‘kernel’:kernelSVM,'C':C1}
4. model_svc=model_selection.GridSearchCV(estimator=svm.SVC(),param_grid=paramSVM1,scoring='accuracy',cv=5,verbose=1)
5. model_svc.fit(x_trainSVM,y_trainSVM)
6. model_svc.best_params_,model_svc.best_score_
7. Out[24]: #輸出結(jié)果
8. ({'C': 0.1, 'kernel': 'rbf'}, 0.9703703703703703)
9. preModel_svc=model_svc.predict(x_testSVM)
10. metrics.accuracy_score(y_testSVM,preModel_svc)
11. Out[25]: #輸出結(jié)果
12. 0.9333333333333333
采用網(wǎng)格搜索法5重交叉驗證之后,發(fā)現(xiàn)模型最佳的懲罰系數(shù)C=0.1,最佳的核函數(shù)kernel為'rbf',即徑向基核函數(shù)。相比SVM線性可分模型,基于核技術(shù)的SVM非線性模型表現(xiàn)出了極佳的應用效果。模型在訓練數(shù)據(jù)集上的平均預測準確率為97%,在測試數(shù)據(jù)集上的預測準確率也有93.3%,說明采用SVM非線性模型擬合和預測該樣本數(shù)據(jù)集是十分有效的,故可采用SVM非線性模型預測船舶柴油機滑油壓力低故障的發(fā)生概率。例如,將采集到的當前變量數(shù)據(jù)輸入到SVM非線性模型預測函數(shù)中,得到預測結(jié)果。若預測結(jié)果是0,則表示大概率不會發(fā)生故障;若預測結(jié)果是1,則表示極大概率會發(fā)生故障。對該過程采用Python語言編寫的代碼如下:
1. #采集到的變量X1-X6的數(shù)據(jù)為[138,174,258,618,594,54]
2. X_In=[138,174,258,618,594,54]
3. #將采集到的變量輸入預測函數(shù)中
4. pre_result=grid_svc.predict([X_In])
5. #輸出預測結(jié)果
6. print(pre_result)
7. #結(jié)果為0,即不會產(chǎn)生故障
8. [0]
當模型提供的預測結(jié)果是會發(fā)生故障時,提前對柴油機滑油系統(tǒng)進行機械和管路檢查,避免發(fā)生滑油壓力低的故障,這樣就能大大提高船舶航行的安全性和經(jīng)濟效益。
本文采用SVM模型算法,利用大數(shù)據(jù)分析了船舶柴油機滑油壓力低故障的發(fā)生概率。模型運算結(jié)果表明,該模型在訓練數(shù)據(jù)集和測試數(shù)據(jù)集上的準確率都較高,對提前預測柴油機滑油壓力低的故障有很大作用。但是,本文分析的數(shù)據(jù)集屬于小規(guī)模數(shù)據(jù)集,存在數(shù)據(jù)過擬合的可能性,故該模型只適合特定的船舶,不能直接用來對其他船舶進行預測,若要使其適用其他船舶,還需重新采集數(shù)據(jù)。