About Prediction in Binary Classification

Hi guys, I can’t understand how to get the y prediction from the training model without going to testing, this would help me to get a classification_report of the model before testing it. Hope you can answer, thank you very much.

class BinaryClassification(nn.Module):
    def __init__(self):
        super(BinaryClassification, self).__init__()
        self.layer_1 = nn.Linear(feature, node)
        self.layer_2 = nn.Linear(node, node)
        self.layer_out = nn.Linear(node, 1)

        self.relu = nn.ReLU()
        self.dropout = nn.Dropout(p=0.1)
        self.batchnorm1 = nn.BatchNorm1d(node)
        self.batchnorm2 = nn.BatchNorm1d(node)

    def forward(self, inputs):
        x = self.relu(self.layer_1(inputs))
        x = self.batchnorm1(x)
        x = self.relu(self.layer_2(x))
        x = self.batchnorm2(x)
        x = self.dropout(x)
        x = self.layer_out(x)

        return x

After this training

flag = True
for e in range(1, EPOCHS + 1):
    epoch_loss = 0
    epoch_acc = 0
    if flag:
        for X_batch, y_batch in train_loader:
            X_batch, y_batch = X_batch.to(device), y_batch.to(device)
            y_pred = model(X_batch)
            loss = criterion(y_pred, y_batch.unsqueeze(1))
            acc = binary_acc(y_pred, y_batch.unsqueeze(1))
            epoch_loss += loss.item()
            epoch_acc += acc.item()
            if loss.item() < 0.00001:
                flag = False

After this training I need a classification_report, so I need a y_pred list to compare with true y.

Since your model outputs logits, you could use a threshold e.g. at 0.0 to create your predictions as:

preds = y_pred > 0.0

You could also apply torch.sigmoid and use a threshold in the range [0, 1] instead.