吳磊 歐陽赫明
摘 要:隨著各類醫(yī)療健康信息數(shù)量的增長,如何利用醫(yī)療健康大數(shù)據(jù)輔助臨床診療和科研,已經(jīng)成為各醫(yī)療科研機構(gòu)普遍關(guān)注的問題。針對該問題,設(shè)計并實現(xiàn)了一種基于Spark的分布式健康大數(shù)據(jù)分析系統(tǒng)。系統(tǒng)采用大數(shù)據(jù)分析技術(shù)并基于隨機森林模型,應(yīng)用多個弱分類器將多個決策樹獲得的結(jié)果進行集成,基于該模型實現(xiàn)了睡眠質(zhì)量預(yù)測,同時還研究了權(quán)重較高的影響因子。最終實驗預(yù)測準(zhǔn)確率達(dá)96.84%。實驗結(jié)果對于睡眠質(zhì)量分析具有一定參考意義,且系統(tǒng)能夠較好地滿足健康大數(shù)據(jù)的分析處理需求。
關(guān)鍵詞:大數(shù)據(jù);大數(shù)據(jù)分析;Apache Spark;智能健康;機器學(xué)習(xí);隨機森林
DOI:10. 11907/rjdk. 192546 開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
中圖分類號:TP319文獻標(biāo)識碼:A 文章編號:1672-7800(2020)007-0099-04
The Design and Implementation of Distributed Health Big Data Analysis System
Based on Spark
WU Lei,OUYANG He-ming
(School of Information, North China University of Technology, Beijing 100144, China)
Abstract: With the growth of various types of medical health information, how to use medical health big data to assist clinical diagnosis and research has become a common concern of medical research institutions. Aiming at this problem, we propose a distributed health big data analysis system based on Spark. The system uses big data analysis technology based on the random forest model, and uses multiple weak classifiers to integrate the results obtained by multiple decision trees. Based on the model, the sleep quality prediction is realized, and the influence factors with higher weight are also studied. The final experimental prediction accuracy rate reached 96.84%. The experimental results have certain reference significance for the analysis of sleep quality, and the system can better meet the analysis and processing needs of healthy big data.
Key Words: big data; big data analysis; Apache Spark; smart health; machine learning; random forest
0 引言
近年來,醫(yī)療機構(gòu)信息化程度不斷提高,各類醫(yī)療健康信息在數(shù)量上有著驚人增長。健康大數(shù)據(jù)具有數(shù)據(jù)量大、多樣性突出的獨特性,如何利用健康大數(shù)據(jù)為臨床醫(yī)療服務(wù)仍然是一個值得討論的問題。大數(shù)據(jù)分析的核心問題是如何對這些數(shù)據(jù)進行有效表達(dá)、解釋和學(xué)習(xí)[1]。
Spark[2]是加州大學(xué)伯克利分校AMP實驗室開發(fā)的集群模式計算平臺,其框架構(gòu)建以內(nèi)存計算為基礎(chǔ)。而傳統(tǒng)Hadoop中使用的計算平臺是MapReduce[3]、MapReduce模型基于磁盤計算,運行計算作業(yè)時的磁盤讀寫有較大的時間和空間開銷[4]。由于Spark模型基于內(nèi)存計算,因而運行速度相比MapReduce更快,適合進行大規(guī)模數(shù)據(jù)處理。
Spark作為當(dāng)前最流行的大數(shù)據(jù)處理平臺之一,一直受到很多研究者的關(guān)注[5]。曹波等[6]在Spark平臺上實現(xiàn)了FP-Growth算法的并行計算,利用車牌記錄跟蹤車輛;王虹旭等[7]在Spark平臺上設(shè)計了一個并行數(shù)據(jù)分析系統(tǒng),該系統(tǒng)能夠?qū)A繑?shù)據(jù)進行高效分析。針對醫(yī)療健康大數(shù)據(jù)分析帶來的多種挑戰(zhàn),很多研究者也進行了相關(guān)研究。羅輝等在[8]大數(shù)據(jù)環(huán)境下實現(xiàn)了科研專病數(shù)據(jù)庫系統(tǒng)平臺,對臨床數(shù)據(jù)進行了集成整合與統(tǒng)計分析,但導(dǎo)入及處理數(shù)據(jù)的速度還有待提高;甘偉等[9]設(shè)計并實現(xiàn)了基于Hadoop分布式存儲的大數(shù)據(jù)臨床科研平臺,并集成R語言實現(xiàn)了基本統(tǒng)計分析及高級挖掘算法,但機器學(xué)習(xí)結(jié)果的準(zhǔn)確度較低。
本文設(shè)計并實現(xiàn)了一種基于Spark的分布式健康大數(shù)據(jù)分析系統(tǒng),利用彈性分布式數(shù)據(jù)集RDD(Resilient Distributed Dataset)[10]對數(shù)據(jù)進行相應(yīng)操作,選取Spark on YARN[11]集群模式運行,相比傳統(tǒng)的Hadoop平臺具有更高的容錯性和更快的運算速度;系統(tǒng)實現(xiàn)的基于隨機森林的睡眠質(zhì)量預(yù)測方法具有較高的預(yù)測準(zhǔn)確率,達(dá)到了96.84%。
1 分布式Spark集群搭建
系統(tǒng)構(gòu)建實驗中,使用1臺物理機中的3臺Linux虛擬機組成擁有3個節(jié)點的分布式集群,其中包括1個Master節(jié)點和2個Worker節(jié)點。Master節(jié)點用于分配任務(wù)以及維護狀態(tài),因此采用的配置相對于Worker節(jié)點而言較高。處理器配置方面,Master節(jié)點機器使用2個4核處理器,Worker節(jié)點機器使用1個4核處理器。內(nèi)存配置方面,Master節(jié)點機器使用6GB內(nèi)存,Worker節(jié)點機器使用4GB內(nèi)存。網(wǎng)絡(luò)連接方式全部采用NAT方式,以便對節(jié)點的IP地址進行配置和管理。物理機使用M.2 NVMe協(xié)議的固態(tài)硬盤,固態(tài)硬盤相比于機械硬盤具有讀寫效率高、壽命長等優(yōu)勢,對集群運行速度與工作質(zhì)量有一定保障。由分布式集群所構(gòu)成的系統(tǒng),不僅對節(jié)點故障有一定容錯性,而且能夠依據(jù)需求調(diào)整節(jié)點數(shù)量。
1.1 Hadoop集群搭建
系統(tǒng)的Spark運行于YARN之上,需要預(yù)先安裝Hadoop,而Hadoop又需要JDK的支持,因此首先需要安裝JDK,然后配置各臺虛擬機之間的ssh免密碼登錄及防火墻,最后解壓Hadoop安裝包并修改相關(guān)的配置文件。配置文件包括hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和slaves等。
1.2 Spark集群搭建
由于Spark運行需要Scala的支持,因此在安裝Spark前需要先安裝Scala環(huán)境,然后從Spark的官方網(wǎng)站上下載Spark的源碼并使用Maven編譯。Spark文件配置需要將所有Worker節(jié)點的主機名寫入每臺虛擬機中的Slaves文件中,并修改節(jié)點的Spark安裝目錄的Spark-env.sh文件。同時,集群所有節(jié)點的Spark-env.sh文件和Slaves文件的內(nèi)容要保持完全一致[12]。完成以上配置后,使用Spark on YARN的方式啟動Spark集群。啟動后可以通過jps命令或在Master節(jié)點上使用瀏覽器訪問localhost:8080查看啟動情況,并可以通過Spark-submit提交一個Spark中的示例作業(yè)以測試集群運行情況。
1.3 Spark開發(fā)環(huán)境配置
系統(tǒng)的Spark應(yīng)用程序使用的開發(fā)語言為Scala,因為Spark是Scala編寫的,因而對Scala的支持性最好。IDE選擇業(yè)內(nèi)廣泛使用的IntelliJ IDEA,該軟件提供的Scala插件可以很好地支持Spark程序開發(fā)。調(diào)試時使用Spark Local模式運行Spark,可以直接在開發(fā)環(huán)境中調(diào)試而不必將作業(yè)提交到Spark集群之上。
2 睡眠質(zhì)量預(yù)測實現(xiàn)
本文設(shè)計的數(shù)據(jù)分析系統(tǒng)通過Spark的MLlib實現(xiàn)了建模方法。系統(tǒng)首先將樣本數(shù)據(jù)集分為訓(xùn)練數(shù)據(jù)集和測試數(shù)據(jù)集兩部分,再通過連接各種功能函數(shù)的操作節(jié)點,并形成流程實現(xiàn)數(shù)據(jù)分析建模功能。
2.1 隨機森林算法
系統(tǒng)采用隨機森林算法實現(xiàn)了睡眠數(shù)據(jù)預(yù)測。選取睡眠數(shù)據(jù)的屬性創(chuàng)建相應(yīng)數(shù)據(jù)集,并提取相應(yīng)特征向量建立分類模型。將系統(tǒng)采用的數(shù)據(jù)集分為兩個部分:70%作為訓(xùn)練數(shù)據(jù)用于訓(xùn)練模型,30%作為測試數(shù)據(jù)用于測試模型。
隨機森林(Random Forest,RF)[13]利用節(jié)點隨機分裂技術(shù)和隨機重采樣技術(shù)構(gòu)建多棵決策樹,分類結(jié)果由投票決定。它具備了分析復(fù)雜相互作用分類特征的能力,且對于缺失值和噪聲具有很好的魯棒性。此外,隨機森林的學(xué)習(xí)速度也較快。隨機森林可以作為高維數(shù)據(jù)的特征選擇工具[14],近年來已被廣泛應(yīng)用于各種分類及預(yù)測等問題中[15]。
單棵決策樹普遍會存在過擬合現(xiàn)象,為避免這種現(xiàn)象,系統(tǒng)采用了隨機森林算法,即利用機器學(xué)習(xí)的集成學(xué)習(xí)思想,通過構(gòu)造多個弱分類器并最終合成為一個強分類器的方法,不僅有效減少了過擬合現(xiàn)象,而且提高了預(yù)測精度[16]。
隨機森林是用多棵樹對樣本進行訓(xùn)練并預(yù)測的一種分類器,每顆樹h(X,βk)都有一票投票權(quán)以選擇最終分類結(jié)果。分類決策如式(1)所示。
其中,H(x)表示隨機森林分類結(jié)果,I(·)為示性函數(shù),hi(x)表示單個分類結(jié)果,Y代表分類目標(biāo)。該式取各決策樹結(jié)果中的多數(shù)作為最終結(jié)果[16]。
2.2 模型構(gòu)建
為計算出多個睡眠質(zhì)量影響因子中權(quán)重較大的因子,首先需要構(gòu)建預(yù)測模型,具體方法為:先設(shè)置K個弱分類器,其中類別純度使用Gini系數(shù)[17]進行計算,再將相似樣本放在同一個弱分類器中,最后使用K-means算法[18]進行訓(xùn)練,并使用均值組合方式。在模型訓(xùn)練完成后,使用另外一組構(gòu)建好特征的樣本,經(jīng)過模型訓(xùn)練,最后評估模型。
建模過程分為訓(xùn)練和測試兩個階段,如圖1所示。在訓(xùn)練階段,主要根據(jù)計算好特征的樣本,劃分好K個弱分類樣本后,再進行隨機森林訓(xùn)練。訓(xùn)練完成后,測試數(shù)據(jù)應(yīng)用訓(xùn)練好的預(yù)測模型可得到預(yù)測值,將預(yù)測值與實際值進行運算可得到模型的精度值,從而評估模型性能。
系統(tǒng)針對睡眠質(zhì)量的多個影響因素展開研究,數(shù)據(jù)采用Kaggle公司[19]提供的Sleep Cycle從2014-2018年的相關(guān)原始數(shù)據(jù)。Kaggle公司于2010年創(chuàng)立,并于2017年被谷歌公司收購,主要是為數(shù)據(jù)科學(xué)家和開發(fā)商提供數(shù)據(jù)分享以及舉辦競賽的平臺[19]。目前,許多科學(xué)家和開發(fā)者都紛紛入駐這一平臺。
系統(tǒng)采用的數(shù)據(jù)包含了睡眠相關(guān)的8個屬性,主要有:Start、End、Heartrate等,經(jīng)過預(yù)處理后的數(shù)據(jù)如表1所示,其中用Sleep Quality屬性值表示睡眠質(zhì)量的好與差。
(1)構(gòu)建影響因子特征向量。數(shù)據(jù)集中每條樣本采用兩個類別進行標(biāo)記:-1(差)和1(好),每個樣本的特征包含如下字段:在數(shù)據(jù)屬性中Sleep quality用來表示睡眠質(zhì)量(-1 或1)。
特征向量選取原始數(shù)據(jù)的全部8個屬性進行構(gòu)建,特征:{“Start”,“End”,“Time in bed”,“Wake up”,“Stressful”,“Heartrate”,“Activity(steps/k)”,“Sleep quality”},將Start、End和Time in bed中的時間提取出來并轉(zhuǎn)換成小時,再對每個維度的特征做變換后返回Dataframe,并增加標(biāo)簽列l(wèi)abel,其中數(shù)值1表示好,數(shù)值0表示差,如表2所示。
(2)訓(xùn)練隨機森林分類器。系統(tǒng)訓(xùn)練隨機森林分類器的主要參數(shù)有:maxDepth:樹的最大深度;maxBins:最大分桶個數(shù),用于決定每個節(jié)點如何分裂;auto:每個節(jié)點分裂時是否自動選擇參與特征的個數(shù);Seed:隨機數(shù)生成種子。
系統(tǒng)采用的參數(shù)為:maxDepth:3、maxBins:20、auto:”auto”、Seed:4073。
2.3 實驗分析
實驗數(shù)據(jù)集共有887條數(shù)據(jù),其中Sleep quality屬性值表示睡眠質(zhì)量的好/差,為了分析影響因素與睡眠質(zhì)量之間的相關(guān)度,實驗中選取了皮爾遜相關(guān)系數(shù)[20]進行表征,并將各屬性的相關(guān)程度進行排序,如表3所示,各屬性相關(guān)系數(shù)如圖2所示。
通過計算各屬性與睡眠質(zhì)量的相關(guān)度可知,Start、Time in bed、Heartrate影響因子對于睡眠質(zhì)量的影響程度較大,對睡眠質(zhì)量的相關(guān)研究具有一定借鑒意義。
系統(tǒng)采用管道學(xué)習(xí)訓(xùn)練模型,即Pipeline。在機器學(xué)習(xí)中,通常有一系列的算法在數(shù)據(jù)中處理和學(xué)習(xí)。Spark MLlib提供的機器學(xué)習(xí)算法API,可以將多個算法組合成一個獨立管道,之后管道會通過在參數(shù)網(wǎng)格上的不斷爬行自動完成模型優(yōu)化,最后系統(tǒng)進行預(yù)測時會使用通過管道訓(xùn)練得到的最優(yōu)模型。預(yù)測結(jié)果中Prediction標(biāo)簽為最終預(yù)測結(jié)果,如表4所示。
將Label標(biāo)簽值與Prediction標(biāo)簽值進行比較得到模型的預(yù)測精度值是96.84%,其中包含準(zhǔn)確預(yù)測條數(shù)859條,如圖3所示。預(yù)測結(jié)果表明,預(yù)測數(shù)據(jù)與原始數(shù)據(jù)擬合度較高。
系統(tǒng)采用基于Spark和隨機森林算法的機器學(xué)習(xí)訓(xùn)練方法用于睡眠質(zhì)量預(yù)測,取得較高準(zhǔn)確率,證明了采用隨機森林算法構(gòu)建的睡眠數(shù)據(jù)預(yù)測機制較為成功,具有一定參考意義。
3 結(jié)語
本文基于Spark設(shè)計并實現(xiàn)了一種分布式健康大數(shù)據(jù)分析系統(tǒng)。系統(tǒng)采用基于隨機森林模型的大數(shù)據(jù)分析技術(shù),將多個決策樹得出的結(jié)果進行分析集成,訓(xùn)練模型采用管道學(xué)習(xí)方法,并將其應(yīng)用到睡眠質(zhì)量預(yù)測場景中,實驗分析得出該模型預(yù)測精度值為96.84%。同時,通過相關(guān)度分析獲得了與睡眠質(zhì)量相關(guān)度較高的3個影響因素Start、Time in bed、Heartrate,可以用作睡眠質(zhì)量分析指標(biāo)。同時,系統(tǒng)還有很多待改進之處,如集群運行參數(shù)、模型訓(xùn)練參數(shù)調(diào)優(yōu)等。
參考文獻:
[1] 程學(xué)旗,靳小龍,王元卓,等. 大數(shù)據(jù)系統(tǒng)和分析技術(shù)綜述[J]. 軟件學(xué)報,2014,25(9):1889-1908.
[2] 李星,李濤. 基于Spark的推薦系統(tǒng)的設(shè)計與實現(xiàn)[J]. 計算機技術(shù)與發(fā)展,2018,28(10):194-198.
[3] 高莉莎,劉正濤,應(yīng)毅. 基于應(yīng)用程序的MapReduce性能優(yōu)化[J]. 計算機技術(shù)與發(fā)展,2015,25(7):96-99,106.
[4] 于海浩. 基于Spark的抄襲檢測云計算框架研究[J]. 計算機光盤軟件與應(yīng)用,2014,17(11):110-112.
[5] 張?zhí)裉?,孫紹華. 基于Spark的云計算平臺在實驗室的應(yīng)用與實現(xiàn)[J]. 軟件導(dǎo)刊,2018,17(4):191-193.
[6] 曹波,韓燕波,王桂玲. 基于車牌識別大數(shù)據(jù)的伴隨車輛組發(fā)現(xiàn)方法[J]. 計算機應(yīng)用,2015,35(11):3203-3207.
[7] 王虹旭,吳斌,劉旸. 基于Spark的并行圖數(shù)據(jù)分析系統(tǒng)[J]. 計算機科學(xué)與探索,2015,9(9):1066-1074.
[8] 羅輝,薛萬國,喬屾. 大數(shù)據(jù)環(huán)境下醫(yī)院科研專病數(shù)據(jù)庫建設(shè)[J]. 解放軍醫(yī)學(xué)院學(xué)報,2019(8):713-718.
[9] 甘偉,徐明明,陳聯(lián)忠,等. 大數(shù)據(jù)臨床科研平臺的設(shè)計與實現(xiàn)[J]. 中國數(shù)字醫(yī)學(xué),2019,14(2):40-43.
[10] GENG Y S. Spark standalone mode process analysis and data skew solutions[C]. Proceedings of 2017 IEEE 2nd Information Technology, Networking, Electronic and Automation Control Conference,2017:647-653.
[11] 楊玉,張遠(yuǎn)夏. Spark on Yarn模式的電信大數(shù)據(jù)處理平臺[J]. 福建電腦,2019,35(3):34-38.
[12] 李艷紅. 基于Spark平臺的大數(shù)據(jù)挖掘技術(shù)分析[J]. 科技資訊,2018,16(27):7-8.
[13] BREIMAN L. Random forests[J]. Machine Learning,2001,45(1):5-32.
[14] STROBL C,BOULESTEIX A L,KNEIB T,et al.Conditional variable importance for random forests[J].? BMC Bioinformatics,2008.
[15] 姚登舉,楊靜,詹曉娟. 基于隨機森林的特征選擇算法[J]. 吉林大學(xué)學(xué)報(工學(xué)版),2014,44(1):137-141.
[16] 苗立志,刁繼堯,婁沖,等. 基于Spark和隨機森林的乳腺癌風(fēng)險預(yù)測分析[J]. 計算機技術(shù)與發(fā)展,2019(8):1-3.
[17] 劉星毅. 一種新的決策樹分裂屬性選擇方法[J]. 計算機技術(shù)與發(fā)展,2008(5):70-72.
[18] 唐浩,楊余旺,辛智斌. 基于MapReduce的單遍K-means聚類算法[J]. 計算機技術(shù)與發(fā)展,2017,27(9):26-30.
[19] 鄧仲華,劉斌. 數(shù)據(jù)挖掘應(yīng)用熱點研究——基于Kaggle競賽數(shù)據(jù)[J]. 圖書館學(xué)研究,2019(6):2-9,23.
[20] 姜亞斌,鄒任玲,劉建,等. 表面肌電信號的下肢痙攣信號特征分析與識別[J]. 電子科技,2017,30(11):38-41.
(責(zé)任編輯:孫 娟)