饒季勇 李 聰 錢雪忠,2
(1.江南大學物聯(lián)網(wǎng)工程學院 無錫 214122)
(2.江南大學物聯(lián)網(wǎng)技術應用教育部工程研究中心 無錫 214122)
隨著各醫(yī)院醫(yī)療設備數(shù)量和種類的不斷增長,設備的運維問題也日益凸顯,做好醫(yī)療設備運維的質量保證,對于臨床診斷和治療工作有著重大的意義[1],數(shù)字化時代的到來,更激發(fā)了對制造業(yè)及其運營的全新思考,工業(yè)4.0運用IOT技術動態(tài)響應設備需求,機械傳感器與控制系統(tǒng)互聯(lián)互通,可實現(xiàn)醫(yī)療信息化系統(tǒng)用于醫(yī)療設備的預測性維護、統(tǒng)計評估等[2]。根據(jù)大數(shù)據(jù)的定義,醫(yī)院所生成的醫(yī)療設備運行數(shù)據(jù)可以被認為是大數(shù)據(jù)[3]。這些海量數(shù)據(jù)蘊含著大量對設備運行有應用價值的信息。數(shù)據(jù)挖掘能從這些歷史數(shù)據(jù)中提取出故障相關信息,進行設備故障的診斷。
傳統(tǒng)的數(shù)據(jù)挖掘面對海量醫(yī)療設備大數(shù)據(jù)時,難以滿足性能需求。越來越多的學者開始向大數(shù)據(jù)預測性維護方向進行研究[5~6],但針對醫(yī)療設備運維大數(shù)據(jù)研究卻不多,通過對Spark的研究發(fā)現(xiàn),Spark是一個基于內(nèi)存的并行計算框架,避免了Ha?doop將中間結果存入磁盤,再從磁盤中重讀的繁瑣問題,因此Spark相比于Hadoop MapReduce在迭代計算方面更加高效。在面對設備異常數(shù)據(jù)時,通常采用聚類算法進行數(shù)據(jù)分析,例如孟建良、劉德超[12]就電力系統(tǒng)不良數(shù)據(jù)采用并行K-means算法進行實驗,實現(xiàn)電力系統(tǒng)負荷信息的檢測;宋鳴程等[15]提出一種基于Spark的K-means算法和FP-Growth算法結合的新方法對火電大數(shù)據(jù)進行處理,挖掘到目標的強關聯(lián)規(guī)則,從而得到各工況下的參數(shù)達到過的最優(yōu)值,并對機組運行進行優(yōu)化指導。聚類算法眾多,最為常用的是K-means算法,為了提高算法的聚類效果,學者們針對K-means算法提出了很多優(yōu)化算法,比如Bahmani B和Moseley B等[7]提出的Scalable K-Means++算法,優(yōu)化了K-means對隨機生成初始質心的問題,使K-means算法的效率得到很大提升;張玉芳等[10],使用基于取樣的劃分的思想改進了K-means算法,在算法的穩(wěn)定性上獲得了提升。
針對以上問題,提出了基于Spark的醫(yī)療設備運維信息挖掘分析方法,該方法通過K-means算法在Spark平臺上并行計算,根據(jù)數(shù)據(jù)的挖掘結果對設備運行參數(shù)進行故障歸類,有效地解決了傳統(tǒng)數(shù)據(jù)處理面對海量數(shù)據(jù)時的迭代計算問題,提高了醫(yī)療設備運維信息的處理能力。同時,該方法根據(jù)真實的醫(yī)療設備運行狀態(tài),對其運行參數(shù)進行了型號、閾值的劃分,保證了數(shù)據(jù)挖掘的可靠性和高效性。
Hadoop是Apache軟件基金會旗下的一個開源分布式計算平臺,為用戶提供了系統(tǒng)底層細節(jié)透明的分布式基礎架構。它是基于Java語言開發(fā)的,具有很好的跨平臺特性,并且可以部署在廉價的計算機集群中。
Hadoop的核心部分包括HDFS、MapReduce和YARN。HDFS是分布式文件存儲系統(tǒng),用于管理同一網(wǎng)絡下跨多臺計算機的文件,包含名稱節(jié)點(NameNode)和數(shù)據(jù)節(jié)點(DataNode)。MapReduce是一種分布式并行編程框架,主要用來處理和產(chǎn)生大規(guī)模數(shù)據(jù)集,“Map”和“Reduce”是其中的兩大基本操作,Map函數(shù)對數(shù)據(jù)進行分塊處理并產(chǎn)生中間結果,Reduce函數(shù)則對Map函數(shù)產(chǎn)生的中間結果進行歸約產(chǎn)生最終結果。YARN是統(tǒng)一的資源調(diào)度器,完成對任務資源的管理、調(diào)度等功能。
Apache Spark是一個開源集群運算框架,最初是由加州大學伯克利分校AMPLab所開發(fā),它是一個類Hadoop MapReduce的通用并行計算框架,使用了存儲器內(nèi)部運算技術,在原有的Hadoop Ma?pReduce優(yōu)點上,彌補了其在迭代計算方面的不足,提高了運算速度。
Spark由Scala語言編寫,Spark的核心是彈性分布式數(shù)據(jù)RDD,Spark其他功能都是基于RDD和Spark Core之上的,RDD抽象化是經(jīng)由一個以Sca?la、Java、Python的語言集成API所呈現(xiàn)。Spark包含用于在內(nèi)存上提供數(shù)據(jù)查詢功能的Spark SQL、機器學習庫MLlib、流式計算Spark Streaming、用于圖分析的算法合集Graph X等模塊。
圖1 Spark系統(tǒng)架構
如圖1所示,Spark運行架構包括集群資源管理器(Cluster Manager)、工作節(jié)點(Worker Node)、每個應用的任務控制節(jié)點(Driver)和每個工作節(jié)點上負責具體進程的執(zhí)行進程(Executor)。其中,Cluster Manager可以是Spark自帶的Standalone資源管理器,也可以是YARN或Mesos等資源管理框架。
K-means是一個數(shù)據(jù)挖掘算法,屬于無監(jiān)督學習,可以根據(jù)對象的屬性或特性將N個對象聚類到K個簇,同一簇中的對象相似度較高;而不同簇中的對象相似度較小。讓數(shù)據(jù)與相應簇質心間的距離的平方和最小,這樣就可完成這個分組。其算法表達式為
其中xn表示n個d維數(shù)據(jù),μi表示簇中心的平均值,rnk表示數(shù)據(jù)被歸類到簇的時候為1,否則為0。
K-means算法的第一步是根據(jù)給定的k值,取k個樣本點作為初始劃分中心。第二步將數(shù)據(jù)點分配到最近的簇質心。對于一個給定的d維數(shù)據(jù)點,可以使用距離函數(shù)來確定最近的簇質心,采用歐式距離函數(shù)來計算這個質心生成該數(shù)據(jù)點的可能性有多大。若要得出兩個d維數(shù)據(jù)點x=(x1,x2,…xd)和y=(y1,y2,…,yd)之間的歐式距離,歐式距離公式為
第三步,計算每個劃分中樣本點的平均值,將其作為新的中心。循環(huán)2、3步直至達到最大迭代次數(shù),或劃分中心的變化小于某一個預定義閾值。
K-means算法需要重復迭代計算每一個數(shù)據(jù)與質心的歐式距離,所以K-means算法的時間復雜度會隨著數(shù)據(jù)量的不斷增大而不斷增大,處理大數(shù)據(jù)時會出現(xiàn)計算瓶頸。其次,在單機平臺上由于無法完全將數(shù)據(jù)加載到內(nèi)存進行計算,所以需要重復讀寫內(nèi)存和磁盤,浪費大量資源。本系統(tǒng)采用基于Spark平臺的K-means算法處理醫(yī)療設備運維大數(shù)據(jù),將醫(yī)療設備運行時產(chǎn)生的大數(shù)據(jù)分發(fā)到各個計算節(jié)點,同時進行計算,解決了單機狀態(tài)下處理大數(shù)據(jù)的計算瓶頸,又由于Spark是基于內(nèi)存計算的框架,還可以優(yōu)化諸如K-means等迭代算法的計算。其算法流程如下所示。
實驗在ecs服務器單機偽分布式配置上進行,偽分布式Spark集群環(huán)境如表1所示。按照安陽市人民醫(yī)院型號為3.0T HDXT的儀器運行參數(shù),模擬高斯分布數(shù)據(jù)進行實驗。Hadoop進程以分離的Ja?va進程來運行,節(jié)點既作為NameNode也作為DataNode,同時讀取的是HDFS中的文件。軟件開發(fā)環(huán)境采用IntelliJIDEA 2018.2.4。單機上所有軟件在安裝并配置完成后即可啟動Spark偽分布式集群進行測試。基于Spark的醫(yī)療設備運維系統(tǒng)架構如圖2所示。
表1 計算節(jié)點配置
圖2 系統(tǒng)架構
數(shù)據(jù)采集方面,對于DataBase數(shù)據(jù)采用Sqoop工具將儲存于MySQL的數(shù)據(jù)抽取到HDFS中,對于文本文件采集我們使用傳統(tǒng)的Kettle導入HDFS或MySQL中。采用HDFS作為分布式文件存儲,MySQL作為傳統(tǒng)數(shù)據(jù)庫,Standalone資源管理器,采取偽分布式部署,使用基于Spark的K-means聚類模型進行數(shù)據(jù)處理,構建離線醫(yī)療設備運維分析模型,表明Spark平臺的高可靠性和運算速度快的特點。數(shù)據(jù)可視化方面,采用Java編寫MySQL數(shù)據(jù)庫連接模塊,結合JavaScript技術,利用Json作為數(shù)據(jù)傳輸類型。可視化的結果以靜態(tài)圖像和動態(tài)圖像結合的方式呈現(xiàn),使得用戶能夠從不同的角度去觀察數(shù)據(jù)視圖。Echart提供了豐富的數(shù)據(jù)交互能力及各種各樣的圖表結構,本系統(tǒng)選擇了Echart中多種圖表與百度地圖API結合的方式將結構呈現(xiàn)給用戶??梢暬缑嬷饕譃樵O備基本信息和數(shù)據(jù)運維信息兩個部分。設備基本信息部分主要針對設備的基礎信息,健康狀況,分布情況及整個系統(tǒng)的錯誤日志進行展示,并實時更新。數(shù)據(jù)運維信息部分主要針對算法中分析出來的數(shù)據(jù)利用Echart圖表動靜結合的呈現(xiàn)出來。
運用安陽市人民醫(yī)院3.0T HDXT型號設備在2018-06-27~2018-11-16這段時期運行產(chǎn)生的數(shù)據(jù)歸結出的運行參數(shù)閾值進行預測的標準。型號3.0T HDXT設備運行參數(shù)閾值如表2所示。
表2 型號3.0T HDXT設備運行參數(shù)閾值
K-means算法使用Scala語言,在IntelliJ IDEA 2018.2.4內(nèi)進行編譯。類比型號3.0T HDXT設備運行數(shù)據(jù),采用高斯分布的模擬數(shù)據(jù)進行實驗,共有3萬組9維數(shù)據(jù),選取液氦壓力、掃描腔溫度、液氦水平、水溫、水流等9項參數(shù),運用基于Spark的K-means算法進行聚類計算,產(chǎn)生的3個聚類中心如表3所示。與表2設定的閾值相對照可以看出,位于第一、二類的數(shù)據(jù)點的液氦水平較高,磁體屏蔽層溫度較低;第三類的數(shù)據(jù)點的液氦壓力很低,掃描腔溫度較高,水溫較高,冷頭溫度較高,由此可以將這3萬條數(shù)據(jù)簡單分為3類做初步的預測。
表3 K-means聚類中心
為了驗證基于Spark的K-means算法相對于一般的K-means算法,對大數(shù)據(jù)的挖掘效率更高。該方法使用單機并行K-means算法與基于Spark平臺的并行K-means算法進行比較,對3百、3千、3萬、30萬、300萬組9維數(shù)據(jù)進行測試,聚類個數(shù)都設為3,最終比較兩算法的運行時間,結果如圖3所示。
圖3 K-means運行時間對比結果
由圖3可以看出,最大迭代次數(shù)相同的情況下,在數(shù)據(jù)量不大的情況下,兩種算法的運行時間相差不大。當數(shù)據(jù)量小于3萬組9維數(shù)據(jù)時,由于Spark集群需要啟動和調(diào)用MLlib庫,消耗了一些時間,單機并行的K-means算法要比基于Spark平臺的K-means算法更快。但數(shù)據(jù)量上升到十萬以上,基于Spark的K-means算法運行速度明顯要優(yōu)于單機并行的K-means算法,當數(shù)據(jù)量為300萬組9維數(shù)據(jù)時,基于Spark的K-means算法運行時間僅為單機的七分之一。由以上分析可知,基于Spark的K-means算法能夠高效地處理醫(yī)療設備運行大數(shù)據(jù)問題。
本文提出了一種處理醫(yī)療設備運維信息的新方法,基于Spark的K-means聚類模型進行醫(yī)療設備運維信息預測分析。該方法結合Spark內(nèi)存計算模型,解決了大數(shù)據(jù)的迭代計算問題。通過Spark平臺上并行K-means算法與單機狀態(tài)下的K-Means算法的比較,以及對醫(yī)療設備運維信息數(shù)據(jù)的算例分析和實驗,選擇K-means算法模型,并引入分布式存儲系統(tǒng)HDFS,解決了傳統(tǒng)方法難以有效處理醫(yī)療設備大數(shù)據(jù)的問題,滿足了預測系統(tǒng)處理大量數(shù)據(jù)的需求,在醫(yī)療運維方面具有十分重要的應用價值。