怎么使用TensorFlow和Keras

发布时间:2021-12-27 13:43:28 作者:iii
来源:亿速云 阅读:165

这篇文章主要讲解了“怎么使用TensorFlow和Keras”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用TensorFlow和Keras”吧!

数据集:MovieLens 20M

初始数据集

为了进行分析,我们将使用著名的数据集MovieLens 20M。

怎么使用TensorFlow和Keras

这个数据集包含了来自电影推荐服务MovieLens的2000多万个评分。下面是dataframe的示例:

怎么使用TensorFlow和Keras

该数据集列出了138000个用户和27000多部电影。经过清洗和过滤(我们只接受正面评价),我们有:

我们还可以从下面的直方图中看到,大多数电影的收视率都在5000以下…

怎么使用TensorFlow和Keras

而且大多数用户评价不超过500部电影。

怎么使用TensorFlow和Keras

这与大多数推荐系统问题是一致的:很少有用户对很多电影进行评分,很少有电影有很多评分。

训练数据集

我们可以根据这些数据建立一个点击矩阵。点击矩阵的格式如下所示。如果用户u与项i交互,则行u和列i上的单元格包含1,否则包含0。

怎么使用TensorFlow和Keras

我们还将点击向量xᵤ定义为点击矩阵的第u行向量。

训练验证测试数据集

为了评估模型的质量,我们将数据集分成3个子集,一个子集用于训练,一个子集用于验证,一个子集用于测试。我们将使用第一个子集训练模型,第二个子集在训练期间选择最佳模型,最后一个子集获得度量。

指标:NDCG和Personalization

NDCG

如前所述,我们将使用两个指标来评估我们的模型。第一个将是NDCG,它衡量质量和我们的推荐项目的顺序。我们首先需要定义DCG。DCG越高越好。DCG@p定义为:

怎么使用TensorFlow和Keras

I是指示函数,elem_i代表推荐列表的第i个元素。为了说明这个抽象公式,这里有一个简短的例子:

需要建议:{A,B,C}

建议1:[C、A、D]-DCG@3=1.63

建议2:[D、B、A]-DCG@3=1.13

注意,这些建议是有顺序的。因此,我们有:DCG₁ > DCG₂,因为预测1中的前两个项目是我们的目标项目,而这些项目位于预测2的列表末尾。

NDCG是DCG的近亲,将分数投影在0到1之间,以便它们在模型之间转换。

Personalization(个性化指数)

Personalization=计算每对推荐之间的距离,然后计算平均值。为了比较不同的个性化指数,我们将其标准化(就像我们对NDCG所做的那样,我们将分数投影在0到1之间)。为了说明这个指标,让我们看看下面的示例:

建议1:

用户1:[A,B,C]/用户2:[D,E,F] 个性化=1

建议2:

用户1:[A,B,C]/用户2:[A,B,C] 个性化=0

协同与基于内容的过滤

推荐系统可以分为两类:协同过滤和基于内容的过滤。

协同过滤

协同过滤是基于用户相似度的RS子族。它通过分析与用户u关系密切的其他用户的口味来预测用户u的兴趣。它基于关系密切的用户喜欢的东西是类似的。

怎么使用TensorFlow和Keras

基于内容的过滤

基于内容的过滤是基于用户偏好和内容相似性的另一类RS,这意味着它基于这样一种想法:如果你喜欢item i,那么你更可能喜欢类似于i的项,而不是不同于它的项。

怎么使用TensorFlow和Keras

基于内容

定义

如上所述,基于内容的方法使用项目描述来查找与用户看到的最接近的项目。我尽可能详尽地实现了这个方法,但是一个几乎没有特征的数据集是这个方法的一个限制。MovieLens数据集只提供电影的类型。

但是,我们开发了一个简单的方法,如下面的伪代码所述:

reco = zero-vector of size number of items
for i in items of user u:
   for j in the k closest items to i:
      reco[j] = max(reco[j]https://my.oschina.net/u/4253699/blog/,1 - dist(ihttps://my.oschina.net/u/4253699/blog/,j))
output recommendation reco

对于dist(i,j),使用类型向量之间的余弦距离。

结果

NDCG非常低,这是因为每个样本的特征数量非常有限。

优点

无冷启动:推荐系统(RS)中经常出现的问题之一是冷启动。当添加新项目或用户时,会出现此问题。由于没有可供推断的先前活动,推荐系统给的推荐就会有点生硬。在我们的场景中,一个项目的交互次数并不影响它最终被推荐的可能性,这意味着当涉及到新项目时,我们不存在冷启动问题。

实现简单:如上图所示,使用几行伪代码,算法相当简单。

缺点

查询时间是O(#items×#features),#代表个数,我们必须小心数据的大小。在不进行预处理的情况下,每次要求系统向用户推荐新内容时,它都必须找到与用户交互的每个项目最接近的k个项目。因为有项目可以比较,而每一个距离都需要计算特征来衡量,所以整个过程都需要O(#items × #features)。通过预处理,我们可以终止这个查询时间,但是我们需要在每个项中存储k个最近的项,这意味着在内存中存储k × #items 个项目。

仅当项目具有足够的特征时才有效:如结果所示,如果项目没有足够的特征,则此操作不起作用。例如如果有电影情节的描述,我们会有更好的结果。

基于记忆

定义

基于记忆的推荐是一种计算用户和项目之间相似度的简单方法。与基于模型的方法不同,基于记忆的推荐没有要优化的参数。这是一个非常简单的算法,可以概括为以下几行伪代码:

输入用户u:
使用dist函数查找与u最接近的k个用户
在一个新向量v_u中聚集k个最近接近用户的向量
输出建议v_u

在我们的例子中,我们用以下方法实现了算法:

怎么使用TensorFlow和Keras

怎么使用TensorFlow和Keras

结果
优点
缺点

非负矩阵分解

定义

非负矩阵分解(Non-negative matrix factorization,NMF)是Netflix竞赛期间出现的一种著名的推荐系统算法。

NMF的思想是将点击矩阵分解为两个低维矩形矩阵,一个用于用户,一个用于项目,嵌入到可计算维度的向量中(我们称之为潜在空间)。将这两个矩阵相乘,得到一个新的矩阵,其值接近它们存在的原始点击矩阵,所有的空白都用(希望)好的预测填补。

结果
优点
缺点

神经矩阵分解

定义

神经矩阵因式分解(NeuMF)是一种尝试推广上述经典NMF的新方法。它是在本文中开发的。该模型采用两个整数(两个索引)作为表示项i和用户u的输入,并输出一个介于0和1之间的数字。输出表示用户u对项目i感兴趣的概率。

该神经网络的结构可以分为两部分:矩阵分解部分和全连接部分。然后连接起来传递到Sigmoid层。

怎么使用TensorFlow和Keras

结果

下面,尽管我试图用许多不同的参数来正则化,但过拟合是不可避免的。

怎么使用TensorFlow和Keras

优点
缺点

受限玻尔兹曼机

定义

受限玻尔兹曼机(RBM)是一种生成随机神经网络,具有非常简单的结构(一个输入层和一个隐藏层),可以用来学习输入上的概率分布,在我们的例子中是点击向量。

怎么使用TensorFlow和Keras

结果

下图是验证集上随着epochs增加的NDCG@100

怎么使用TensorFlow和Keras

优点
缺点

深度协同

定义

深度协同是一个直截了当的协同模型,旨在为用户预测最有用的项目。输入是用户的点击向量,原始输出是我们的建议。为了训练这个模型,我使用了用户点击向量的70%作为输入,剩下的作为输出。

怎么使用TensorFlow和Keras

架构很简单。有一个相同大小的输入和输出(#items),以及多个相同大小的隐藏层(1000个神经元)。

结果

下面,和往常一样(验证集上随着epochs增加的NDCG@100):

怎么使用TensorFlow和Keras

优点
缺点

自编码

定义

自动编码器(AE)最初用于学习数据的表示(编码)。它们被分解为两部分:

编码器,它减少了数据的维度大小;

解码器,它将编码转换回其原始形式。由于存在降维,神经网络需要学习输入(潜在空间)的低维表示,以便能够重构输入。

在RS环境中,它们可以用来预测新的推荐。为了做到这一点,输入和输出都是点击向量(通常AE的输入和输出是相同的),我们将在输入层之后使用dropout。这意味着模型将不得不重构点击向量,因为输入中的某个元素将会丢失,因此要学会预测给定的点击向量的推荐值。

怎么使用TensorFlow和Keras

结果

下面惯例(验证集上随着epochs增加的NDCG@100)。尽管我们试图用很多不同的参数来调整,但它很快就过拟合了。

怎么使用TensorFlow和Keras

优点
缺点

无可解释性:这种深度神经网络使得无法解释结果。

变分自编码器

定义

变分自编码器(VAE)是AE的扩展。它将有一个采样层,而不是简单的全连接层。这一层将使用从编码器的最后一层的均值和方差得到一个高斯样本,并使用它作为输入的解码器。跟AE一样,我们在第一层使用dropout。

怎么使用TensorFlow和Keras

结果

下面,和往常一样(验证集上随着epochs增加的NDCG@100):

怎么使用TensorFlow和Keras

优点
缺点

混合

定义

混合模型提供了两个世界中最好的(基于记忆和基于模型的方法),因此在RS中非常流行。

怎么使用TensorFlow和Keras

为了实现混合方法,我选择使用VAE,然后将其结果与基于记忆的结果进行平均。

结果
优点
缺点

比较

我们现在可以比较我们所有的模型。NDCG@100最好的模型看是VAE。对于个性化索引,它是RBM。

怎么使用TensorFlow和Keras

感谢各位的阅读,以上就是“怎么使用TensorFlow和Keras”的内容了,经过本文的学习后,相信大家对怎么使用TensorFlow和Keras这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. Keras怎么实现Theano和TensorFlow切换
  2. 如何使用keras和tensorflow保存为可部署的pb格式

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

tensorflow keras

上一篇:如何解析Mina代码

下一篇:C语言怎么绘制圣诞水晶球

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》