Spaces:
Runtime error
Runtime error
"""Computes the accuracy at k for a set of labels""" | |
import evaluate | |
import datasets | |
import typing | |
_CITATION = "" | |
_DESCRIPTION = """\ | |
Computes the accuracy at k for a set of predictions. The accuracy at k is the \ | |
number of instances where the real label is in the set of the k most probable | |
classes. | |
The parameter k is inferred from the shape of the array passed. If you want the accuracy \ | |
at 5 the shape needs to be (N, 5) where N is the number of examples. | |
""" | |
# TODO: Add description of the arguments of the module here | |
_KWARGS_DESCRIPTION = """ | |
Args: | |
predictions: An array of shape (N, K) where N is the number of examples | |
and K is the desired k (5 for accuracy at 5) | |
references: An array of the true labels for the examples | |
Returns: | |
accuracy: the accuracy at k for the inputs | |
Examples: | |
>>> accuracyk = evaluate.load("KevinSpaghetti/accuracyk") | |
>>> #with numpy arrays | |
>>> predictions = np.array([ | |
>>> [0, 7, 1, 3, 5], | |
>>> [0, 2, 9, 8, 4], | |
>>> [8, 4, 0, 1, 3], | |
>>> ]) | |
>>> references = np.array([ | |
>>> 3, | |
>>> 4, | |
>>> 0 | |
>>> ]) | |
>>> results = accuracyk.compute(predictions=predictions, references=references) | |
>>> #\{ accuracy: 1 \} # every label is in its row | |
>>> #With lists | |
>>> predictions = [ | |
>>> [0, 7, 1, 3, 5], | |
>>> [0, 2, 9, 8, 4], | |
>>> [8, 4, 0, 1, 3], | |
>>> ] | |
>>> references = [ | |
>>> 3, | |
>>> 5, | |
>>> 0 | |
>>> ] | |
>>> results = accuracyk.compute(predictions=predictions, references=references) | |
>>> #\{ accuracy: 0.6 \} | |
>>> # 3 is in the first row, | |
>>> # 5 is not in the second row, | |
>>> # 0 is in the third row | |
>>> #with numpy for a batch of examples | |
>>> k=5 | |
>>> # get the 5 highest probabilities | |
>>> top5_probs = np.argpartition(logits, -k, axis=-1)[:, -k:] | |
>>> results = accuracyk.compute(references=top5_probs, predictions=labels) | |
>>> # computing the accuracy at 1 | |
>>> predictions = np.array([ 3, 8, 1 ]) | |
>>> references = np.array([ 3, 4, 0 ]) | |
>>> results = accuracyk.compute(predictions=np.expand_dims(predictions, axis=1), references=references) | |
>>> print(results) | |
""" | |
class accuracyk(evaluate.Metric): | |
"""Computes the accuracy at k for an array of shape (N, k) and correct labels""" | |
def _info(self): | |
return evaluate.MetricInfo( | |
# This is the description that will appear on the modules page. | |
module_type="metric", | |
description=_DESCRIPTION, | |
citation=_CITATION, | |
inputs_description=_KWARGS_DESCRIPTION, | |
# This defines the format of each prediction and reference | |
features=datasets.Features({ | |
'predictions': datasets.Sequence(datasets.Value("int64")), | |
'references': datasets.Value('int64'), | |
}), | |
codebase_urls=[], | |
reference_urls=[] | |
) | |
def _download_and_prepare(self, dl_manager): | |
... | |
def _compute(self, predictions, references): | |
"""Returns the accuracy at k""" | |
if isinstance(predictions, list): | |
accuracyk = sum( | |
[reference in kpredictions for kpredictions, reference in zip(predictions, references)] | |
) / len(references) | |
else: | |
accuracyk = ( | |
references[:, None] == predictions[:, :] | |
).any(axis=1).sum() / len(references) | |
return dict(accuracy=accuracyk) |