博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

商城中的猜你喜欢是怎么实现的

Posted on 2019-06-09 19:06  老鼠蟒蛇  阅读(2081)  评论(0编辑  收藏  举报

猜你喜欢

今天在做项目中,发现了一个特别有意思的模块,叫做猜你喜欢, 
先给大家介绍一下商城里的推荐和猜你喜欢是怎么实现的,首先你要知道,给你推荐的商品,肯定不是随便给你推的,那些都是经过算法,然后显示到你的推荐区域

为什么需要推荐系统?

因为信息过载,人们从主动获取信息变成了被动获取信息,每天早晨打开手机……. ,很多时候有效的获取数据显得极其重要,所有针对性的需求也就自然的出现了,推荐系统应用而生.

最早的推荐系统因该是亚马逊为了销售商品而产生的,亚马逊上在线销售的商品数量庞大,但是在首页展示的商品寥寥无几.

在亚马逊的商品展示页面,经常会看到:浏览此00用户同时也浏览***商品. ,  这就是非常简单的一种推荐.

冷启动问题:

推荐系统必须要有庞大的数据作为支撑,但是我们的产品再启动的时候,没有大量的用户数据,这时候就会遇到冷启动问题,

解决冷启动问题:

既然前期没有用户数据,那我们就可以利用商品本身的数据来推荐,比如同价格商品,同品牌商品,

基于内容的推荐:

1,给商品打上标签: 食品,运动,衣服,等等越详细越好,越详细就越精确.

但根据这些商品推荐还会出问题,今天晚上小明在我们的产品中搜索法拉利汽车的模型,明天早晨我们的系统通过法拉利这个关键字,给小明推荐了一款500万的法拉利.

当然,使用商品推荐只是前期的没有用户数据是使用,而到了后期,用户越来越多,我们就要开始使用用户行为数据.

用户行为数据到底记录了什么?

小明打开亚马逊浏览器,点击了几个热销西装,然后再搜索栏搜索了nike鞋,在看了10几双鞋后,买了一双安踏的鞋.

这就是用户行为数据.当这个数据越多的时候,我们能够做到事情也就越大.

加权算法:

User-time 用户偏好矩阵: 这其中用户发生了查看,购买,分享商品的行为。这些行为是多样的,所以需要加权算法来计算出用户对某一商品的偏好程度,然后形成user-item用户偏好矩阵。

用户行为中会产生噪音和用户误操作.我们拿到了数据之后,应该先去洗数据,其中最重要的那就是降噪与归一化.

减噪:。比如因为网络中断,用户在短时间内产生了大量点击的操作。通过一些策略以及数据挖掘算法,来去除数据中的噪音。

归一化:清理数据的目的是为了通过对不同行为进行加权,形成合理的用户偏好矩阵。最简单的归一算法就是将各类数据来除以此类数据中的最大值,以此来保证所有数据的取值范围都在[0,1]区间内。

 

降维算法——SVD奇异值分解

通过用户行为数据越来越多,这个时候数据越来越稀疏,有效的数据越来越少,这个时候,SVD算法就诞生了,据我所知,淘宝用的推荐就是这种

 

做了折磨多铺垫,就是为了讲清楚协同算法.协同算法俗称SF , 如今广泛的用于如今的推荐系统中,通过协同算法,

为什么叫做协同过滤?因为这两个矩阵都是通过对方算出来的.

协同过滤算法(collaborative filtering)的目标是基于用户对物品的历史评价信息,向目标用户(active user)推荐其未购买的物品。协同过滤算法可分为基于物品的,基于用户的和基于矩阵分解,本文实现基于物品和基于矩阵分解的协同过滤算法。

协同过滤算法总览

输入数据:典型的协同过滤问题输入数据为m个用户list,n个物品list,同时每个用户有一个已评价的物品list。

推荐过程:

1. 计算similarity(用户间或物品间相似度):通常采用pearson相关系数或余弦相似度。

2. 计算prediction(目标用户未购买物品对目标用户的吸引力):目标用户对未购买商品的预测评分。

3. 计算recommendation:向目标用户推荐前K个吸引力最大的物品。

 

基于用户的协同过滤算法

基于用户的协同过滤算法旨在寻找相似的用户,然后在相似的用户间推荐物品。

1. similarity:计算用户间的相似度。上文说到每个用户都有一个已评价的物品list,那么该list就是用户的一个属性向量,用户的相似度就是该向量间的相似度。

2. prediction:假设用户A和B、C是相似用户。假设Item1, Item2, Item3三个物品是B、C购买过但A未购买过的物品。那么我们就可以向A推荐 这些物品。如何计算这三个物品对用户A的吸引力呢?以B、C和A的相似度为权重,计算B、C对物品的评分均值即可。

基于用户的协同过滤算法实际上面临很大的问题,例如稀疏性问题,毕竟一个用户购买的物品是非常少的。

关于代码特别复杂,放到这里也不好理解 .大家可以去晚上搜一下 :: 协同过滤的代码,再细细理解.