4.1 推荐系统概述
4.1.1 从亚马逊网站认识推荐系统
4.1.2 推荐系统架构
第一部分 推荐系统至少三个推荐方:
物品信息、用户信息、用户对物品或者信息的偏好
第二部分 算法区域:推荐模型
基于人口统计学的推荐机制、基于内容的推荐、基于协同过滤的推荐(基于项目、基于用户)、基于隐语义的推荐模型
4.2 协同过滤及其算法
4.2.1 协同过滤(略)
4.2.2 数据预处理
4.2.3 使用Scikit-Learn的KMeans聚类
4.2.4 User CF 原理
基于用户的协同过滤算法
4.2.5 Item CF原理
基于物体的协同过滤算法
4.2.6 SVD原理与计算
使用余弦定理求用户之间的相似度,即选中与新用户之间夹角最小的那个。
#coding:utf-8 from numpy import * eps = 1.0e-6 #避免除0 def cosSim(inA,inB): #夹角余弦定理 denom = linalg.norm(inA)*linalg.norm(inB) return float(inA*inB.T)/(denom+eps) #加载数据 A = mat([[5,5,3,0,5,5], [5,0,4,0,4,4], [0,3,0,5,4,5], [5,4,3,3,5,5]]) new = mat([[5,5,0,0,0,5]]) #新加入的User E U,S,VT = linalg.svd(A.T) V = VT.T Sigma = diag(S) r = 2 #取前两个奇异值 #得到近似后的U、S、V值 Ur = U[:,:r] Sr = Sigma[:r,:r] Vr = V[:,:r] newresult = new*Ur*linalg.inv(Sr) #计算User E的坐标值 print newresult maxv = 0 #最大的余弦值 maxi = 0 #最大值下标 indx = 0 for vi in Vr: #计算最近似的结果 temp = cosSim(newresult,vi) if temp >maxv: maxv = temp maxi = indx indx += 1 print maxv,maxi