機器學習,流式IoT和醫療設備互聯
歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~
讓我們來看一下機器學習是如何應用於醫護行業以及如何借助Apache Spark對患者的監控數據進行處理
現如今,IoT數據,實時流式數據分析(streaming analytics),機器學習以及分布式計算的組合相比之前有了長足的進步,同時成本也比以前要低,這使得我們可以更快地完成更多數據的存儲及分析。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/hw8qned1ye.png?imageView2/0/w/1620)
這裏列舉一些IoT,大數據以及機器學習協同完成任務的例子:
- 醫療保健:對慢性疾病的持續監控
- 智慧城市:交通流量和擁堵的管理疏導
- 制造業:結構優化以及預測建築是否需要保養維護
- 運輸業:路徑規劃,減少燃油消耗
- 汽車:無人駕駛汽車
- 電信,信息傳輸:異常檢查
- 零售:基於位置的廣告推薦
要理解IoT,流式數據和機器學習結合為什麽可以提升醫療保健的效果,首先應當了解慢性疾病——如心臟病等是人類的主要疾病,人們的大部分醫療費用都是用在其上,而其中的關鍵是如何做好慢性疾病的護理以避免慢性病人不必要的住院。利用機器學習可以使用更便宜的傳感器監控重要的生命體征,讓醫生更快地根據患者的病情開出更智能的藥方,這一模式在低成本實現可擴展的慢性疾病管理上也具有著一定潛力。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/8qa9wj8e1f.png?imageView2/0/w/1620)
斯坦福大學的一個研究小組的結果表明機器學習模型可以比專家更好地從心電圖(EKG)中識別出心率失常。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/b9uujcoqs6.png?imageView2/0/w/1620)
正如麥肯錫全球研究所的Michael Chui所說:“放置在患者身上的傳感器可以實現遠程實時監控以提供早期預警,從而避免慢性疾病的突發和昂貴的護理費用。而單單對充血性心力衰竭更好的護理就可能為美國減少每年10億美元的費用開銷。”
監控數據可以進行實時分析並在必要時向護理人員發送警報以便他們可以即時了解病人情況的變化。低的誤報率以及對真正的突發情況發出異常警報都是必不可少的;在UCSF的一名病人就是因為服用了超出常規劑量39倍的抗生素而死去。超量39倍的警告和超量1%的警告看起來是完全一樣的,以至於看到了太多次警告的醫生和藥劑師常常不會看警告內容。
本文中我們將討論流式機器學習在心臟監控數據異常檢測上的應用,通過這個例子來展示數字醫療技術到底是怎樣應用的。我們將細致討論如何通過技術來控制觸發警報的準確率從而降低誤報率。關於這個應用的細節,可以從這裏下載pdf文檔查看,這項應用是基於 Ted Dunning 和 Ellen Friedman 編寫的Practical Machine Learning: A New Look At Anomaly Detection。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/ktcu47xr1f.png?imageView2/0/w/1620)
什麽是機器學習?
機器學習通過算法在數據中發現相應的模式(find patterns)並建模來識別這些模式(recognize patterns),從而在新的數據上進行預測(predict)。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/krek3ebm7l.png?imageView2/0/w/1620)
什麽是異常檢測?
異常檢測是無監督學習方法的一個實例。
無監督學習算法並不需要預先獲得樣本的類別或者目標值。它通常用於在輸入數據中尋找到其中的規律以及數據之間的相似之處——比方說可以通過用戶的消費數據對相似的顧客進行分組。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/g8j981ug18.png?imageView2/0/w/1620)
異常檢測首先會建立起正常體征的模式/群組,然後將觀測到的體征與之進行對比,如果確定兩者之間存在明顯的偏差,就可以發出警報。在這個方法之下,我們最初並沒有我們想要分類的異常狀況下心臟狀況的數據集。所以我們首先查閱文獻尋找偏差值並對它進行近乎實時的評估。
通過聚類構建模型
心臟病專家已經定義了正常心電圖的波形模式;我們利用這些模式來訓練模型根據之前觀測到的心跳活動來預測後續時刻的觀測值並與實際值進行比較來評估異常行為。
為了對正常的心跳行為進行建模,我們處理提取了一份心電圖並將它拆分為大約1/3秒的片段(數據是從某一特定的病人或者許多患者中的一組提取得到的,片段與片段之間存在重疊),隨後通過聚類算法來對相似的波形進行分組。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/fmh6vo8lro.png?imageView2/0/w/1620)
聚類算法可以對數據集中出現的數據進行分組。聚類算法訓練完成後可以通過分析輸入樣本之間的相似度從而將樣本歸類到相應的類別下。K-means聚類算法會將觀測值分為K組,每個觀測值屬於哪一個組取決於樣本距離哪一個聚類中心的距離最短。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/an0rkkd9lk.png?imageView2/0/w/1620)
在下面的Apache Spark代碼中,我們完成了一下工作:
- 將心電圖數據轉化為向量。
- 創建K-means對象並設置聚類的個數以及聚類算法訓練的最大叠代次數。
- 在輸入數據上訓練模型。
- 保存模型以備隨後使用。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/49wyc97ieu.png?imageView2/0/w/1620)
通過以上步驟,我們得到了一系列聚類中心圖像構成的目錄(catalog),我們可以用它來重建(reconstruct)一個心電圖的數據,判斷它與我們目錄中的哪一個心電圖波形最為相似。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/72kmewg91t.png?imageView2/0/w/1620)
利用正常數據得到的模型對實時流數據進行處理
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/qbp71r9puu.png?imageView2/0/w/1620)
為了將獲得的真實心電圖數據與上一步建模得到的正常心跳行為進行比較,當心跳波形到達左圖中的綠色波形中的重疊區域時,我們可以獲得與之匹配的正常波形,如中間的紅色波形所示,將兩段紅色波形進行疊加就可以得到與左側綠色波形相似的正常心電圖波形。(為了從重疊的波形片當中重建波形,我們乘了一個基於正弦的窗函數)
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/zt6y31w7br.png?imageView2/0/w/1620)
在下面的Apache Spark代碼當中,我們完成了以下步驟:
- 使用DStream的foreachRDD方法來處理DStream中的每一個RDD。
- 將心電圖數據解析為向量。
- 利用聚類模型得到當前時間窗中波形對應的正常波形類別。
- 用當前獲得的類別id,32個實際心電圖觀測點以及32個重建得到的心電圖數據點創建信息。
- 將增強的信息傳遞給另一個MapR-ES topic
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/anwkafh7ak.png?imageView2/0/w/1620)
在實時的儀表盤中展示實際觀測的心電圖以及重建得到的正常心電圖波形
我們使用了用於構建交互式時間驅動的微服務工具包Vert.x來構建實時的web應用展示觀測到的心電圖波形和重建的正常心電圖數據。在這個web應用當中:
- Vert.x Kafka客戶端消費來自MapR-ES topic的增強心電圖數據並將在Vert.x的event bus上進行消息推送。
- JavaScript瀏覽器客戶端訂閱Vert.x 的event bus,使用SockJS來展示觀測到的心電圖波形(綠色)以及重建的預期波形(紅色)。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/i011t7gls2.png?imageView2/0/w/1620)
異常檢測
觀測的心電圖波形和預期的心電圖波形之間的差值(綠色波形減去紅色波形)即重建誤差,也叫殘差(對應下方的黃色波形),如果殘差很大,那麽可能出現了異常。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/7f552ijp7v.png?imageView2/0/w/1620)
異常檢測的目標是在保證低的誤報率的同時發現真正的問題;這裏的挑戰是如何確定觸發警報的殘差閾值。
T-digest算法可以基於數據集的分布來評估重建誤差的大小。將這個算法加入到異常檢測的工作流之後你可以將警報的數目設定為全體觀測值的一定百分比。T-digist算法可以用適量的樣本非常精準地估計出它的分布(尤其是長尾分布,這也是我們通常關註的異常值的分布)。在得到分布的估計之後,就可以設定產生警報的閾值了。比方說,設定閾值為99%時每100次重建大約就有一次警報,這會產生相對多的警報(根據異常的定義,它應當是少見的)。而設置為99.9%時,基本1000次重建才會出現一次警報。
![技術分享圖片](https://ask.qcloudimg.com/http-save/410635/vxa5tc2tfe.png?imageView2/0/w/1620)
總結
這篇文章介紹了流式系統如何利用輸入的心臟監控數據進行異常檢測,展示了數據如何通過一個自編碼器模型與後續的上下文數據進行比對從而檢測出異常的心跳數據。本文也是IoT,實時流式數據,機器學習和數據可視化以及警報場景相結合提升醫護人員工作效率並降低維護成本的一個實例。
在IoT的不同場景下,要求企業對數據進行收集、匯總,了解整個設備群從而理解其中會發生的事件和情況。除此之外,根據MapR的 Jack Norris所說,企業也應當對邊界事件註入智能以便他們可以更快地對這些事件作出反應。擁有一個通用的數據結構可以幫助你以相同的方式處理所有的數據,控制數據的訪問以及以更快、更高效的方式應用智能算法。
問答
基於雲計算的物聯網應用場景有哪些?
相關閱讀
從互聯網+到智慧智能,醫療行業的發展到底有多快?
在物聯網中應用機器學習:使用 Android Things 與 TensorFlow
對大數據和物聯網環境中數據科學自動化的見解
此文已由作者授權騰訊雲+社區發布,原文鏈接:https://cloud.tencent.com/developer/article/1106060?fromSource=waitui
機器學習,流式IoT和醫療設備互聯