【问题标题】:Recommendation System - Recall@K and Precision@K推荐系统 - Recall@K 和 Precision@K
【发布时间】:2020-02-03 02:59:03
【问题描述】:

我正在为我的公司构建一个推荐系统,并且对计算精度@K 和召回@K 的公式有疑问,我在 Google 上找不到。

使用precision@K,通用公式将是top-k 集合中相关推荐项目的比例。

我的问题是如何定义哪些项目是相关的,哪些不相关,因为用户不一定与所有可用项目进行交互,而只是其中的一小部分。如果 top-k 推荐项目缺乏真实性,这意味着用户没有与其中一些项目进行交互,因此我们没有实际评分怎么办?我们应该在计算中忽略它们还是将它们视为不相关的项目?

以下文章建议忽略这些非交互项,但我不太确定。

https://medium.com/@m_n_malaeb/recall-and-precision-at-k-for-recommender-systems-618483226c54

非常感谢。

【问题讨论】:

    标签: performance machine-learning metrics recommendation-engine recommender-systems


    【解决方案1】:

    您提到“推荐项目”,所以我假设您在谈论计算推荐引擎的精度,即顶部 k 中准确预测用户未来交互的预测数量。

    推荐引擎的目标是根据过去的交互对未来的交互进行建模。这样的模型是在交互数据集上训练的,因此最后一次交互是目标,n 过去的交互是特征。

    因此,精度的计算方法是在已知基本事实(最后一次交互)的测试集上运行模型,然后将基本事实在顶部 k 预测范围内的预测数除以总数测试项目。

    没有出现用户未交互的项目,因为我们正在根据其他用户的行为训练模型。

    【讨论】:

    • 嗨@scign,感谢您的回复。如果我理解正确,您的意思是我们应该忽略所有没有基本事实的预测。用于计算精度@K 的顶级k 建议应仅包括具有基本事实的建议。如果是这样,那么我的模型表现得非常好。
    • 我的观点是,您甚至不应该尝试计算没有基本事实的预测的精度。精度(准确预测的比例)只有在你有基本事实的情况下才有意义。如果测试集中的用户没有与项目交互,那么任何预测的 top-k 列表都是不正确的。
    • @scign 请我在推荐系统中使用逻辑回归模型,我想计算recall@25 .val model = pipeline.fit(train) val predict = model.transform(test) val predictionAndLabels = predict .select("prediction", "label") .rdd.map(x => (x(0).asInstanceOf[Array[Double]], x(1) .asInstanceOf[Array[Double]])) val 矩阵 =新的 RankingMetrics(predictionAndLabels) matrix.recallAt(25) 但异常 java.lang.Double 不能转换为 [D .How to correct it.
    • 不要在别人的问题上使用 cmets 来问自己的问题。
    猜你喜欢
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 2021-05-12
    • 2020-03-12
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多