def test3(): myMat = mat(svdRec.loadExData()) myMat[0, 1] = myMat[0, 0] = myMat[1, 0] = myMat[2, 0] = 4 myMat[3, 3] = 2 print myMat print "-----" print svdRec.recommend(myMat, 2)
myMat = mat(svdRec.loadExData()) # ecludSim = svdRec.ecludSim(myMat[:, 0], myMat[:, 4]) # print(ecludSim) # ecludSim = svdRec.ecludSim(myMat[:, 0], myMat[:, 0]) # print(ecludSim) # # # cosSim = svdRec.cosSim(myMat[:, 0], myMat[:, 4]) # print(cosSim) # cosSim = svdRec.cosSim(myMat[:, 0], myMat[:, 0]) # print(cosSim) # # # pearsSim = svdRec.pearsSim(myMat[:, 0], myMat[:, 4]) # print(pearsSim) # pearsSim = svdRec.pearsSim(myMat[:, 0], myMat[:, 0]) # print(pearsSim) myMat[0, 1] = myMat[0, 0] = myMat[1, 0] = myMat[2, 0] = 4 myMat[3, 3] = 2 recommend = svdRec.recommend(myMat, 2) # print(recommend) myMat = mat(svdRec.loadExData2()) recommend = svdRec.recommend(myMat, 1, estMethod=svdRec.svdEst) # print(recommend) imgMatrix = svdRec.imgCompress(2) print(imgMatrix)
def test6(): myMat = mat(svdRec.loadExData3()) print myMat print "-----" print svdRec.recommend(myMat, 2, 5, svdRec.cosSim, svdRec.svdEst)
def test5(): myMat = mat(svdRec.loadExData3()) print myMat print "-----" print svdRec.recommend(myMat, 2)
from numpy import * import svdRec # sig3=mat([[Sigma[0],0,0],[0,Sigma[1],0],[0,0,Sigma[2]]]) # print(U[:,:3]*sig3*VT[:3,:]) # 基于KNN协同过滤算法 myMat = mat(svdRec.loadExData()) print(svdRec.recommend(myMat, 1, simMeas=svdRec.ecludSim)) #基于svd分解的协同过滤算法 # myMat = mat(svdRec1.loadExData()) # print(svdRec1.recommend(myMat,1,estMethod=svdRec1.svdEst))
conn= MySQLdb.Connect( host = '127.0.0.1', port = 3306, user = '******', passwd = '', db = 'onethink', charset = 'utf8' ) myMat=mat(loadMatrixFromMysql(conn)) #print myMat # print svdRec.ecludSim(myMat[:,0],myMat[:,1]) # print svdRec.ecludSim(myMat[:,0],myMat[:,0]) # print svdRec.cosSim(myMat[:,0],myMat[:,1]) # print svdRec.cosSim(myMat[:,0],myMat[:,0]) # print svdRec.pearsSim(myMat[:,0],myMat[:,1]) # print svdRec.pearsSim(myMat[:,0],myMat[:,0]) data=svdRec.recommend(myMat,sys.argv[1])#sys.argv[1] ,为当前用户推荐 # print svdRec.recommend(myMat,5,simMeas=svdRec.ecludSim) # print svdRec.recommend(myMat,5,simMeas=svdRec.pearsSim) saveToMysql(conn,data) conn.commit() conn.close()
import svdRec from numpy import * #基于奇异值分解的餐馆菜肴推荐系统 #原始数据矩阵的行为不同的顾客,列为对不同菜肴的的打分 #满分为5分,0分表示没有打分 mymat = mat(svdRec.loadExData2()) mymat[0, 1] = mymat[0, 0] = mymat[1, 0] = mymat[2, 0] = 4 mymat[3, 3] = 2 print(svdRec.recommend(mymat, 1, estMethod=svdRec.svdEst))
#print U #print #print Sigma #print #print VT #Sig3=mat([[Sigma[0], 0, 0], [0, Sigma[1], 0], [0, 0, Sigma[2]]]) #print U[:,:3]*Sig3*VT[:3,:] ''' myMat = mat(svdRec.loadExData()) myMat[0,1]=myMat[0,0]=myMat[1,0]=myMat[2,0]=4 myMat[3,3]=2 print myMat print print svdRec.recommend(myMat, 2) #print #print svdRec.recommend(myMat, 2, simMeas=svdRec.ecludSim) #print #print svdRec.recommend(myMat, 2, simMeas=svdRec.pearsSim) ''' #myMat = mat(svdRec.loadExData2()) myMat = mat(svdRec.loadExData()) print myMat print svdRec.recommend(myMat, 1, estMethod=svdRec.svdEst)
from numpy import linalg as la import numpy as np import svdRec myMat = np.mat(svdRec.loadExData3()) # U, Sigma, VT = la.svd(myMat) # Sig2 = Sigma ** 2 # print(sum(Sig2)*0.9) # print(sum(Sig2[:2])) result = svdRec.recommend(myMat, 1, estMethod=svdRec.standEst) print(result) result = svdRec.recommend(myMat, 1, estMethod=svdRec.svdEst) print(result) svdRec.imgCompress(2)
from numpy import * import svdRec myMat = mat(svdRec.loadExData()) test1 = svdRec.ecludSim(myMat[:, 0], myMat[:, 4]) test2 = svdRec.ecludSim(myMat[:, 0], myMat[:, 0]) print(test1, test2) test1 = svdRec.cosSim(myMat[:, 0], myMat[:, 4]) test2 = svdRec.cosSim(myMat[:, 0], myMat[:, 0]) print(test1, test2) test1 = svdRec.pearsSim(myMat[:, 0], myMat[:, 4]) test2 = svdRec.pearsSim(myMat[:, 0], myMat[:, 0]) print(test1, test2) result = svdRec.recommend(myMat, 2) print(result) result = svdRec.recommend(myMat, 2, simMeans=svdRec.ecludSim) print(result) result = svdRec.recommend(myMat, 2, simMeans=svdRec.pearsSim) print(result)
print Sigma Sig3 = mat([[Sigma[0], 0, 0], [0, Sigma[1], 0], [0, 0, Sigma[2]]]) print U[:,:3] * Sig3 * VT[:3,:] myMat = mat(svdRec.loadExData()) print svdRec.ecludSim(myMat[:,0], myMat[:,4]) print svdRec.ecludSim(myMat[:,0], myMat[:,1]) print svdRec.pearsSim(myMat[:,0], myMat[:,4]) print svdRec.pearsSim(myMat[:,0], myMat[:,1]) print svdRec.cosSim(myMat[:,0], myMat[:,4]) print svdRec.cosSim(myMat[:,0], myMat[:,1]) myMat = mat(svdRec.loadExData1()) print myMat print svdRec.recommend(myMat, 2) print svdRec.recommend(myMat, 2, simMeas=svdRec.ecludSim) print svdRec.recommend(myMat, 2, simMeas=svdRec.pearsSim) from numpy import linalg as la U, Sigma, VT = la.svd(mat(svdRec.loadExData2())) print Sigma Sig2 = Sigma**2 print sum(Sig2) print sum(Sig2)*0.9 print sum(Sig2[:2]) print sum(Sig2[:3]) myMat = mat(svdRec.loadExData2()) print svdRec.recommend(myMat, 1, estMethod=svdRec.svdEst) print svdRec.recommend(myMat, 1, estMethod=svdRec.svdEst,simMeas=svdRec.pearsSim)
# SVD implement from numpy import * U, Sigma, VT = linalg.svd([[1, 1], [7, 7]]) #print (U,Sigma,VT) import svdRec Data = svdRec.loadExData() U, Sigma, VT = linalg.svd(Data) print(Sigma) # 返回对角线的元素节省空间 print(Sigma.shape) Sig3 = mat([[Sigma[0], 0, 0], [0, Sigma[1], 0], [0, 0, Sigma[1]]]) rec_image = U[:, :3] * Sig3 * VT[:3, :] print(rec_image) myMat = mat(svdRec.loadExData()) dis = svdRec.ecludSim(myMat[:, 0], myMat[:, 4]) print(dis) dis = svdRec.cosSim(myMat[:, 0], myMat[:, 4]) print dis dis = svdRec.pearsSim(myMat[:, 0], myMat[:, 4]) print dis svdRec.recommend(myMat, 2)
#print("Data Sigma5 ReConstruct:\n",DataWithSig5) myMat=mat(svdRec.loadExData()) print(svdRec.ecludSim(myMat[:,0],myMat[:,4])) print(svdRec.ecludSim(myMat[:,0],myMat[:,0])) print(svdRec.cosSim(myMat[:,0],myMat[:,4])) print(svdRec.cosSim(myMat[:,0],myMat[:,0])) print(svdRec.pearsSim(myMat[:,0],myMat[:,4])) print(svdRec.pearsSim(myMat[:,0],myMat[:,0])) myMat=mat([[4,4,0,2,2],[4,0,0,3,3],[4,0,0,1,1],[1,1,1,2,0], [2,2,2,0,0],[1,1,1,0,0],[5,5,5,0,0]]) print(myMat) recommendResult=svdRec.recommend(myMat,2) recommendResultWithEclud=svdRec.recommend(myMat,2,simMeas=svdRec.ecludSim) recommendResultWithPears=svdRec.recommend(myMat,2,simMeas=svdRec.pearsSim) print(recommendResult) print(recommendResultWithEclud) print(recommendResultWithPears) U,Sigma,VT=linalg.svd(mat(svdRec.loadExData2())) print(Sigma) Sig2=Sigma**2 print(sum(Sig2)) print(sum(Sig2)*0.9) ResultWithSvdEst=svdRec.recommend(myMat,1,estMethod=svdRec.svdEst) print("ResultWithSvdEst:",ResultWithSvdEst)
svdRec.ecludSim(myMat[:, 0], myMat[:, 4]) svdRec.ecludSim(myMat[:, 0], myMat[:, 0]) # 余弦相似度 svdRec.cosSim(myMat[:, 0], myMat[:, 4]) svdRec.cosSim(myMat[:, 0], myMat[:, 0]) # 皮尔逊相关系数 svdRec.pearsSim(myMat[:, 0], myMat[:, 4]) svdRec.pearsSim(myMat[:, 0], myMat[:, 0]) # 示例:餐馆菜肴推荐引擎 reload(svdRec) myMat = mat(svdRec.loadExData()) myMat[0, 1] = myMat[0, 0] = myMat[1, 0] = myMat[2, 0] = 4 myMat[3, 3] = 2 myMat svdRec.recommend(myMat, 2) svdRec.recommend(myMat, 2, simMeas=svdRec.ecludSim) svdRec.recommend(myMat, 2, simMeas=svdRec.pearsSim) # 计算SVD from numpy import linalg as la U, Sigma, VT = la.svd(mat(svdRec.loadExData2())) Sigma Sig2 = Sigma**2 sum(Sig2) sum(Sig2) * 0.9 sum(Sig2[:2]) sum(Sig2[:3]) # SVD评分估计 reload(svdRec)
svdRec.cosSim(myMat[:, 0], myMat[:, 4]) # 余弦相似度 svdRec.cosSim(myMat[:, 0], myMat[:, 0]) svdRec.pearsSim(myMat[:, 0], myMat[:, 4]) # 皮尔逊相关系数 svdRec.pearsSim(myMat[:, 0], myMat[:, 0]) ''' *关于是用列向量还是行向量的问题* 如果m>>n,也就是样本数大于特征数,则用列向量进行计算相似度,因为减少计算量 如果m<<n,也就是样本数小于特征数,则用行向量进行计算相似度,也是节省 ''' reload(svdRec) myMat = np.mat(svdRec.loadExData()) myMat[0, 1] = myMat[0, 0] = myMat[1, 0] = myMat[2, 0] = 4 myMat[3, 3] = 2 myMat svdRec.recommend(myMat, 2) # 用户2,未评分的商品的评分情况,元组中第一个是商品ID,第二个是评分 svdRec.recommend(myMat, 2, simMeas=svdRec.eculidSim) # 换一下相关度计算方法 svdRec.recommend(myMat, 2, simMeas=svdRec.pearsSim) # 利用SVD reload(svdRec) U, Sigma, VT = np.linalg.svd(np.mat(svdRec.loadExData2())) Sigma Sig2 = Sigma**2 # 查看多少个奇异值能达到总“能量”的90% sum(Sig2) sum(Sig2) * 0.9 sum(Sig2[:2]) sum(Sig2[:3]) # 前三个元素即可了,所以可以把11维的数据压缩成3维 reload(svdRec) myMat = np.mat(svdRec.loadExData2())
print(recommendMat) print('recommend user2 with cosine Similarity : ') print(svdRec.recommend(recommendMat, 2)) print('recommend user2 with euclid Similarity : ') print(svdRec.recommend(recommendMat, 2, simMeas = svdRec.euclidSim)) print('recommend user2 with pearson Similarity : ') print(svdRec.recommend(recommendMat, 2, simMeas = svdRec.pearsSim)) ''' ''' U, Sigma, VT = la.svd(mat(svdRec.loadExData2())) print('Sigma of ExData2 : ') print(Sigma) Sig2 = Sigma ** 2 print('total power of ExData2 : ') print(sum(Sig2)) print('90% of total power : ') print(sum(Sig2) * 0.9) print('estimated power from Sigma 1 to 3 : ') print(sum(Sig2[: 3])) ''' ''' svdMat = mat(svdRec.loadExData2()) svdRec.recommend(svdMat, 1, estMethod = svdRec.svdEst, simMeas = svdRec.pearsSim) ''' print('SVD compress image : ') svdRec.imgCompress(2)