吳磊 歐陽赫明



摘 要:隨著各類醫療健康信息數量的增長,如何利用醫療健康大數據輔助臨床診療和科研,已經成為各醫療科研機構普遍關注的問題。針對該問題,設計并實現了一種基于Spark的分布式健康大數據分析系統。系統采用大數據分析技術并基于隨機森林模型,應用多個弱分類器將多個決策樹獲得的結果進行集成,基于該模型實現了睡眠質量預測,同時還研究了權重較高的影響因子。最終實驗預測準確率達96.84%。實驗結果對于睡眠質量分析具有一定參考意義,且系統能夠較好地滿足健康大數據的分析處理需求。
關鍵詞:大數據;大數據分析;Apache Spark;智能健康;機器學習;隨機森林
DOI:10. 11907/rjdk. 192546 開放科學(資源服務)標識碼(OSID):
中圖分類號:TP319文獻標識碼: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 引言
近年來,醫療機構信息化程度不斷提高,各類醫療健康信息在數量上有著驚人增長。健康大數據具有數據量大、多樣性突出的獨特性,如何利用健康大數據為臨床醫療服務仍然是一個值得討論的問題。大數據分析的核心問題是如何對這些數據進行有效表達、解釋和學習[1]。
Spark[2]是加州大學伯克利分校AMP實驗室開發的集群模式計算平臺,其框架構建以內存計算為基礎。而傳統Hadoop中使用的計算平臺是MapReduce[3]、MapReduce模型基于磁盤計算,運行計算作業時的磁盤讀寫有較大的時間和空間開銷[4]。由于Spark模型基于內存計算,因而運行速度相比MapReduce更快,適合進行大規模數據處理。
Spark作為當前最流行的大數據處理平臺之一,一直受到很多研究者的關注[5]。曹波等[6]在Spark平臺上實現了FP-Growth算法的并行計算,利用車牌記錄跟蹤車輛;王虹旭等[7]在Spark平臺上設計了一個并行數據分析系統,該系統能夠對海量數據進行高效分析。針對醫療健康大數據分析帶來的多種挑戰,很多研究者也進行了相關研究。羅輝等在[8]大數據環境下實現了科研專病數據庫系統平臺,對臨床數據進行了集成整合與統計分析,但導入及處理數據的速度還有待提高;甘偉等[9]設計并實現了基于Hadoop分布式存儲的大數據臨床科研平臺,并集成R語言實現了基本統計分析及高級挖掘算法,但機器學習結果的準確度較低。
本文設計并實現了一種基于Spark的分布式健康大數據分析系統,利用彈性分布式數據集RDD(Resilient Distributed Dataset)[10]對數據進行相應操作,選取Spark on YARN[11]集群模式運行,相比傳統的Hadoop平臺具有更高的容錯性和更快的運算速度;系統實現的基于隨機森林的睡眠質量預測方法具有較高的預測準確率,達到了96.84%。
1 分布式Spark集群搭建
系統構建實驗中,使用1臺物理機中的3臺Linux虛擬機組成擁有3個節點的分布式集群,其中包括1個Master節點和2個Worker節點。Master節點用于分配任務以及維護狀態,因此采用的配置相對于Worker節點而言較高。處理器配置方面,Master節點機器使用2個4核處理器,Worker節點機器使用1個4核處理器。內存配置方面,Master節點機器使用6GB內存,Worker節點機器使用4GB內存。網絡連接方式全部采用NAT方式,以便對節點的IP地址進行配置和管理。物理機使用M.2 NVMe協議的固態硬盤,固態硬盤相比于機械硬盤具有讀寫效率高、壽命長等優勢,對集群運行速度與工作質量有一定保障。由分布式集群所構成的系統,不僅對節點故障有一定容錯性,而且能夠依據需求調整節點數量。
1.1 Hadoop集群搭建
系統的Spark運行于YARN之上,需要預先安裝Hadoop,而Hadoop又需要JDK的支持,因此首先需要安裝JDK,然后配置各臺虛擬機之間的ssh免密碼登錄及防火墻,最后解壓Hadoop安裝包并修改相關的配置文件。配置文件包括hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml和slaves等。
1.2 Spark集群搭建
由于Spark運行需要Scala的支持,因此在安裝Spark前需要先安裝Scala環境,然后從Spark的官方網站上下載Spark的源碼并使用Maven編譯。Spark文件配置需要將所有Worker節點的主機名寫入每臺虛擬機中的Slaves文件中,并修改節點的Spark安裝目錄的Spark-env.sh文件。同時,集群所有節點的Spark-env.sh文件和Slaves文件的內容要保持完全一致[12]。完成以上配置后,使用Spark on YARN的方式啟動Spark集群。啟動后可以通過jps命令或在Master節點上使用瀏覽器訪問localhost:8080查看啟動情況,并可以通過Spark-submit提交一個Spark中的示例作業以測試集群運行情況。
1.3 Spark開發環境配置
系統的Spark應用程序使用的開發語言為Scala,因為Spark是Scala編寫的,因而對Scala的支持性最好。IDE選擇業內廣泛使用的IntelliJ IDEA,該軟件提供的Scala插件可以很好地支持Spark程序開發。調試時使用Spark Local模式運行Spark,可以直接在開發環境中調試而不必將作業提交到Spark集群之上。
2 睡眠質量預測實現
本文設計的數據分析系統通過Spark的MLlib實現了建模方法。系統首先將樣本數據集分為訓練數據集和測試數據集兩部分,再通過連接各種功能函數的操作節點,并形成流程實現數據分析建模功能。
2.1 隨機森林算法
系統采用隨機森林算法實現了睡眠數據預測。選取睡眠數據的屬性創建相應數據集,并提取相應特征向量建立分類模型。將系統采用的數據集分為兩個部分:70%作為訓練數據用于訓練模型,30%作為測試數據用于測試模型。
隨機森林(Random Forest,RF)[13]利用節點隨機分裂技術和隨機重采樣技術構建多棵決策樹,分類結果由投票決定。它具備了分析復雜相互作用分類特征的能力,且對于缺失值和噪聲具有很好的魯棒性。此外,隨機森林的學習速度也較快。隨機森林可以作為高維數據的特征選擇工具[14],近年來已被廣泛應用于各種分類及預測等問題中[15]。
單棵決策樹普遍會存在過擬合現象,為避免這種現象,系統采用了隨機森林算法,即利用機器學習的集成學習思想,通過構造多個弱分類器并最終合成為一個強分類器的方法,不僅有效減少了過擬合現象,而且提高了預測精度[16]。
隨機森林是用多棵樹對樣本進行訓練并預測的一種分類器,每顆樹h(X,βk)都有一票投票權以選擇最終分類結果。分類決策如式(1)所示。
其中,H(x)表示隨機森林分類結果,I(·)為示性函數,hi(x)表示單個分類結果,Y代表分類目標。該式取各決策樹結果中的多數作為最終結果[16]。
2.2 模型構建
為計算出多個睡眠質量影響因子中權重較大的因子,首先需要構建預測模型,具體方法為:先設置K個弱分類器,其中類別純度使用Gini系數[17]進行計算,再將相似樣本放在同一個弱分類器中,最后使用K-means算法[18]進行訓練,并使用均值組合方式。在模型訓練完成后,使用另外一組構建好特征的樣本,經過模型訓練,最后評估模型。
建模過程分為訓練和測試兩個階段,如圖1所示。在訓練階段,主要根據計算好特征的樣本,劃分好K個弱分類樣本后,再進行隨機森林訓練。訓練完成后,測試數據應用訓練好的預測模型可得到預測值,將預測值與實際值進行運算可得到模型的精度值,從而評估模型性能。
系統針對睡眠質量的多個影響因素展開研究,數據采用Kaggle公司[19]提供的Sleep Cycle從2014-2018年的相關原始數據。Kaggle公司于2010年創立,并于2017年被谷歌公司收購,主要是為數據科學家和開發商提供數據分享以及舉辦競賽的平臺[19]。目前,許多科學家和開發者都紛紛入駐這一平臺。
系統采用的數據包含了睡眠相關的8個屬性,主要有:Start、End、Heartrate等,經過預處理后的數據如表1所示,其中用Sleep Quality屬性值表示睡眠質量的好與差。
(1)構建影響因子特征向量。數據集中每條樣本采用兩個類別進行標記:-1(差)和1(好),每個樣本的特征包含如下字段:在數據屬性中Sleep quality用來表示睡眠質量(-1 或1)。
特征向量選取原始數據的全部8個屬性進行構建,特征:{“Start”,“End”,“Time in bed”,“Wake up”,“Stressful”,“Heartrate”,“Activity(steps/k)”,“Sleep quality”},將Start、End和Time in bed中的時間提取出來并轉換成小時,再對每個維度的特征做變換后返回Dataframe,并增加標簽列label,其中數值1表示好,數值0表示差,如表2所示。
(2)訓練隨機森林分類器。系統訓練隨機森林分類器的主要參數有:maxDepth:樹的最大深度;maxBins:最大分桶個數,用于決定每個節點如何分裂;auto:每個節點分裂時是否自動選擇參與特征的個數;Seed:隨機數生成種子。
系統采用的參數為:maxDepth:3、maxBins:20、auto:”auto”、Seed:4073。
2.3 實驗分析
實驗數據集共有887條數據,其中Sleep quality屬性值表示睡眠質量的好/差,為了分析影響因素與睡眠質量之間的相關度,實驗中選取了皮爾遜相關系數[20]進行表征,并將各屬性的相關程度進行排序,如表3所示,各屬性相關系數如圖2所示。
通過計算各屬性與睡眠質量的相關度可知,Start、Time in bed、Heartrate影響因子對于睡眠質量的影響程度較大,對睡眠質量的相關研究具有一定借鑒意義。
系統采用管道學習訓練模型,即Pipeline。在機器學習中,通常有一系列的算法在數據中處理和學習。Spark MLlib提供的機器學習算法API,可以將多個算法組合成一個獨立管道,之后管道會通過在參數網格上的不斷爬行自動完成模型優化,最后系統進行預測時會使用通過管道訓練得到的最優模型。預測結果中Prediction標簽為最終預測結果,如表4所示。
將Label標簽值與Prediction標簽值進行比較得到模型的預測精度值是96.84%,其中包含準確預測條數859條,如圖3所示。預測結果表明,預測數據與原始數據擬合度較高。
系統采用基于Spark和隨機森林算法的機器學習訓練方法用于睡眠質量預測,取得較高準確率,證明了采用隨機森林算法構建的睡眠數據預測機制較為成功,具有一定參考意義。
3 結語
本文基于Spark設計并實現了一種分布式健康大數據分析系統。系統采用基于隨機森林模型的大數據分析技術,將多個決策樹得出的結果進行分析集成,訓練模型采用管道學習方法,并將其應用到睡眠質量預測場景中,實驗分析得出該模型預測精度值為96.84%。同時,通過相關度分析獲得了與睡眠質量相關度較高的3個影響因素Start、Time in bed、Heartrate,可以用作睡眠質量分析指標。同時,系統還有很多待改進之處,如集群運行參數、模型訓練參數調優等。
參考文獻:
[1] 程學旗,靳小龍,王元卓,等. 大數據系統和分析技術綜述[J]. 軟件學報,2014,25(9):1889-1908.
[2] 李星,李濤. 基于Spark的推薦系統的設計與實現[J]. 計算機技術與發展,2018,28(10):194-198.
[3] 高莉莎,劉正濤,應毅. 基于應用程序的MapReduce性能優化[J]. 計算機技術與發展,2015,25(7):96-99,106.
[4] 于海浩. 基于Spark的抄襲檢測云計算框架研究[J]. 計算機光盤軟件與應用,2014,17(11):110-112.
[5] 張恬恬,孫紹華. 基于Spark的云計算平臺在實驗室的應用與實現[J]. 軟件導刊,2018,17(4):191-193.
[6] 曹波,韓燕波,王桂玲. 基于車牌識別大數據的伴隨車輛組發現方法[J]. 計算機應用,2015,35(11):3203-3207.
[7] 王虹旭,吳斌,劉旸. 基于Spark的并行圖數據分析系統[J]. 計算機科學與探索,2015,9(9):1066-1074.
[8] 羅輝,薛萬國,喬屾. 大數據環境下醫院科研專病數據庫建設[J]. 解放軍醫學院學報,2019(8):713-718.
[9] 甘偉,徐明明,陳聯忠,等. 大數據臨床科研平臺的設計與實現[J]. 中國數字醫學,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] 楊玉,張遠夏. Spark on Yarn模式的電信大數據處理平臺[J]. 福建電腦,2019,35(3):34-38.
[12] 李艷紅. 基于Spark平臺的大數據挖掘技術分析[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]. 吉林大學學報(工學版),2014,44(1):137-141.
[16] 苗立志,刁繼堯,婁沖,等. 基于Spark和隨機森林的乳腺癌風險預測分析[J]. 計算機技術與發展,2019(8):1-3.
[17] 劉星毅. 一種新的決策樹分裂屬性選擇方法[J]. 計算機技術與發展,2008(5):70-72.
[18] 唐浩,楊余旺,辛智斌. 基于MapReduce的單遍K-means聚類算法[J]. 計算機技術與發展,2017,27(9):26-30.
[19] 鄧仲華,劉斌. 數據挖掘應用熱點研究——基于Kaggle競賽數據[J]. 圖書館學研究,2019(6):2-9,23.
[20] 姜亞斌,鄒任玲,劉建,等. 表面肌電信號的下肢痙攣信號特征分析與識別[J]. 電子科技,2017,30(11):38-41.
(責任編輯:孫 娟)