在机器学习领域,评估模型性能是至关重要的一环。其中,Top-k准确率评分是一种衡量分类模型性能的指标。它计算了在所有预测结果中,正确标签出现在前k个最可能的结果中的次数。需要注意的是,这种评分方法并不适用于多标签分类的情况。
在实际应用中,Top-k准确率评分的参数包括:
y_true: array-like of shape (n_samples,) 真实标签。
y_score: array-like of shape (n_samples,) or (n_samples, n_classes) 目标分数。这些分数可以是概率估计或未经阈值处理的决策值。
k: int, default=2 考虑最可能的结果数量以找到正确的标签。
normalize: bool, default=True 如果为True,则返回正确分类样本的比例;否则返回正确分类样本的数量。
sample_weight: array-like of shape (n_samples,), default=None 样本权重。如果为None,则所有样本权重相同。
labels: array-like of shape (n_classes,), default=None 多类分类专用。标签列表,用于索引y_score中的类别。
返回值是一个浮点数,表示Top-k准确率评分。如果normalize参数为True,则最佳性能为1;如果normalize参数为False,则最佳性能为样本数量。
在某些情况下,如果两个或多个标签被赋予了相同的预测分数,那么具有最高索引的标签将首先被选择。这可能会影响结果,如果正确的标签因为此原因而落在阈值之后。
下面是一个使用Python的scikit-learn库计算Top-k准确率评分的示例:
import numpy as np
from sklearn.metrics import top_k_accuracy_score
y_true = np.array([0, 1, 2, 2])
y_score = np.array([
[0.5, 0.2, 0.2], # 0在前2名
[0.3, 0.4, 0.2], # 1在前2名
[0.2, 0.4, 0.3], # 2在前2名
[0.7, 0.2, 0.1] # 2不在前2名
])
score = top_k_accuracy_score(y_true, y_score, k=2)
print(score) # 输出: 0.75
score = top_k_accuracy_score(y_true, y_score, k=2, normalize=False)
print(score) # 输出: 3