用Tensorflow 2进行二元分类
这篇文章使用Tensorflow与Keras API来解决基于前馈神经网络(又称多层感知器)预测糖尿病的分类问题,并使用Kaggle的Pima Indians Diabetes数据库。带有代码的Google colab笔记本可在GitHub上找到。
探索性数据分析
该数据集由8个数字特征组成,每个特征都没有任何缺失值。该数据库包含768条记录,其中500条对应负面结果,268条对应正面结果。
没有任何特征是彼此强烈相关的。
建立一个模型
我们将数据集分成占整个数据80%的训练部分和占20%的测试部分。一个由6层组成的
顺序模型。第一个是归一化层,这是一种实验
预处理层,用来强迫它的输入具有均值为0、标准差为1的分布。
normalizer = preprocessing.Normalization(axis=-1)
normalizer.adapt(np.array(X_train))
normalizer.mean.numpy()
该模型包含两个三个全连接层,两个有五个单元和ReLu激活,一个输出层有sigmoid激活函数。此外,还有两个退出层,以防止过度拟合。具有ReLu激活功能的层使用He正常权重初始化,输出层使用Glorot正常权重初始化。
model = Sequential()
model.add(normalizer)
model.add(Dense(5, input_shape=(X_train.shape[1],),
activation='relu', kernel_initializer='he_normal'))
model.add(Dropout(0.2))
model.add(Dense(5, activation="relu",
kernel_initializer='he_normal'))
model.add(Dropout(0.2))
model.add(Dense(1, activation="sigmoid",
kernel_initializer="glorot_normal"))
该模型使用亚当优化器、二进制交叉熵损失函数和二进制精度作为衡量标准。
model.compile(Adam(learning_rate=1e-4),
loss='binary_crossentropy',
metrics=['binary_accuracy'])
结果
选择1e-5的学习率以确保训练和验证损失的减少。加入了两个剔除层以防止过度拟合。
准确率达到了70%以上。混淆矩阵描述如下。



