评估列表:AvgP@K 和 R@K 它们相同吗?

我的目标是理解平均精确度在K召回率在K。我有两个列表,一个是预测的,另一个是实际的(真实情况)

我们称这两个列表为预测和实际。现在我想计算精确度@k召回率@k

使用Python,我实现了平均精确度在K的计算如下:

def apk(actual, predicted, k=10):    """    Computes the average precision at k.    This function computes the average precision at k between two lists of items.    Parameters    ----------    actual: list            A list of elements that are to be predicted (order doesn't matter)    predicted : list            A list of predicted elements (order does matter)    k: int, optional    Returns    -------    score : double            The average precision at k over the input lists    """    if len(predicted) > k:        predicted = predicted[:k]    score = 0.0    num_hits = 0.0    for i,p in enumerate(predicted):        if p in actual and p not in predicted[:i]:            num_hits += 1.0            score += num_hits / (i + 1.0)    if not actual:        return 1.0    if min(len(actual), k) == 0:        return 0.0    else:        return score / min(len(actual), k)

假设我们的预测列表包含以下顺序的5个字符串:predicted = ['b','c','a','e','d'] 和actual = [‘a’,’b’,’e’]由于我们是在@k进行计算,精确度@k是否与召回率@k相同?如果不同,我该如何计算召回率@k`

如果我想计算F-measure (F-score),对于上述提到的列表,最好的方法是什么?


回答:

我想,你已经查看了维基百科。根据其公式,第三个也是最大的一个(在单词’This finite sum is equivalent to:’之后),让我们看看你的例子中每一次迭代的情况:

  1. i=1 p = 1
  2. i=2 rel = 0
  3. i=3 p = 2/3
  4. i=4 p = 3/4
  5. i=5 rel = 0

所以,avp@4 = avp@5 = (1 + 0.66 + 0.75) / 3 = 0.805; avp@3 = (1 + 0.66) / 3 等等。

召回率@5 = 召回率@4 = 3/3 = 1; 召回率@3 = 2/3; 召回率@2 = 召回率@1 = 1/3

以下是精确度@k和召回率@k的代码。我保留了你的符号,尽管使用actual表示观察/返回值和expected表示真实情况似乎更为常见(例如,参见JUnit的默认设置)。

def precision(actual, predicted, k):    act_set = set(actual)    pred_set = set(predicted[:k])    result = len(act_set & pred_set) / float(k)    return resultdef recall(actual, predicted, k):    act_set = set(actual)    pred_set = set(predicted[:k])    result = len(act_set & pred_set) / float(len(act_set))    return result

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注