心髒病是人類健康的頭号殺手。全世界1/3的人口死亡是因心髒病引起的,而我國,每年有幾十萬人死于心髒病。 是以,如果可以通過提取人體相關的體側名額,通過資料挖掘的方式來分析不同特征對于心髒病的影響,對于預測和預防心髒病将起到至關重要的作用。本文将會通過真實的資料,通過阿裡雲機器學習平台搭建心髒病預測案例。
針對美國某區域的心髒病檢查患者的體測資料,共303條資料。具體字段如下表:
字段名
含義
類型
描述
age
年齡
string
對象的年齡,數字表示
sex
性别
對象的性别,female和male
cp
胸部疼痛類型
痛感由重到無typical、atypical、non-anginal、asymptomatic
trestbps
血壓
血壓數值
chol
膽固醇
膽固醇數值
fbs
空腹血糖
血糖含量大于120mg/dl為true,否則為false
restecg
心電圖結果
是否有t波,由輕到重為norm、hyp
thalach
最大心跳數
exang
運動時是否心絞痛
是否有心絞痛,true為是,false為否
oldpeak
運動相對于休息的st depression
st段壓數值
slop
心電圖st segment的傾斜度
st segment的slope,程度分為down、flat、up
ca
透視檢檢視到的血管數
thal
缺陷種類
并發種類,由輕到重norm、fix、rev
status
是否患病
是否患病,buff是健康、sick是患病
資料挖掘流程如下:
整體實驗流程:
資料預處理也叫作資料清洗,主要在資料進入算法流程前對資料進行去噪、填充缺失值、類型變換等操作。本次實驗的輸入資料包括14個特征和1個目标隊列。需要解決的場景是根據使用者的體檢名額預測是否會患有心髒病,每個樣本隻有患病或不患病兩種,是分類問題。因為本次分類實驗選用的是線性模型邏輯回歸,要求輸入的特征都是double型的資料。
輸入資料展示:
我們看到有很多資料是文字描述的,在資料預處理的過程中我們需要根據每個字段的含義将字元型轉為數值。
1)二值類的資料
二值類的比較容易轉換,如sex字段有兩種表現形式female和male,我們可以将female表示成0,把male表示成1。
2)多值類的資料
比如cp字段,表示胸部的疼痛感,我們可以通過疼痛的由輕到重映射成0~3的數值。
資料的預處理通過sql腳本來實作,具體請參考sql腳本-1元件,
特征工程主要是包括特征的衍生、尺度變化等。本例中有兩個元件負責特征工程的部分。
1)過濾式特征選擇
主要是通過這個元件判斷每個特征對于結果的影響,通過資訊熵和基尼系數來表示,可以通過檢視評估報告來顯示最終的結果。
2)歸一化
因為本次實驗選擇的是通過邏輯回歸二分類來進行模型訓練,需要每個特征去除量綱的影響。歸一化的作用是将每個特征的數值範圍變為0到1之間。歸一化的公式為result=(val-min)/(max-min)。
歸一化結果:
本次實驗是監督學習,因為我們已經知道每個樣本是否患有心髒病,所謂監督學習就是已知結果來訓練模型。解決的問題是預測一組使用者是否患有心髒病。
1)拆分
首先通過拆分元件将資料分為兩部分,本次實驗按照訓練集和預測集7:3的比例拆分。訓練集資料流入邏輯回歸二分類元件用來訓練模型,預測集資料進入預測元件。
2)邏輯回歸二分類
邏輯回歸是一個線性模型,在這裡通過計算結果的門檻值實作分類。具體的算法詳情推薦大家在網上或者書籍中自行了解。邏輯回歸訓練好的模型可以在模型頁簽中檢視。
3)預測
預測元件的兩個輸入分别是模型和預測集。預測結果展示的是預測資料、真實資料、每組資料不同結果的機率。
通過混淆矩陣元件可以評估模型的準确率等參數,
通過此元件可以友善的通過預測的準确性來評估模型。
通過以上資料探索的流程我們可以得到以下的結論。
1)特征權重
我們可以通過過濾式特征選擇得到每個特征對于結果的權重。
-可以看出thalach(心跳數)對于是否發生心髒病影響最大。
-性别對于心髒病沒有影響
2)模型效果
通過上文提供的14個特征,可以達到百分之八十多的心髒病預測準确率。模型可以用來做預測,輔助醫生預防和治療心髒病。
作者微信公衆号(與作者讨論):
下期預告:機器學習圖算法最短路徑的計算