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)
def test(): data = svdRec.loadExData() U, Sigma, VT = linalg.svd(data) print "data" print data print " u " print U print " sigma " print Sigma print " vt " print VT
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # @Time : 2019/3/2 13:07 # @Author : Arrow and Bullet # @FileName: run.py # @Software: PyCharm # @Blog :https://blog.csdn.net/qq_41800366 import svdRec from numpy import * Data = svdRec.loadExData() U, Sigma, VT = linalg.svd(Data) # print(Sigma) sig3 = mat([[Sigma[0], 0, 0], [0, Sigma[1], 0], [0, 0, Sigma[2]]]) reconData = U[:, :3] * sig3 * VT[:3, :] # print(reconData) 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) # #
def test2(): myMat = mat(svdRec.loadExData()) print myMat print svdRec.ecludSim(myMat[:, 0], myMat[:, 4]) print svdRec.cosSim(mat([[4], [2]]), mat([[1], [2]])) print svdRec.pearsSim(myMat[:, 0], myMat[:, 4])
#coding=utf-8 import svdRec from numpy import * if __name__ == '__main__': datSet = svdRec.loadExData() U, Signam, VT = linalg.svd(datSet) print(Signam)
import svdRec if __name__ == "__main__": print('This is main of module "hello.py"') myMat = svdRec.mat(svdRec.loadExData()) svdRec.recommend(myMat, 1, estMethod=svdRec.svdEst)
simTotal = 0.0 ratSimTotal = 0.0 U, Sigma, VT = np.linalg.svd(dataMat) Sig4 = np.mat(np.eye(4) * Sigma[:4]) # 建立对角矩阵 xformedItems = dataMat.T * U[:, :4] * Sig4.I # 构建转换后的物品,只利用90%的奇异值 for j in range(n): userRating = dataMat[user, j] if userRating == 0 or j==item: continue # 寻找两个用户都评级的物品 similarity = simMeas(xformedItems[item, :].T, xformedItems[j, :].T) print 'the %d and %d similarity is: %f' % (item, j, similarity) simTotal += similarity ratSimTotal += similarity * userRating if simTotal == 0: return 0 else: return ratSimTotal / simTotal if __name__ == '__main__': myMat = np.mat(svd.loadExData()) myMat[0, 1] = myMat[0, 0] = myMat[1, 0] = myMat[2, 0] = 4 myMat[3, 3] = 2 print recommend(myMat, 2, simMeas=svd.ecludSim) myMat = np.mat(svd.loadExData2()) U, Sigma, VT = np.linalg.svd(myMat) Sig2 = Sigma ** 2 print sum(Sig2), sum(Sig2) * 0.9 print sum(Sig2[:3]), "3维,大于90%,可以将11维变为3维" print recommend(myMat, 1, estMethod=svdEst)
# -*- coding: utf-8 -*- ''' Created on 2016��12��27�� @author: Tan Zhuqing ''' from numpy import * ''' U,Sigma,VT=linalg.svd([[1,1],[7,7]]) print(U) print(Sigma) print(VT) ''' import svdRec Data = svdRec.loadExData() U, Sigma, VT = linalg.svd(Data) print(Sigma)
#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)
""" Created on Wed May 17 17:31:05 2017 @author: 凯风 """ import numpy as np from imp import reload import svdRec # SVD的矩阵分解,Data(m*n) = U(m*m) * Σ(m*n) * V^T(n*n) U, Sigma, VT = np.linalg.svd([[1, 1], [7, 7]]) U Sigma # 为啥不是2*2呢?因为Σ除了对角线外都是0,这样子可以节省空间吧 VT data = svdRec.loadExData() U, Sigma, VT = np.linalg.svd(data) # 在一个稍微大点的数据集上看看效果 Sigma # 前三个数值明显大于后两个,数量及上差太多了~ # 所以呢?原数据集可以用Data(m*n) = U(m*3) * Σ(3*3) * V^T(3*n) 来近似? Sig3 = np.mat([[Sigma[0], 0, 0], [0, Sigma[1], 0], [0, 0, Sigma[2]]]) U[:, :3] * Sig3 * VT[:3, :] # 之后就用这个了? reload(svdRec) myMat = np.mat(svdRec.loadExData()) # 以下都是查看列向量的相似度 svdRec.eculidSim(myMat[:, 0], myMat[:, 4]) # 欧氏距离 svdRec.eculidSim(myMat[:, 0], myMat[:, 0]) svdRec.cosSim(myMat[:, 0], myMat[:, 4]) # 余弦相似度 svdRec.cosSim(myMat[:, 0], myMat[:, 0]) svdRec.pearsSim(myMat[:, 0], myMat[:, 4]) # 皮尔逊相关系数
import svdRec #分解与重构 def loadExData(): return [ [1 ,1 ,1 ,0 ,0 ], [2 ,2 ,2 ,0 ,0 ], [1 ,1 ,1 ,0 ,0 ], [5 ,5 ,5 ,0 ,0 ], [1 ,1 ,0 ,2 ,2 ], [0 ,0 ,0 ,1 ,1] ] Data = svdRec.loadExData() U,Sigma,VT = linalg.svd(Data) Sig3 = mat( [ [Sigma[0] ,0 ,0 ] , [0 ,Sigma[1] ,0 ] , [0 ,0 ,Sigma[2] ] ] ) Data_Rec = U[: , :3] *Sig3*VT[:3, :] print Data_Rec