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