推荐系统 TOP K 评价指标
符号说明
\(top\_k\): 当前用户预测分最高的k个items,预测分由高到低排序
$pos$: 当前用户实际点击过的items
\(N\): 测试用户数量
示例数据
N = 4
| len(top_k & pos) | len(pos) | 预测中(四声)的item在top_k中的位置(1为预测中,长度为用户实际点击过的items长度)
| ---- | ---- | ---- |
| 1 | 2 | 1 0
| 2 | 3 | 0 1 1
| 3 | 4 | 1 0 1 1
| 0 | 3 | 0 0 0
一、Hit Rate
网上有2种定义方式,不知道哪个更为正确的,有知道的人能不能麻烦告诉我一下?
第一种
对所有用户:我们真正喜欢的物品中,你给我们推荐了多少
hit = 0
total = 0
for i in users:
top_k = 获取top_k的代码
hit += len(top_k & pos)
total += len(pos)
hit_rate = hit / total
\(hit\_rate = \frac{1 + 2 + 3 + 0}{2 + 3 + 4 + 5}\)
第二种
被推荐到喜欢物品的用户占总用户的比例
hit = 0
for i in users:
top_k = 获取top_k的代码
if top_k中有预测到pos中的item:
hit += 1
hit_rate = hit / N
\(hit\_rate = \frac{1 + 1 + 1 + 0}{4}\)
二、Recall
对某个用户:我真正喜欢的物品中,你给我推荐了多少
recall = 0
for i in users:
top_k = xxx(i)
recall += len(top_k & pos) / len(pos) # 用户i的recall
recall = mean(recall)
\(recall = (\frac{1}{2} + \frac{2}{3} + \frac{3}{4} + \frac{0}{3})\ /\ 4\)
三、NDCG
对某个用户:实际的折扣累计收益 DCG (Discounted Cumulative Gain) / 理想的DCG
DCG:考虑位置因素,希望用户喜欢的物品在top_k中排得越前越好
iDCG:归一化,解决【不同用户的DCG求和项数不同,不能进行比较】的问题
NDCG = 0
for i in users:
DCG = 0
iDCG = 0
top_k = xxx(i)
for rank in range(k):
if top_k[rank] in pos:
DCG += 1 / log2(rank + 2)
for i in range(min(k, len(pos))):
iDCG += 1 / log2(i + 2)
NDCG_u = DCG / iDCG
NDCG += NDCG_u
NDCG = mean(NDCG)
推荐系统 TOP K 评价指标的更多相关文章
- [LeetCode] Top K Frequent Elements 前K个高频元素
Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...
- Leetcode 347. Top K Frequent Elements
Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...
- 大数据热点问题TOP K
1单节点上的topK (1)批量数据 数据结构:HashMap, PriorityQueue 步骤:(1)数据预处理:遍历整个数据集,hash表记录词频 (2)构建最小堆:最小堆只存k个数据. 时间复 ...
- LeetCode "Top K Frequent Elements"
A typical solution is heap based - "top K". Complexity is O(nlgk). typedef pair<int, un ...
- [IR] Ranking - top k
PageRanking 通过: Input degree of link "Flow" model - 流量判断喜好度 传统的方式又是什么呢? Every term在某个doc中的 ...
- 347. Top K Frequent Elements
Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...
- 面试题:m个长度为n的ordered array,求top k 个 数字
package com.sinaWeibo.interview; import java.util.Comparator; import java.util.Iterator; import java ...
- get top k elements of the same key in hive
key points: 1. group by key and sort by using distribute by and sort by. 2. get top k elements by a ...
- Top k问题(线性时间选择算法)
问题描述:给定n个整数,求其中第k小的数. 分析:显然,对所有的数据进行排序,即很容易找到第k小的数.但是排序的时间复杂度较高,很难达到线性时间,哈希排序可以实现,但是需要另外的辅助空间. 这里我提供 ...
随机推荐
- HTTP发展史,HTTP1.1与HTTP2.0的区别
前言 我们知道HTTP是浏览器中最重要且使用最多的协议,它不仅是浏览器与服务端的通信语言,更是互联网的基石.随着浏览器的不断更新迭代,HTTP为了适应技术的更新也在不断进化,学习HTTP的最佳途径就是 ...
- svn 清理报错
Can't install '*' from pristine store, because no checksum is recorded for this file svn同步时,提示clean ...
- 创建自定义ClassLoader,绕过双亲委派
1.什么是类加载 通过javac将.java文件编译成.class字节码文件后,则需要将.class加载到JVM中运行,哪么是谁将.class加载到JVM的呢?那就是类加载器啦. 2.类加载器类型 B ...
- Java并发机制(2)--synchronized与Lock
本内容整理自:博客园-海 子-java并发编程系列-http://www.cnblogs.com/dolphin0520/category/602384.html 1.基础: 1.什么时候出现线程安全 ...
- kafka指定partiton生产
kafka发送一个消息的时候需要封装成一个ProducerRecord : public ProducerRecord(String topic, Integer partition, Long ti ...
- Hashtable 与 HashMap 有什么不同之处?
这两个类有许多不同的地方,下面列出了一部分: a) Hashtable 是 JDK 1 遗留下来的类,而 HashMap 是后来增加的. b)Hashtable 是同步的,比较慢,但 HashMap ...
- Java 中的 LinkedList 是单向链表还是双向链表?
是双向链表,你可以检查 JDK 的源码.在 Eclipse,你可以使用快捷键 Ctrl + T, 直接在编辑器中打开该类.
- vue循环时设置多选框禁用状态,v-for
<div v-for="user in users" > <el-radio v-bind:disabled="user.id== ...
- Volcano:在离线作业混部管理平台,实现智能资源管理和作业调度
摘要:本文结合华为CCE团队在混合部署方面的研究和实战,介绍了混合部署的背景.概念.混部技术的设计方案和实际落地情况,以及对未来的计划和展望. 现代互联网数据中心的规模随着应用服务需求的快速增长而不断 ...
- Netty之非阻塞处理
Netty 是一个异步的.基于事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络 IO 程序. 一.异步模型 同步I/O : 需要进程去真正的去操作I/O: 异步I/O:内核在I/O操作完成后 ...