我已经开发了用于分类的神经网络,并且我的准确度达到了0.93,问题是我预测所有零都是因为数据的分布。
我该如何解决?我应该从神经网络更改为其他算法吗?
预先感谢
编辑:我刚刚检查了一下,我的模型预测的每一行的概率相同。
该模型是具有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的欠采样和上采样),但是网络仍然为每一行预测相同的值:
我已经测试过将激活功能更改为tanh或S型,但是会输出NaN's
答案 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进行了详细说明的更多信息和其他解决方案。