Beispiel #1
0
def test_class_reduce():
    num = torch.randint(1, 10, (100, )).float()
    denom = torch.randint(10, 20, (100, )).float()
    weights = torch.randint(1, 100, (100, )).float()

    assert torch.allclose(class_reduce(num, denom, weights, 'micro'),
                          torch.sum(num) / torch.sum(denom))
    assert torch.allclose(class_reduce(num, denom, weights, 'macro'),
                          torch.mean(num / denom))
    assert torch.allclose(
        class_reduce(num, denom, weights, 'weighted'),
        torch.sum(num / denom * (weights / torch.sum(weights))))
    assert torch.allclose(class_reduce(num, denom, weights, 'none'),
                          num / denom)
Beispiel #2
0
def _fbeta_compute(true_positives: torch.Tensor,
                   predicted_positives: torch.Tensor,
                   actual_positives: torch.Tensor,
                   beta: float = 1.0,
                   average: str = "micro") -> torch.Tensor:
    if average == "micro":
        precision = true_positives.sum().float() / predicted_positives.sum()
        recall = true_positives.sum().float() / actual_positives.sum()
    else:
        precision = true_positives.float() / predicted_positives
        recall = true_positives.float() / actual_positives

    num = (1 + beta**2) * precision * recall
    denom = beta**2 * precision + recall
    return class_reduce(num,
                        denom,
                        weights=actual_positives,
                        class_reduction=average)