閱讀953 返回首頁    go 搜狐


心髒病預測案例__案例_機器學習-阿裏雲

一、背景

心髒病是人類健康的頭號殺手。全世界1/3的人口死亡是因心髒病引起的,而我國,每年有幾十萬人死於心髒病。 所以,如果可以通過提取人體相關的體側指標,通過數據挖掘的方式來分析不同特征對於心髒病的影響,對於預測和預防心髒病將起到至關重要的作用。本文將會通過真實的數據,通過阿裏雲機器學習平台搭建心髒病預測案例。

二、數據集介紹

數據源: UCI開源數據集heart_disease針對美國某區域的心髒病檢查患者的體測數據,共303條數據。具體字段如下表:

字段名 含義 類型 描述
age 年齡 string 對象的年齡,數字表示
sex 性別 string 對象的性別,female和male
cp 胸部疼痛類型 string 痛感由重到無typical、atypical、non-anginal、asymptomatic
trestbps 血壓 string 血壓數值
chol 膽固醇 string 膽固醇數值
fbs 空腹血糖 string 血糖含量大於120mg/dl為true,否則為false
restecg 心電圖結果 string 是否有T波,由輕到重為norm、hyp
thalach 最大心跳數 string 最大心跳數
exang 運動時是否心絞痛 string 是否有心絞痛,true為是,false為否
oldpeak 運動相對於休息的ST depression string st段壓數值
slop 心電圖ST segment的傾斜度 string ST segment的slope,程度分為down、flat、up
ca 透視檢查看到的血管數 string 透視檢查看到的血管數
thal 缺陷種類 string 並發種類,由輕到重norm、fix、rev
status 是否患病 string 是否患病,buff是健康、sick是患病

三、數據探索流程

數據挖掘流程如下:

整體實驗流程:

1.數據預處理

數據預處理也叫作數據清洗,主要在數據進入算法流程前對數據進行去噪、填充缺失值、類型變換等操作。本次實驗的輸入數據包括14個特征和1個目標隊列。需要解決的場景是根據用戶的體檢指標預測是否會患有心髒病,每個樣本隻有患病或不患病兩種,是分類問題。因為本次分類實驗選用的是線性模型邏輯回歸,要求輸入的特征都是double型的數據。輸入數據展示:我們看到有很多數據是文字描述的,在數據預處理的過程中我們需要根據每個字段的含義將字符型轉為數值。

1)二值類的數據二值類的比較容易轉換,如sex字段有兩種表現形式female和male,我們可以將female表示成0,把male表示成1。

2)多值類的數據比如cp字段,表示胸部的疼痛感,我們可以通過疼痛的由輕到重映射成0~3的數值。

數據的預處理通過sql腳本來實現,具體請參考SQL腳本-1組件,

  1. select age,
  2. (case sex when 'male' then 1 else 0 end) as sex,
  3. (case cp when 'angina' then 0 when 'notang' then 1 else 2 end) as cp,
  4. trestbps,
  5. chol,
  6. (case fbs when 'true' then 1 else 0 end) as fbs,
  7. (case restecg when 'norm' then 0 when 'abn' then 1 else 2 end) as restecg,
  8. thalach,
  9. (case exang when 'true' then 1 else 0 end) as exang,
  10. oldpeak,
  11. (case slop when 'up' then 0 when 'flat' then 1 else 2 end) as slop,
  12. ca,
  13. (case thal when 'norm' then 0 when 'fix' then 1 else 2 end) as thal,
  14. (case status when 'sick' then 1 else 0 end) as ifHealth
  15. from ${t1};

2.特征工程

特征工程主要是包括特征的衍生、尺度變化等。本例中有兩個組件負責特征工程的部分。

1)過濾式特征選擇主要是通過這個組件判斷每個特征對於結果的影響,通過信息熵和基尼係數來表示,可以通過查看評估報告來顯示最終的結果。

2)歸一化因為本次實驗選擇的是通過邏輯回歸二分類來進行模型訓練,需要每個特征去除量綱的影響。歸一化的作用是將每個特征的數值範圍變為0到1之間。歸一化的公式為result=(val-min)/(max-min)。歸一化結果:

3.模型訓練和預測

本次實驗是監督學習,因為我們已經知道每個樣本是否患有心髒病,所謂監督學習就是已知結果來訓練模型。解決的問題是預測一組用戶是否患有心髒病。

1)拆分首先通過拆分組件將數據分為兩部分,本次實驗按照訓練集和預測集7:3的比例拆分。訓練集數據流入邏輯回歸二分類組件用來訓練模型,預測集數據進入預測組件。

2)邏輯回歸二分類邏輯回歸是一個線性模型,在這裏通過計算結果的閾值實現分類。具體的算法詳情推薦大家在網上或者書籍中自行了解。邏輯回歸訓練好的模型可以在模型頁簽中查看。

3)預測預測組件的兩個輸入分別是模型和預測集。預測結果展示的是預測數據、真實數據、每組數據不同結果的概率。

4.評估

通過混淆矩陣組件可以評估模型的準確率等參數,

通過此組件可以方便的通過預測的準確性來評估模型。

四.總結

通過以上數據探索的流程我們可以得到以下的結論。

1)特征權重我們可以通過過濾式特征選擇得到每個特征對於結果的權重。

-可以看出thalach(心跳數)對於是否發生心髒病影響最大。

-性別對於心髒病沒有影響

2)模型效果通過上文提供的14個特征,可以達到百分之八十多的心髒病預測準確率。模型可以用來做預測,輔助醫生預防和治療心髒病。

五、其它

參與討論:雲棲社區公眾號

免費體驗:阿裏雲數加機器學習平台

下期預告:機器學習圖算法最短路徑的計算

最後更新:2016-11-23 16:04:12

  上一篇:go 回歸算法做農業貸款發放預測__案例_機器學習-阿裏雲
  下一篇:go 新聞分類案例__案例_機器學習-阿裏雲