機器學習|我們在UCL找到了一個糖尿病數據集,用機器學習預測糖尿病(一)


作者:Susan Li 

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

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

       https://github.com/susanli2016/Machine-Learning-with-Python/blob/master/diabetes.csv

數據:

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

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
diabetes=pd.read_csv('C:\Download\Machine-Learning-with-Python-master\Machine-Learning-with-Python-master\diabetes.csv')
print(diabetes.columns)

  

Index(['Pregnancies', 'Glucose', 'BloodPressure', 'SkinThickness', 'Insulin',
    'BMI', 'DiabetesPedigreeFunction', 'Age', 'Outcome'], dtype='object')
特征(懷孕次數,血糖,血壓,皮脂厚度,胰島素,BMI身體質量指數,糖尿病遺傳函數,年齡,結果)
diabetes.head()

  

print(diabetes.groupby('Outcome').size())
Outcome
0    500
1    268
dtype: int64   “結果”是我們將要預測的特征,0意味着未患糖尿病,1意味着患有糖尿病。在768個數據點中,500個被標記為0,268個標記為1。
print("dimennsion of diabetes data:{}".format(diabetes.shape))
dimennsion of diabetes data:(768, 9),糖尿病數據集由768個數據點組成,各有9個特征。
import seaborn as sns
sns.countplot(diabetes['Outcome'],label="Count")

  

KNN算法:

  k-NN算法幾乎可以說是機器學習中最簡單的算法。建立模型只需存儲訓練數據集。而為了對新的數據點做出預測,該算法會在訓練數據集中找到與其相距最近的數據點——也就是它的“近鄰點”。首先,讓我們研究一下是否能夠確認模型的復雜度和精確度之間的關系:

from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(diabetes.loc[:,diabetes.columns !='Outcome'],diabetes['Outcome'],stratify=diabetes['Outcome'],random_state=66)
from sklearn.neighbors import KNeighborsClassifier
training_accuracy=[]
test_accuracy=[]
#try n_neighbors from 1 to 10
neighbors_settings=range(1,11)

for n_neighbors in neighbors_settings:
    #build the model
    knn=KNeighborsClassifier(n_neighbors=n_neighbors)
    knn.fit(x_train,y_train)
    #record training set accuracy
    training_accuracy.append(knn.score(x_train,y_train))
    #record test set accuracy
    test_accuracy.append(knn.score(x_test,y_test))
plt.plot(neighbors_settings,training_accuracy,label="training accuracy")
plt.plot(neighbors_settings,test_accuracy,label="test accuracy")
plt.ylabel("Accuracy")
plt.xlabel("n_neighbors")
plt.legend()
plt.savefig('knn_compare_model')

  

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

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

knn=KNeighborsClassifier(n_neighbors=9)
knn.fit(x_train,y_train)

print('Accuracy of K-NN classifier on training set:{:.2f}'.format(knn.score(x_train,y_train)))
print('Accuracy of K-NN classifier on training set:{:.2f}'.format(knn.score(x_test,y_test)))
Accuracy of K-NN classifier on training set:0.79
Accuracy of K-NN classifier on training set:0.78

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM