从分类,排序,top-k多个方面对推荐算法稳定性的评价

介绍

论文名: “classification, ranking, and top-k stability of recommendation algorithms”.

本文讲述比较推荐系统在三种情况下, 推荐稳定性情况.

与常规准确率比较的方式不同, 本文从另一个角度, 即推荐算法稳定性方面进行比较.

详细

参与比较的推荐算法

包括:

  1. baseline
  2. 传统基于用户
  3. 传统基于物品
  4. oneSlope
  5. svd

比较方式

比较的过程分为两个阶段:

阶段一, 将原始数据分为两个部分, 一部分为已知打分, 另一部分为未知打分, 用于预测.

阶段二, 在用于预测打分那部分数据中, 取出一部分数据, 加入到已知打分部分, 剩余部分仍然为预测部分.

比较阶段一中的预测结果和阶段二中预测结果的比较.

数据划分情况如图所是.

比较的方式

预测稳定性

预测性的评价方式有以下几种:

MAE, RMSE

分类稳定性

分类型的评价方式有以下几种:

准确率, 召回率, F-分数.

排名稳定性

排名型的评价方式有以下几种:

排名相关性, Spearman的ρ评价, Kruskal的γ评价, Kendall的τ评价.

前K项稳定性

前k项的评价方式有以下几种:

点击率稳定性(hit-rate), NDCG(normalized discounted cumulative gain).

比较的场景

稀疏性冲击

改变数据的稀疏性, 从几个方面比较这些推荐算法的稳定性.

结果如图所是.

基于内存的推荐算法和slopeone算法表现出强烈的不稳定性和对数据敏感性.

svd和baseline算法相对稳定.

评价数量冲击

改变第二阶段中新加入数据的数量, 比较两次实验的差异.

结果如图所是:

横坐标为比例, 即已知打分数据的倍数, 从10%到500%.

从图中可以看出, 在新加入的数据较少时, 各个推荐算法表现出高度的稳定性.

当新加入的数据较多时, 基于内存的推荐算法的稳定性不断下降.

相反, 基于模型的方法相对稳定.

打分分布冲击

除了新加入的数据外, 新加入的数据的数据分布也一定程度上影响了推荐算法的稳定性.

下表显示了修改数据分布的策略:

实验的结果如下:

从图中可以看出, 当加入的数据为随机时, 各个推荐算法都表现出相对较高的稳定性.

但是, 当添加的数据出现歪斜时, 基于内存的推荐算法的稳定性降低较快, 基于模型的推荐算法的稳定性基本保持不变.

算法参数冲击

对于推荐算法而言, 除了数据的因素外, 还有算法本身参数对算法稳定性的影响.

对于基于内存的算法, 相似用户/物品的数量影响着推荐算法的效果,

对于svd算法, 隐含属性的数量影响着推荐算法的结果.

实验通过修改推荐算法参数的方式进行比较, 结果如图所时:

对于top-K的比较, k值的大小也影响推荐算法的稳定性.

通过修改k的大小, 实验的结果如图所时:

实验结果表示:

对于修改算法的参数, 对svd算法的影响较少, 对于基于内存的算法影响较大.

修改top-k中k的大小, 对基于模型的推荐算法影响较小, 对于基于内存的推荐算法的稳定性影响较大.

总结

对于上面多种情况的比较.

基于模型的推荐算法在多种情况下, 稳定性较高, 特别时svd算法.

基于内存的推荐算法稳定性较差.

时间: 2024-10-01 21:50:13

从分类,排序,top-k多个方面对推荐算法稳定性的评价的相关文章

排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结束.时间复杂度:O(n^2) 选择排序:每次在无序队列中"选择"出最大值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别).时间复杂度:O(n^2) 直接插入排序:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的 移动数据,空出一个适当的位置,把待插

LeetCode OJ 347. Top K Frequent Elements hashmap+排序求解

题目链接:https://leetcode.com/problems/top-k-frequent-elements/. 347. Top K Frequent Elements My Submissions QuestionEditorial Solution Total Accepted: 15510 Total Submissions: 36453 Difficulty: Medium Given a non-empty array of integers, return the k mo

pig询问top k,每个返回hour和ad_network_id最大的两个记录(SUBSTRING,order,COUNT_STAR,limit)

pig里面有一个TOP功能.我不知道为什么用不了.有时间去看看pig源代码. SET job.name 'top_k'; SET job.priority HIGH; --REGISTER piggybank.jar; REGISTER wizad-etl-udf-0.1.jar; --DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader(); DEFINE SequenceFileLoader

Top k 问题

Top K的问题: 给出大量数据,找出其中前K个最大(小)的数,或者在海量数据中找到出现频率最好的前K个数. 一.给出大量数据(N个),找出其中前K个最大数(没有其他资源上的限制) 1.使用排序算法 直接使用排序算法,如快速排序,然后遍历找到最大的K个数.时间复杂度为O(NlogN): 2.部分排序 因为,只要求出前K个最大值,所以我们不必全部排好.思路是:随意选出K个数形成一个数组,然后按从大到小进行排序,再从剩下的数中,选取一个数和数组中的最小值进行比较,若小于最小值,则取下一个数继续比较:

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,2,3] and k = 2, return [1,2]. Note: 347. Top K Frequent ElementsYou may assume k is always valid, 1 ≤ k ≤ number of unique elements. Your algorithm's

Top K Frequent Words

Given a list of words and an integer k, return the top k frequent words in the list. Given [ "yes", "lint", "code", "yes", "code", "baby", "you", "baby", "chrome", &

Top K问题!!!!!!!!!!!!!

转:http://blog.csdn.net/boo12355/article/details/11788655 Top K 算法详解应用场景: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节.        假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个.一个查询串的重复度越高,说明查询它的用户越多,也就是越热门.),请你统计最热门的10个查询串,要求使用的内存不能超过1G. 必备知识:什么

Top k Largest Numbers

Given an integer array, find the top k largest numbers in it. Example Given [3,10,1000,-99,4,100] and k = 3.Return [1000, 100, 10]. 思路:由于需要按从大到小的顺序,因此直接用PriorityQueue即可,用Partition的方法的话还需要排序.直接用PriorityQueue 写的代码量少. 1 class Solution { 2 /* 3 * @param

Top k问题(线性时间选择算法)

问题描述:给定n个整数,求其中第k小的数. 分析:显然,对所有的数据进行排序,即很容易找到第k小的数.但是排序的时间复杂度较高,很难达到线性时间,哈希排序可以实现,但是需要另外的辅助空间. 这里我提供了一种方法,可以在O(n)线性时间内解决Top k问题.关于时间复杂度的证明,不再解释,读者可以查阅相关资料.具体的算法描述如下: 算法:LinearSelect(S,k) 输入:数组S[1:n]和正整数k,其中1<=k<=n: 输出:S中第k小的元素 1. If  n<20  Then