我有用于二进制分类的 Keras 神经网络,最后一层有一个带有 Sigmoid 激活的输出。我注意到大量输出数字严格来说是一或零(而不是预期的介于 0 和 1 之间)。这可能是什么原因?
起初我以为网络可能 100% 确定这些数字的准确性,但注意到其中一些预测实际上是不正确的。
编辑:
模型:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(32, activation = tf.nn.relu, input_shape=(X_train.shape[1],)))
model.add(tf.keras.layers.Dense(64, activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(32, activation = tf.nn.relu))
model.add(tf.keras.layers.Dense(1, activation = tf.nn.sigmoid))
model.compile(optimizer = tf.keras.optimizers.Adam(), loss = 'binary_crossentropy', metrics = ['accuracy', roc_auc])
model.fit(X_train, y_train, epochs=10, validation_data=(X_test, y_test))
y_pred = model.predict(X_test)
yhat = []
for pred in y_pred:
if pred >= 0.7:
yhat.append(1)
else:
yhat.append(0)
数据由 8 列(特征)和 270 000 行(第 9 列是“y”列)组成。在这 270,000 行中,只有 9% 包含类别 1 的标签(其余为 0),所以我对数据进行了下采样(只是删除了带有标签 0 的一堆数据),训练了模型,然后对完整数据进行了预测。我修改了 Sigmoid 确定 1 和 0 的方式,我将阈值从 0.5 更改为 0.7(这是我在下采样数据上获得的 ROC 分数)