用Tensorflow 2进行二元分类的方法

436 阅读1分钟

用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%以上。混淆矩阵描述如下。