【问题标题】:Why is the true positive - false negative distribution always the same为什么真阳性-假阴性分布总是一样的
【发布时间】:2020-02-28 14:34:19
【问题描述】:

我有一个神经网络,我用它来进行二元分类。我改变训练数据的大小并在测试集上进行预测。通过查看结果,tpfn 之间的差异始终相同,tnfp 之间的差异始终相同。例如,在迭代 #2 中,tp#2 - tp#1 = -91fn#2 - fn#1 = +91。另外,fp#2 - fp#1 = -46tn#2 - tn#1 = +46。再举一个例子,tp#3 - tp#2 = -35fn#2 - fn#2 = +35

Iteration #1
tn=119, fp=173, fn=110, tp=407
Iteration #2
tn=165, fp=127, fn=201, tp=316
Iteration #3
tn=176, fp=116, fn=236, tp=281
Iteration #4
tn=157, fp=135, fn=207, tp=310
Iteration #5
tn=155, fp=137, fn=214, tp=303

我尝试了各种神经网络架构,但我总是得到相同的数字。你知道出了什么问题吗?

以下是我使用的一个非常简单的网络:

class AllCnns(nn.Module):
    def __init__(self, vocab_size, embedding_size):
        torch.manual_seed(0)
        super(AllCnns, self).__init__()
        self.word_embeddings = nn.Embedding(vocab_size, embedding_size)
        self.conv1 = nn.Conv1d(embedding_size, 64, 3)
        self.drop1 = nn.Dropout(0.3)
        self.max_pool1 = nn.MaxPool1d(2)
        self.flat1 = nn.Flatten()
        self.fc1 = nn.Linear(64*80, 100)
        self.fc2 = nn.Linear(100, 1)

    def forward(self, sentence):
        embedding = self.word_embeddings(sentence).permute(0, 2, 1)
        conv1 = F.relu(self.conv1(embedding))
        drop1 = self.drop1(conv1)
        max_pool1 = self.max_pool1(drop1)
        flat1 = self.flat1(max_pool1)
        fc1 = F.relu(self.fc1(flat1))
        fc2 = torch.sigmoid(self.fc2(fc1))
        return fc2

【问题讨论】:

    标签: neural-network pytorch conv-neural-network


    【解决方案1】:

    我认为应该是一样的。
    tn(真阴性)和 fp(假阳性)之和加起来就是总的“真实”负值,其他两个也是如此。 所以只要你使用的是相同的数据,

    tn + fp = 292(total negative values)
    fn + tp = 517(total positive values)
    

    这些等式总是正确的。 所以tn#1 + fp#1 = tn#2 + fp#2 所以tn#1 - tn#2 = fp#2 - fp#1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-03
      • 2015-09-28
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2017-06-08
      相关资源
      最近更新 更多