你好,游客 登录
背景:
阅读新闻

技术干货 | 购物篮数据的协通滤波去噪自编码

[日期:2017-10-25] 来源:sohu  作者:文| Aaqilb Saeed 译| 翟向洋 [字体: ]

包括完整代码和数据集的 ipython 笔记本可以从阅读原文链接内获得。

在本教程中,我们会把去噪自编码应用在购物篮(market basket)数据的协同滤波上。学习模型将根据用户购物篮中的商品来推荐相近的商品。

本教程使用的是 groceries 数据集,它包括 9835 次交易(即在购物篮中被一起购买的商品条目)。我们将数据进行训练、测试和验证。图 1 描述了原始数据集,我们需要处理并将其转换为对输入模型可用的格式。为此,每一次交易都将被表示为一个二进制向量,其中 1 表示某个商品在购物篮,否则为 0 。让我们首先读取该数据集并定义几个辅助函数,找出单一的商品条目,将他们转换成 One-hot encoded(一位有效编码的)形式,并从二进制向量转换为商品条目。此外,图 2 提供了 10 项在数据集中最频繁出现的商品条目。

图一: 购物篮数据

图二:数据集中出现最多的货品

自编码器模型试着(learn)重建它自己的输入。当这样做的时候,它学习(learn)数据的突出表示。因此,它也用来实现降维的目的。该模型由两个组件组成:一个编码器和一个解码器。编码器映射输入-->,解码器从降维重新产生输入,即映射-->。 输入中的噪声被引入(例如通过Dropout)到训练集,避免了学习一个恒等函数,由此得名为自编码降噪。在我们的例子中,在模型训练期间,一些缺少某些 物品的嘈杂或损坏的购物篮数据将被用作输入。在测试期间,一位有效编码的购物篮的商品条目将被馈入模型以获得商品条目预测。然后从输出,我们必须选择概率 比一些阈值更大的商品条目(此例,如果p>=0.1,则为1,否则为0),以转换回一位有效编码向量。最后,在二进制向量中带有1的商品条目将被推 荐给用户。

现在让我们定义一个4层自编码降噪模型(例如,4层编码器和4层解码器)。软标记 激活函数(the soft sign activation function)用在前三层的编码器和解码器,而sigmoid用在第四层。二进制交叉熵被用作使用随机梯度下降法的变体(通常称为Adam)来最小化 的损失函数。模型架构如图2所示,可以看出输入维数为169(即数据集中单一商品条目的数量)。同样,神经元的数量在第一、第二、第三和第四层分别是 128、64、32和16。在输入层以0.6的概率引入流失(dropout)(即随机流失40%的输入)。此外,编码器的权重使用频率为0.00001 的则正则化。

图三:降噪模型的结构

这里是所有的代码:我们需要定义我们的模型。以下提供的代码会训练/评估自编码器并计算ROC、AUC的分数。

以下是该模型提供的一些关于测试集的推荐结果:

购物车中的商品条目:火腿、草药、洋葱、起泡酒

推荐的商品条目:瓶装水,其他蔬菜,面包(卷),根蔬菜,购物袋,苏打水,热带水果,全脂牛奶,酸奶

购物车中的商品条目:餐巾,香肠,白葡萄酒

推荐的商品条目:其他蔬菜,面包(卷),苏打水,全脂牛奶,酸奶

购物车中的商品条目:磨砂清洁剂,糖果,鸡肉,清洁剂,根蔬菜,香肠,热带水果,全脂牛奶,酸奶

推荐的商品条目:牛肉,瓶装啤酒,瓶装水,棕色面包,黄油,罐装啤酒,柑橘类水果,咖啡,凝乳,国产鸡蛋,法兰克福香肠,水果/蔬菜汁,人造黄油,报纸,其他蔬菜,糕点,水果,猪肉,卷饼/馒头,根蔬菜,香肠,购物袋,苏打水,热带水果,鞭打/酸奶油,酸奶

收藏 推荐 打印 | 阅读:
相关新闻       去噪自编码  协同滤波