Почему истинно положительное - ложноотрицательное распределение всегда одинаково - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть нейронная сеть, которую я использую для двоичной классификации. Я меняю размер тренировочных данных и прогнозирую на тестовом наборе. Если посмотреть на результаты, разница между tp и fn всегда одинакова, а разница между tn и fp всегда одинакова. Например, в итерации № 2 tp#2 - tp#1 = -91 и fn#2 - fn#1 = +91. Также fp#2 - fp#1 = -46 и tn#2 - tn#1 = +46. В качестве другого примера, tp#3 - tp#2 = -35 и fn#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

1 Ответ

1 голос
/ 28 февраля 2020

Я думаю, что это должно быть одинаково.
Сумма 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

...