预测全零

时间:2018-11-18 07:42:38

标签: python tensorflow machine-learning deep-learning

我已经开发了用于分类的神经网络,并且我的准确度达到了0.93,问题是我预测所有零都是因为数据的分布。

Data distribution

我该如何解决?我应该从神经网络更改为其他算法吗?

预先感谢

编辑:我刚刚检查了一下,我的模型预测的每一行的概率相同。

该模型是具有5层的神经网络,其中tf.nn.relu6是激活函数。成本函数为tf.nn.sigmoid_cross_entropy_with_logits

要预测我使用的值:

predicted = tf.nn.sigmoid(Z5)
correct_pred = tf.equal(tf.round(predicted), Y)
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

编辑2

我已经“修复”了不平衡类问题(0和1的欠采样和上采样),但是网络仍然为每一行预测相同的值:

Prediction

我已经测试过将激活功能更改为tanh或S型,但是会输出NaN's

1 个答案:

答案 0 :(得分:0)

对于不平衡数据有多种解决方案。但是首先,对于不平衡的数据,准确性不是一个好的指标,因为如果您只有5个正值和95个负值,则准确性将是预测负值的95%。您应该检查敏感性和特异性,或其他适用于不平衡数据的指标,例如 LIFT得分

要使用不平衡的数据训练模型,有多种解决方案。其中之一就是U p样本少数民族阶层

  

上采样是从以下位置随机复制观测值的过程   少数派,以增强其信号。

您可以使用以下代码对数据进行上采样:

from sklearn.utils import resample
# Separate majority and minority classes
df_majority = df[df.balance==0]
df_minority = df[df.balance==1]

# Upsample minority class
df_minority_upsampled = resample(df_minority, 
                                 replace=True,     # sample with replacement
                                 n_samples=576,    # to match majority class
                                 random_state=123) # reproducible results

# Combine majority class with upsampled minority class
df_upsampled = pd.concat([df_majority, df_minority_upsampled])

# Display new class counts
df_upsampled.balance.value_counts()
# 1    576
# 0    576
# Name: balance, dtype: int64

您可以找到here进行了详细说明的更多信息和其他解决方案。

相关问题