手把手丨我們在UCL找到了一個糖尿病資料集,用機器學習預測糖尿病

NO IMAGE

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

大資料文摘作品

作者:Susan Li 

編譯:袁雪瑤、吳雙、姜範波


根據美國疾病控制預防中心的資料,現在美國1/7的成年人患有糖尿病。但是到2050年,這個比例將會快速增長至高達1/3。我們在UCL機器學習資料庫裡一個糖尿病資料集,希望可以通過這一資料集,瞭解如何利用機器學習來幫助我們預測糖尿病,讓我們開始吧!

資料集github連結:https://github.com/susanli2016/Machine-Learning-with-Python/blob/master/diabetes.csv

資料

糖尿病資料集可從UCI機器學習庫中獲取並下載。

0?wx_fmt=png

特徵(懷孕次數,血糖,血壓,皮脂厚度,胰島素,BMI身體質量指數,糖尿病遺傳函式,年齡,結果):

0?wx_fmt=png

0?wx_fmt=png

糖尿病資料集由768個資料點組成,各有9個特徵:

0?wx_fmt=png

“結果”是我們將要預測的特徵,0意味著未患糖尿病,1意味著患有糖尿病。在768個資料點中,500個被標記為0,268個標記為1。

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

KNN演算法

k-NN演算法幾乎可以說是機器學習中最簡單的演算法。建立模型只需儲存訓練資料集。而為了對新的資料點做出預測,該演算法會在訓練資料集中找到與其相距最近的資料點——也就是它的“近鄰點”。

首先,讓我們研究一下是否能夠確認模型的複雜度和精確度之間的關係:

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

上圖展示了訓練集和測試集在模型預測準確度(y軸)和近鄰點個數設定(x軸)之間的關係。如果我們僅選擇一個近鄰點,那麼訓練集的預測是絕對正確的。但是當更多的近鄰點被選入作為參考時,訓練集的準確度會下降,這表明了使用單一近鄰會導致模型太過複雜。這裡的最好方案可以從圖中看出是選擇9個近鄰點。

圖中建議我們應該選擇n_neighbors=9,下面給出:

0?wx_fmt=png

K-NN分類的準確度在訓練集中為:0.79

K-NN分類的準確度在測試集中為:0.78

邏輯迴歸

邏輯迴歸是最常見的分類演算法之一。

0?wx_fmt=png

訓練集準確度:0.781

測試集準確度:0.771

正則化引數C=1(預設值)的模型在訓練集上準確度為78%,在測試集上準確度為77%。

0?wx_fmt=png

訓練集準確度:0.785

測試集準確度:0.766

而將正則化引數C設定為100時,模型在訓練集上準確度稍有提高但測試集上準確度略降,說明較少正則化和更復雜的模型並不一定會比預設引數模型的預測效果更好。

因此,我們選擇預設值C=1。

讓我們用視覺化的方式來看一下用三種不同正則化引數C所得模型的係數。

更強的正則化(C = 0.001)會使係數越來越接近於零。仔細地看圖,我們還能發現特徵“DiabetesPedigreeFunction”(糖尿病遺傳函式)在 C=100, C=1 和C=0.001的情況下, 係數都為正。這表明無論是哪個模型,DiabetesPedigreeFunction(糖尿病遺傳函式)這個特徵值都與樣本為糖尿病是正相關的。

0?wx_fmt=png

0?wx_fmt=png

決策樹

0?wx_fmt=png

訓練集準確度:1.000

測試集準確度:0.714

訓練集的準確度可以高達100%,而測試集的準確度相對就差了很多。這表明決策樹是過度擬合的,不能對新資料產生好的效果。因此,我們需要對樹進行預剪枝。

我們設定max_depth=3,限制樹的深度以減少過擬合。這會使訓練集的準確度降低,但測試集準確度提高。

0?wx_fmt=png

訓練集準確度:0.773

測試集準確度:0.740

決策樹中特徵重要度

決策樹中的特徵重要度是用來衡量每個特徵對於預測結果的重要性的。對每個特徵有一個從0到1的打分,0表示“一點也沒用”,1表示“完美預測”。各特徵的重要度加和一定是為1的。

0?wx_fmt=png

特徵重要度:

[ 0.04554275 0.6830362 0. 0. 0. 0.27142106 0. 0. ]

然後我們能視覺化特徵重要度:

0?wx_fmt=png

0?wx_fmt=png

特徵“血糖”是目前最重要的特徵。

隨機森林

讓我們在糖尿病資料集中應用一個由100棵樹組成的隨機森林:

0?wx_fmt=png

訓練集準確度:1.000

測試集準確度:0.786

沒有更改任何引數的隨機森林有78.6%的準確度,比邏輯迴歸和單一決策樹的預測效果更好。然而,我們還是可以調整max_features設定,看看效果是否能夠提高。

0?wx_fmt=png

訓練集準確度:0.800

測試集準確度:0.755

結果並沒有提高,這表明預設引數的隨機森林在這裡效果很好。

隨機森林的特徵重要度:

0?wx_fmt=png

0?wx_fmt=png

與單一決策樹相似,隨機森林的結果仍然顯示特徵“血糖”的重要度最高,但是它也同樣顯示“BMI(身體質量指數)”在整體中是第二重要的資訊特徵。隨機森林的隨機性促使演算法考慮了更多可能的解釋,這就導致隨機森林捕獲的資料比單一樹要大得多。

梯度提升

0?wx_fmt=png

訓練集準確度:0.917

測試集準確度:0.792

我們可能是過擬合了。為了降低這種過擬合,我們可以通過限制最大深度或降低學習速率來進行更強的修剪:

0?wx_fmt=png

訓練集準確度:0.804

測試集準確度:0.781

0?wx_fmt=png

訓練集準確度:0.802

測試集準確度:0.776

如我們所期望的,兩種降低模型複雜度的方法都降低了訓練集的準確度。可是測試集的泛化效能並沒有提高。

儘管我們對這個模型的結果不是很滿意,但我們還是希望通過特徵重要度的視覺化來對模型做更進一步的瞭解。

0?wx_fmt=png

我們可以看到,梯度提升樹的特徵重要度與隨機森林的特徵重要度有點類似,同時它給這個模型的所有特徵賦了重要度值。

支援向量機

0?wx_fmt=png

訓練集準確度:1.00

測試集準確度:0.65

這個模型過擬合比較明顯,雖然在訓練集中有一個完美的表現,但是在測試集中僅僅有65%的準確度。

SVM要求所有的特徵要在相似的度量範圍內變化。我們需要重新調整各特徵值尺度使其基本上在同一量表上。

0?wx_fmt=png

訓練集準確度:0.77

測試集準確度:0.77

資料的度量標準化後效果大不同!現在我們的模型在訓練集和測試集的結果非常相似,這其實是有一點過低擬合的,但總體而言還是更接近100%準確度的。這樣來看,我們還可以試著提高C值或者gamma值來配適更復雜的模型。

0?wx_fmt=png

訓練集準確度:0.790

測試集準確度:0.7979

提高了C值後,模型效果確實有一定提升,測試集準確度提至79.7%。

深度學習

0?wx_fmt=png

訓練集準確度:0.71

測試集準確度:0.67

多層神經網路(MLP)的預測準確度並不如其他模型表現的好,這可能是資料的尺度不同造成的。深度學習演算法同樣也希望所有輸入的特徵在同一尺度範圍內變化。理想情況下,是均值為0,方差為1。所以,我們必須重新標準化我們的資料,以便能夠滿足這些需求。

0?wx_fmt=png

訓練集準確度“0.823

測試集準確度:0.802

讓我們增加迭代次數:

0?wx_fmt=png

訓練集準確度:0.877

測試集準確度:0.755

增加迭代次數僅僅提升了訓練集的效能,而對測試集沒有效果。

讓我們調高alpha引數並且加強權重的正則化。

0?wx_fmt=png

訓練集準確度:0.795

測試集準確度:0.792

這個結果是好的,但我們無法更進一步提升測試集準確度。

因此,到目前為止我們最好的模型是在資料標準化後的預設引數深度學習模型。

最後,我們繪製了一個在糖尿病資料集上學習的神經網路的第一層權重熱圖。

0?wx_fmt=png

0?wx_fmt=png

從這個熱度圖中,快速指出哪個或哪些特徵的權重較高或較低是不容易的。

設定正確的引數非常重要

本文我們練習了很多種不同的機器學習模型來進行分類和迴歸,瞭解了它們的優缺點是什麼,以及如何控制其模型複雜度。我們同樣看到,對於許多演算法來說,設定正確的引數對於效能良好是非常重要的。

我們是應該要知道如何應用、調整和分析以上練習的模型的。現在該輪到你了!試著用這些演算法中的任意一種在scikit-learn包中內建的資料集或任何你自己的資料集上去練習吧!享受機器學習吧!

建立這個帖子的原始碼可以在下面的連結裡找到。歡迎任何的反饋或問題:

http://shop.oreilly.com/product/0636920030515.do

原文連結:

<https://towardsdatascience.com/machine-learning-for-diabetes-562dd7df4d42>

優質課程推薦

稀牛學院 網易雲課堂

隆重推出人工智慧微專業!

《人工智慧數學基礎》

最短時間get最核心數學知識!

《機器學習工程師》

前沿實戰課程,配備線上實驗平臺

高品質課程,你的2018年AI學習掌門人!

0?wx_fmt=png

志願者介紹

回覆“志願者”加入我們

0?wx_fmt=png

0?wx_fmt=png

0?wx_fmt=png

往期精彩文章

點選圖片閱讀

Marcus十大理由質疑深度學習?LeCun說大部分錯了

0?wx_fmt=png

0?wx_fmt=jpeg

0?wx_fmt=jpeg