阅读更多

1顶
0踩

操作系统

转载新闻 选择合适的推荐系统模型

2015-05-21 17:22 by 副主编 mengyidan1988 评论(0) 有8079人浏览
我们的机器学习工程师一直忙于构建GraphLab farm。这篇博客针对一个特殊的应用难题:怎样从GraphLab Create recommender toolkit的众多模型和选项中选择一个合适的推荐模型。

这完全取决于你现有的数据类型以及你评估结果的方式。

(注意:这里使用的是GraphLab Create 0.9 的API。GraphLab Create 1.0 支持通过recommender.create() 来智能选择推荐模型。你可以通过1.0 的API文档查看recommender toolkit中模型的最新说明。此外,这个论坛列出了从版本0.9.1到版本1.0的API变动。)

如果你的数据是隐性的,也就是数据中仅有用户和物品间的交互信息(没有用户对物品的打分),那么,你可以选择使用Jaccard相似度的 ItemSimilarityModel
# 当数据中仅包含'user_id'和'item_id'两个属性的时候
# recommender.create 方法会自动选择
# `method=‘item_similarity’` and `similarity_type=’jaccard’`
>>> itemsim_jaccard_model = graphlab.recommender.create(data)

当数据为隐反馈时,你可以通过增加一个均为1的目标列把数据伪装成显性数据。若要构建追求排序性能的模型,请见下文。

如果数据是显性的,也就是观测数据中包含用户的真实评分,那么你可以从多个模型中选择。使用cosine或Pearson相似度的ItemSimilarityModel可以包含评分信息。此外,MatrixFactorizationModel(矩阵分解模型)、FactorizationModel(分解模型) 以及 LinearRegressionModel(线性回归模型) 都支持评分预测。
# 此时数据中包含 3 列,‘user_id’,‘item_id’ 以及 ‘rating’
>>> itemsim_cosine_model = graphlab.recommender.create(data, 
       target=’rating’, 
       method=’item_similarity’, 
       similarity_type=’cosine’)
>>> factorization_machine_model = graphlab.recommender.create(data, 
       target=’rating’, 
       method=’factorization_model’)

如果你的目标是提高排序性能,你可以在设置 ranking_regularization 的情况下使用 ItemSimilarityModel(物品相似度模型)、MatrixFactorizationModel(矩阵分解模型) 、 FactorizationModel(分解模型)。排序正则化选项设置后会随机地选取一些未观测数据并把它们的目标评分设成一个偏负面的值。ranking_regularization 值在0到1之间。该值越大,负样本的权重也就越大。如果你想使用 分解模型来处理隐反馈数据,你应该首先给 SFrame 增加一列全为1的值把它变成显性数据,再将 unobserved_rating_value 设为 0 来运行排序正则化。这里明确地设定 unobserved_raint_value 是有必要的,因为模型默认把未知评分设为已知评分的 5% 分位数;当所有已知评分均为 1 时,它们的 5% 分位数也是 1,不能把它作为未知评分的目标值。
# 数据中包含一列真实的评分
>>> ranking_regularization_model = graphlab.recommender.create(data, 
       target=’rating’, 
       method=’matrix_factorization’, 
       ranking_regularization=1.0)
 
# 数据中包含一列“伪造”的评分,全部为 1
>>> rr_model_for_implicit_data = graphlab.recommender.create(data, 
       target=’rating’, 
       method=’matrix_factorization, 
       ranking_regularization=1, 
       unobserved_rating_value=0)

如果你想对评分数据进行评分预测,那么选择MatrixFactorizationModel, FactorizationModel, or LinearRegressionModel的任意一个。从统计学的角度看,这三个模型都是明确地对评分建模的回归模型。换句话说,观测评分被建模为一些项的加权组合,其中权重(包括一些项,也被成为因子)通过训练数据得到。这几个模型都可以很方便地引入用户或物品特征。
# 当数据包含一列目标值时,默认的方法是 matrix_factorization
>>> matrix_factorization_model = graphlab.recommender.create(data, 
       target=’rating’)
>>> linear_model = graphlab.recommender.create(data, 
       target=’rating’, 
       method=’linear_model’)
>>> factorization_machine_model = graphlab.recommender.create(data, 
       target=’rating’, 
       method=’factorization_model’)

LinearRegressionModel 假设评分是用户特征、物品特征、用户偏置、物品流行度偏置的线性组合。MatrixFactorizationModel 和 FactorizationModel 还可以引入两个向量的内积项,其中一个向量表示用户对一组隐性特征的喜好程度,另一个向量表示物品对这组隐性特征的包含程度。这些通常被称为隐性因子并且可以从观测数据中自动学习得到。FactorizationModel (分解模型)较 MatrixFactorizationModel(矩阵分解模型) 更进一步, 考虑到了这些隐性因子与边际特征的交互影响。一般来说,FactorizationModel(分解模型) 最有效,但也最难训练(由于它的威力和灵活性)。LinearRegressionModel(线性回归模型) 最简单,训练速度也最快,但没有考虑用户物品间的交互作用。

我们建议你从 MatrixFactorizationModel(矩阵分解模型) 开始,如果这个模型运行时间过长,可以降级使用 LinearRegressionModel(线性回归模型)。或者,如果你认为需要使用二阶交互项来加强模型,可以升级使用 FactorizationModel(分解模型)。注意,这些模型都带有几个正则化参数如:n_factors 和 regularization,这些参数会影响测试时的预测精度。这对于 FactorizationModel(分解模型) 尤为有用。建议你使用超参数搜索函数 graphlab.toolkits.model_params_search() 来调整这些参数。
# 这里强调了回归模型中一些有用的参数选项
>>> custom_mf_model = graphlab.recommender.create(data, 
       target=’rating’, 
       n_factors=20, 
       regularization=0.2, 
       linear_regularization=0.1)
>>> custom_fm_model = graphlab.recommender.create(data, 
       target=’rating’, 
       method=’factorization_model’, 
       n_factors=50, 
       regularization=0.5, 
       max_iterations=100)
>>> custom_linear_model = graphlab.recommender.create(data, 
       target=’rating’, 
       method=’linear_model’, 
       regularization=0.01)

如果目标评分是二值的,也就是它们的值是赞或踩标签,在使用回归模型(LinearRegressionModel, MatrixFactorizationModel, FactorizationModel)时,设置输入参数‘binary_targets = True’。
>>> logistic_regression_model = graphlab.recommender.create(data, 
       target=’rating’, 
       method=’linear_model’, 
       binary_targets=True)

使用MatrixFactorizationModel(矩阵分解模型) 和 FactorizationModel (分解模型)训练得到的隐性因子可以作为特征用于其他的任务。在这种情形下,使用非负因子有利于提高可解释性。简单地使用‘nmf=True’作为输入参数,分解类型的模型就会学习非负因子。
>>> nmf_model = graphlab.recommender.create(data, 
       target=’rating’, 
       method=’matrix_factorization’, 
       nmf=True)

已有数据?数据问题?

最后,有几个影响推荐系统性能的常见数据问题。第一,如果观测数据非常稀疏,也就是仅包含大量用户的一个或两个观测数据,那么任何一个模型都不会比 popularity 或 item_means 这些基准模型效果好。这种情况下,将稀疏用户和物品剔除后重试也许有用。另外,重新检查数据收集和清理过程,看错误是否源于此处。尽可能对每个用户每个物品获取更多的观测数据。

另一个经常会遇到的问题是把使用数据当做评分。与显性评分位于一个很好的线性区间(例如,[0, 5])不同,使用数据可能被严重扭曲。例如,在 Million Song 数据集中,一个用户播放一首歌超过 16000 次。所有的模型都很难应对这种严重扭曲的目标。解决的方法是对使用数据进行归类。例如,把播放次数超过 50 次映射成最高评分 5 。你也可以把播放次数转成二进制,例如播放超高两次的为 1,反之为 0。

好吧,都记住了吗?是的,我们一半都记不住。下面这幅粗略的信息图一目了然地显示了所有的提示。愉快地探索吧,勇敢地推荐系统研究者!




作者: 吴文敏
  • 大小: 85.3 KB
来自: 伯乐在线
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • LLaMA模型系统解读

    本文介绍核心内容为LLaMA模型系统解读,希望对学习和使用大模型的同学们有所帮助。 文章目录 1. 前言 2. LLaMA的核心目标和成功诀窍 2.1 核心目标 2.2 成功诀窍一 2.3 成功诀窍二 2.4 成功诀窍三 3. 常见误区 ...

  • 基于大数据的音乐推荐系统(适合本科毕设)

    主要是用于大家对于大数据的基本处理,适合大学生本科毕设的参考。

  • 不同页面之间实现参数传递的几种方式讨论

    不同页面之间实现参数传递的几种方式讨论(黎声)    由于web系统采用http协议在浏览器和服务器之间传输数据,而http协议是一种无状态的协议,如何在不同页面之间传递数据,可以有一下几种方式    方式一:表单方式传递    表单传递参数是一种最简单,也是最基本的参数传递方式。注意:表单元素隐藏按钮的使用    方式二:带参数的url方式传递    带参数的url写法: url?参数

  • 一文带你了解推荐系统常用模型及框架

    推荐系统概述 传统推荐模型Old school Model 协同过滤模型 通过对用户之间的关系,用户对物品的评价反馈一起对信息进行筛选过滤,从而找到目标用户感兴趣的信息。 用户—商品的评分矩阵(该矩阵很可能是稀疏的) ...

  • 工业界常用的推荐系统模型有哪些?

    最近收到很多同学的提问,目前工业界常用的推荐系统模型有哪些?CTR和推荐算法有什么本质区别?推荐系统中如何做 User Embedding?橙子邀请了淘系技术部的豆苗同学对以上问题进行解答...

  • 推荐系统模型训练中的注意力机制

    注意力机制对我们构建推荐模型的价值非常大,比如在构建新闻类推荐模型模型,根据用户已经看过的新闻做推荐。那我们在分析用户已浏览新闻的时候,需要根据用户的注意力不同给予不同的权重。因为用户很可能都没有注意...

  • 你以为的推荐系统,其实只是推荐模型

    目前,关于推荐系统的网络资料大部分关注的是推荐模型本身,而且仅限于介绍一些简单的协同过滤(Collaborative Filtering)模型。对新手来说,只了解简单的推荐模型并不足以让他们构建出一个真正能在实际生产中使用...

  • Chat-REC、InstructRec(LLM大模型用于推荐系统)

    虽然大型语言模型LLM已经证明了它们用于解决各种应用任务的巨大潜力,但它和推荐系统的结合点在哪? * 推荐系统旨在根据用户的偏好和行为向用户推荐项目。传统上,这些系统都依赖于用户数据,如点击流和购买历史等等...

  • 大数据技术之电商推荐系统(7) | ALS模型评估和参数选取

    有了RMSE,我们可以就可以通过多次调整参数值,来选取RMSE最小的一组作为我们模型的优化选择。 在scala/com.donglin.offline/下新建单例对象ALSTrainer,代码主体架构如下: import breeze.numerics..

  • 推荐系统的发展演进历史和模型的目标及优缺点

    推荐系统发展历程 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章...

  • 一文看懂推荐系统:排序06:粗排三塔模型,性能介于双塔模型和精排模型之间

    这节介绍了粗排的三叉模型,它介于双塔模型和精排牌模型之间。

  • SparrowRecSys电影推荐系统项目(四)模型评估

    SparrowRecSys电影推荐系统项目(四)模型评估一、模型评估方法:1.离线评估:Holdout检验、交叉检验、自助法离线Replay: 一、模型评估方法: 1.离线评估: 定义:在将模型部署到线上环境之前,在离线环境下进行的...

  • 基于增量学习的智能推荐系统:如何在大规模推荐数据中进行模型学习和实时推荐

    推荐系统的目标是为用户推荐他们感兴趣的内容,提高用户的满意度,并引导他们进行更多的操作。然而,在实际应用中,我们往往难以获取到所有的数据,因此,增量学习作为一种有效的数据处理方法,逐渐成为研究的热点。...

  • 用户兴趣模型分类以及推荐系统技术调研

    个性化新闻推荐系统中常用的几种用户兴趣建模方法: (1) 关键词列表表示法 用户的兴趣模型是由个或者多个用户感兴趣的关键词所构成的关键词序列来表示。例如某用户对篮球十分感兴趣,则用户的兴趣模型可能表示成...

  • 深入浅出推荐系统(一):推荐系统基本架构

    深入浅出推荐系统(一):推荐系统基本架构 提纲 过去八九年在广告、生活服务、电商等领域从事大数据及推荐系统相关工作,近来打算对过去的工作做一个系统性的梳理。一方面帮自己查缺补漏、进行更深入的学习;另一...

  • 五种IO模型:操作系统五种IO模型大全

    包含操作系统的应用与内核,CPU指令等级,...网络IO,磁盘IO,内存IO,异步/同步IO,阻塞/非阻塞IO,以及操作系统的五种IO模型,阻塞IO,非阻塞IO,复用IO(select、poll、epoll)、信号驱动IO模型,异步IO模型等...

  • 【推荐系统学习】推荐系统架构

    推荐系统学习

  • 推荐系统(一)概述

    在互联网领域,推荐系统(Recommendation Systems)的应用非常广泛。在音视频方面,如抖音、快手、哔哩等;在电商平台方面,如京东、淘宝、拼多多等。推荐有助于帮助用户快速发现潜在感兴趣的内容(音视频、商品、...

  • 基于记忆与模型协同过滤的电影推荐系统研究与实践

    随着信息技术的不断发展,人们在日常生活中面临着越来越多的选择,例如在电影、音乐、图书等娱乐领域。...推荐系统通过分析用户的历史行为、兴趣和偏好,向用户提供个性化的推荐内容,从而提升用户体验和平台的粘性。

Global site tag (gtag.js) - Google Analytics