【机器学习PAI实践一】搭建心脏病预测案例
產品地址:https://data.aliyun.com/product/learn?spm=a21gt.99266.416540.102.OwEfx2
一、背景
心臟病是人類健康的頭號殺手。全世界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組件,
select age, (case sex when 'male' then 1 else 0 end) as sex, (case cp when 'angina' then 0 when 'notang' then 1 else 2 end) as cp, trestbps, chol, (case fbs when 'true' then 1 else 0 end) as fbs, (case restecg when 'norm' then 0 when 'abn' then 1 else 2 end) as restecg, thalach, (case exang when 'true' then 1 else 0 end) as exang, oldpeak, (case slop when 'up' then 0 when 'flat' then 1 else 2 end) as slop, ca, (case thal when 'norm' then 0 when 'fix' then 1 else 2 end) as thal, (case status when 'sick' then 1 else 0 end) as ifHealth from ${t1};2.特征工程
特征工程主要是包括特征的衍生、尺度變化等。本例中有兩個組件負責特征工程的部分。
1)過濾式特征選擇
主要是通過這個組件判斷每個特征對于結果的影響,通過信息熵和基尼系數來表示,可以通過查看評估報告來顯示最終的結果。
2)歸一化
因為本次實驗選擇的是通過邏輯回歸二分類來進行模型訓練,需要每個特征去除量綱的影響。歸一化的作用是將每個特征的數值范圍變為0到1之間。歸一化的公式為result=(val-min)/(max-min)。
歸一化結果:
3.模型訓練和預測
本次實驗是監督學習,因為我們已經知道每個樣本是否患有心臟病,所謂監督學習就是已知結果來訓練模型。解決的問題是預測一組用戶是否患有心臟病。
1)拆分
首先通過拆分組件將數據分為兩部分,本次實驗按照訓練集和預測集7:3的比例拆分。訓練集數據流入邏輯回歸二分類組件用來訓練模型,預測集數據進入預測組件。
2)邏輯回歸二分類
邏輯回歸是一個線性模型,在這里通過計算結果的閾值實現分類。具體的算法詳情推薦大家在網上或者書籍中自行了解。邏輯回歸訓練好的模型可以在模型頁簽中查看。
3)預測
預測組件的兩個輸入分別是模型和預測集。預測結果展示的是預測數據、真實數據、每組數據不同結果的概率。
4.評估
通過混淆矩陣組件可以評估模型的準確率等參數,
通過此組件可以方便的通過預測的準確性來評估模型。
四.總結
通過以上數據探索的流程我們可以得到以下的結論。
1)特征權重
我們可以通過過濾式特征選擇得到每個特征對于結果的權重。
-可以看出thalach(心跳數)對于是否發生心臟病影響最大。
-性別對于心臟病沒有影響
2)模型效果
通過上文提供的14個特征,可以達到百分之八十多的心臟病預測準確率。模型可以用來做預測,輔助醫生預防和治療心臟病。
五、其它
免費體驗:阿里云數加機器學習平臺
總結
以上是生活随笔為你收集整理的【机器学习PAI实践一】搭建心脏病预测案例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PM九步法
- 下一篇: 【机器学习PAI实践二】人口普查统计