基于PIMA糖尿病数据集的Keras实用深度神经网络
今天我们将学习如何在实际数据集上编写神经网络。
当我们过去学习深度神经网络(DNN)时,我们直接使用在训练和测试中准备好数据,例如(MNIST手写数据集)通过我们的神经网络,但在这里,我们将准备使用PIMA糖尿病数据集,来创建我们的神经网络模型。
获取数据
这里我们将得到CSV数据集。数据可以从这里下载(https://github.com/vidit0210/PIMA-Diabetes-DNN/blob/master/diabetes.csv)。
现在让我们研究一下这个数据是关于什么:
数据集是关于一个二元分类分类数据集。在从更大的数据库中选择实例时,设置了一些约束。特别值得一提的是,这里所有的病人都是21岁以上的印度皮玛人后裔的女性。数据集是在UCI存储库中使用的。
基本上,我们得到了女性的数据集,我们必须预测她是否患有糖尿病。
Python编码
在这里,我将向您介绍如何制作DNN的Python教程。
首先,我们需要导入我们需要处理的所有有用的Python库
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
from sklearn.model_selection import train_test_split
在这里,我们使用pandas读取数据集并执行行和列操作。用于构建我们的DNN,用于制作数组的numpy和sklearn将我们的数据分成训练和测试
现在让我们查看数据的前几行,Python代码如下:
dataframe = pd.read_csv("diabetes.csv")
dataframe.head()
现在我们需要拆分我们的特征和标签。
我们可以看到结果列确定患者是否患有糖尿病(1-是,0-否)。其他列确定了预测必不可少的特征。
我们将数据拆分为特征[X]和标签[Y],并删除数据集中的缺失值。下面的Python代码完成所需的任务。
df_label = dataframe['Outcome']
df_features = dataframe.drop('Outcome', 1)
df_features.replace('?', -99999, inplace=True)
现在我们将对所有类型的标签进行one hot编码。例如,我们将1转换为[1,0],将0转换为[0,1]。Python代码如下:
label = []
for lab in df_label:
if lab == 1:
label.append([1, 0]) # class 1
elif lab == 0:
label.append([0, 1]) # class 0
example of one hot encoding
现在我们将数据分成训练和测试集。Python代码如下:
data = np.array(df_features)
label = np.array(label)
x_train, x_test, y_train, y_test = train_test_split(data, label, test_size=0.2, random_state=42)
建立我们的神经网络
现在让我们看看构建神经网络的Python代码
model = Sequential()
model.add(Dense(500, input_dim=8, activation='sigmoid'))
model.add(Dense(100, activation='sigmoid'))
model.add(Dense(2, activation='softmax'))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
model.fit(x_train,y_train, epochs=1000, batch_size=70, validation_data=(x_test, y_test))
在这里,我们已经创建简单的Keras神经网络,其中2个隐藏层(500和100),具有8个输入特征和2个标签来预测。
其他参考示例代码
feature_try = np.array([x_train[0]])
feature_try2 = np.array([x_train[1]])
result =model.predict_classes(feature_try2)
if result==0:
print("NO Diabetes")
else:
print("Diabetes")