很早以前就听过推荐系统这个词,然后浏览一起网页侧边栏的广告时也经常看到京东、淘宝、LifeVC等广告的推荐产品,最近比较有空,所以希望深入了解一下什么是推荐系统。所以特意搭了一个环境来试一试。
1. 安装
这个简单的环境是基于Python的,然后利用了Python的库python-recsys。首先先下载python-recsys,地址是http://github.com/ocelma/python-recsys,然后然后要先安装这个库的依赖库,用以下方法直接按照即可(Mac 平台下!)。
sudo easy_install csc-pysparse sudo easy_install networkx sudo easy_install divisi2
安装完这些依赖库以后安装python-recsys即可。
tar -zxvf python-recsys.tar.gz cd python-recsys sudo python setup.py install
2.使用
安装完以后就可以使用了,这里使用奇异值分解(SVD)的方法来进行推荐,算法的原理见
http://www.cnblogs.com/FengYan/archive/2012/05/06/2480664.html。然后为了测试结果,我们首先需要获得数据集,数据集可以在网站http://grouplens.org/datasets/movielens/中下载,我们这里使用1M大小的数据,使用的文件是ratings.dat。然后就可以进行推荐了,详细的代码如下:
from recsys.algorithm.factorize import SVD svd = SVD() svd.load_data(filename=‘./data/movielens/ratings.dat‘, sep=‘::‘, format={‘col‘:0, ‘row‘:1, ‘value‘:2, ‘ids‘: int}) #假设奇异值的个数为100 k = 100 svd.compute(k=k, min_values=10, pre_normalize=None, mean_center=True, post_normalize=True) #你可以计算两个电影的相似度 ITEMID1 = 1 ITEMID2 = 2355 print svd.similarity(ITEMID1, ITEMID2) #或者得到类似的电影 print svd.similar(ITEMID1) #再预测一下用户对电影的评分 MIN_RATING = 1.0 MAX_RATING = 5.0 USERID1 = 1 print svd.predict(ITEMID1, USERID, MIN_RATING, MAX_RATING) #重头戏,推荐电影给用户! print svd.recommend(USERID, is_row = False) #谁应该看这部电影 print svd.recommend(ITEMID)
原文:http://liangqiu.blog.51cto.com/4461709/1359948