资源预览内容
第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
第9页 / 共28页
第10页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
智能推荐系统,超群.com fuchaoqungmail.com http:/www.fuchaoqun.com,推荐系统,介绍:http:/en.wikipedia.org/wiki/Recommender_system 关键字:recommender system、collaborative filtering、关联规则、协同过滤、SVD、KNN,Amazon,豆瓣,新浪音乐,推荐系统常用算法,关联规则Slope oneSVD,关联规则,沃尔玛的啤酒和尿布,关联规则,支持度: 置信度: 算法:Apriori算法、FP-growth算法示例:Python + Orangehttp:/www.fuchaoqun.com/2008/08/data-mining-with-python-orange-association_rule/,Slope One,Slope One,Simper Could Be Better,2005年由Daniel Lemire提出http:/www.daniel-lemire.com/fr/abstracts/SDM2005.html加权平均:,Slope One参考资料,http:/en.wikipedia.org/wiki/Slope_One http:/www.fuchaoqun.com/2008/09/slope_one/ 算法实现: Taste(Java): http:/taste.sourceforge.net/ OpenSlopeOne(MySQL存储过程):http:/code.google.com/p/openslopeone,SVD,相似性度量方法,基于项目评分预测的协同过滤推荐算法(邓爱林,朱扬勇,施伯乐),问题,如果大量的数据miss怎么办?很不幸,这个很常见,netflix prize数据缺失99%,新浪音乐更糟糕,由于长尾效应,新浪音乐数据缺失率99.5%,SVD,=,R,U,S,V,Rmn = Umr * Srr * Vrn,SVD性质,Rmn = Umr * Srr * Vrn Rk = Umk * Skk * Vkn 其中Umk是Umr的前k列,Skk是Srr的前k行和前k列,Vkn是Vrn的前k行 Rk Rmn 假如原矩阵是10万100万的一个矩阵,原矩阵有1000亿个数据,如果采用奇异值分解保存为三个矩阵,取k=100,只需要总共10万100+100100+100*100万=1亿1千零1万,数据规模是原来的千分之一多点 很多时候Rmn有很多不准确的数值在里面(比如缺失值),缩小到Rk的同时误差也缩小了 数学证明查阅:http:/tinyurl.com/ouk9ev 另外可参见:数学之美 系列十八 矩阵运算和文本处理中的分类问题http:/googlechinablog.com/2007/01/blog-post.html,SVD用在图片压缩,原图,K=10,K=20,Why SVD?,以音乐为例,每一部音乐都是由一些元素构成,比如民谣、摇滚、轻缓、激昂、抒情等等,音乐在这些元素围度上的侧重各不相同,每一首音乐都可以用一段向量来表示。同样的,每一个用户欣赏音乐的时候,对民谣、摇滚、轻缓、激昂、抒情等元素围度的侧重也不相同,每一个用户也可以用一段向量来表示。最后,用户向量 音乐向量 = 用户对此音乐的打分。,基于SVD推荐系统,以音乐为例:获得用户对音乐的打分数据矩阵R,假设有m个用户,n首歌曲,对原始数据作一些预处理对矩阵R进行SVD分解,选择合适的K值,获得U、S、V三个矩阵获得S矩阵的平方根sqrt(S),U * sqrt(S)作为用户矩阵,sqrt(S) * V.T作为歌曲矩阵a.预测用户i对歌曲j的打分:pi,j = 用户i向量 * 音乐j向量; b.最近邻,knn,示例,转自:http:/www.igvita.com/2007/01/15/svd-recommendation-system-in-ruby/,哪两个用户品味最接近? 哪两部电视剧最相关?,SVD结果值,空间分布图,构建开源SVD推荐系统,SVD计算 matlab LAPCKL、BLAS:Fortran语言 numpy、scipy:Python封装 SVDLIBC、Meschach:C语言 http:/en.wikipedia.org/wiki/Singular_value_decomposition KNN: matlab FLANN 完备方案: DIVISI ,MAGIC DIVISI!,#!/usr/bin/env python #coding=utf-8import divisi from divisi.cnet import *data = divisi.SparseLabeledTensor(ndim = 2)# read some rating into data # datauser_id, song_id = 4svd_result = data.svd(k = 128)# 获得指定用户感兴趣的100首歌曲 # predict_features(svd_result, user_id).top_items(100) # 获得指定歌曲最相关的100首其他歌曲 # feature_similarity(svd_result, song_id).top_items(100) # 获得指定用户音乐品味最接近的100位其他用户 # concept_similarity(svd_result, user_id).top_items(100),Its a show time!,Thanks! Q&A,
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号