推荐系统之Also Buy和Also View的实现
- - 标点符目前很多的B2C网站均有推荐系统的呈现,而最常见的就是类似Amazon网站上出现的购买此商品的顾客也同时购买了. 说到推荐系统,大多数人认为非常的高深莫测,但是再高深的系统也可以一探究竟. 上面的推荐其实就是著名的“啤酒和尿布”相类似. 下面我们就来研究上要实现上述的功能,需要做哪些操作. 首先我们要的是一份数据,即所有的用户的购买记录.
目前很多的B2C网站均有推荐系统的呈现,而最常见的就是类似Amazon网站上出现的购买此商品的顾客也同时购买了。
说到推荐系统,大多数人认为非常的高深莫测,但是再高深的系统也可以一探究竟。上面的推荐其实就是著名的“啤酒和尿布”相类似。下面我们就来研究上要实现上述的功能,需要做哪些操作。
首先我们要的是一份数据,即所有的用户的购买记录。即一份 userId和itemId的记录表。
数据格式可以如下:
userId itemId
123 A
123 B
124 A
125 B
有了上述所有网站内的所有数据,接下来就是对数据进行处理了
1、去除所有重复的数据项
2、去除所有只购买过一个产品的用户记录
经过上述的操作后,留下来就是有用的数据了。我们需要再把数据保存为:
A:(123,124)
B:(123,125)
即找出每个商品有哪些用户Id购买过。再然后再去取A商品和B商品有相同会员Id的数目,即同时购买A商品和B商品的人数共有多少。
如果你N个商品,则两两比较需要N(N+1)/2次,然后找出重复最多的产品。具体python代码实现如下:
import pymssql,heapq matrix = {} conn = pymssql.connect(host='localhost:1433',user='sa', password='123456', database='item2item') cur = conn.cursor() cur.execute('SELECT [itemId],[userId] FROM [item2item].[dbo].[user_item]') for row in cur: itemId = row[0] userId = row[1] if not itemId in matrix: matrix[itemId] = set([userId]) else: matrix[itemId].add(userId) conn.close() def amazonDistance(item1Set, item2Set): return len(item1Set.intersection(item2Set)) def recommend(seedItem, numRecommendations): amazonResults = [] for key in matrix.keys(): heapq.heappush(amazonResults, (-1*amazonDistance(matrix[key], matrix[seedItem]), key)) amazonResults.sort() return amazonResults[0:numRecommendations] data = recommend(1234,10)
Related posts: