调整相似度计算方法顺序

This commit is contained in:
hello19883
2017-04-05 22:48:15 +08:00
parent c5cd64004a
commit 13122c68c2

View File

@@ -6,8 +6,7 @@ from numpy import linalg as la
from numpy import *
def loadExData():
"""
def loadExData3():
# 利用SVD提高推荐效果菜肴矩阵
return[[2, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5],
@@ -21,6 +20,23 @@ def loadExData():
[0, 0, 0, 3, 0, 0, 0, 0, 4, 5, 0],
[1, 1, 2, 1, 1, 2, 1, 0, 4, 5, 0]]
def loadExData2():
# 书上代码给的示例矩阵
return[[0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 5],
[0, 0, 0, 3, 0, 4, 0, 0, 0, 0, 3],
[0, 0, 0, 0, 4, 0, 0, 1, 0, 4, 0],
[3, 3, 4, 0, 0, 0, 0, 2, 2, 0, 0],
[5, 4, 5, 0, 0, 0, 0, 5, 5, 0, 0],
[0, 0, 0, 0, 5, 0, 1, 0, 0, 5, 0],
[4, 3, 4, 0, 0, 0, 0, 5, 5, 0, 1],
[0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 4],
[0, 0, 0, 2, 0, 2, 5, 0, 0, 1, 2],
[0, 0, 0, 0, 5, 0, 0, 0, 0, 4, 0],
[1, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0]]
def loadExData():
# 推荐引擎示例矩阵
return[[4, 4, 0, 2, 2],
[4, 0, 0, 3, 3],
@@ -38,6 +54,7 @@ def loadExData():
[1, 1, 0, 2, 2],
[0, 0, 0, 3, 3],
[0, 0, 0, 1, 1]]
"""
# 相似度计算假定inA和inB 都是列向量
@@ -139,14 +156,14 @@ def svdEst(dataMat, user, simMeas, item):
userRating = dataMat[user, j]
if userRating == 0 or j == item:
continue
# 相似度的计算方法也会作为一个参数传递给该函数
similarity = simMeas(xformedItems[item, :].T,xformedItems[j, :].T)
# for 循环中加入了一条print语句以便了解相似度计算的进展情况。如果觉得累赘可以去掉
print 'the %d and %d similarity is: %f' % (item, j, similarity)
# 对相似度不断累加求和
simTotal += similarity
# 对相似度及对应评分值的乘积求和
ratSimTotal += similarity * userRating
# 相似度的计算方法也会作为一个参数传递给该函数
similarity = simMeas(xformedItems[item, :].T,xformedItems[j, :].T)
# for 循环中加入了一条print语句以便了解相似度计算的进展情况。如果觉得累赘可以去掉
print 'the %d and %d similarity is: %f' % (item, j, similarity)
# 对相似度不断累加求和
simTotal += similarity
# 对相似度及对应评分值的乘积求和
ratSimTotal += similarity * userRating
if simTotal == 0:
return 0
else:
@@ -195,7 +212,7 @@ def imgCompress(numSV=3, thresh=0.8):
if __name__ == "__main__":
"""
# 对矩阵进行SVD分解
# 对矩阵进行SVD分解(用python实现SVD)
Data = loadExData()
U, Sigma, VT = linalg.svd(Data)
# 打印Sigma的结果因为前3个数值比其他的值大了很多为9.72140007e+005.29397912e+006.84226362e-01
@@ -224,20 +241,33 @@ if __name__ == "__main__":
"""
# 计算相似度的方法
myMat = mat(loadExData2())
# print myMat
# 计算相似度的第一种方式
print recommend(myMat, 1, estMethod=svdEst)
# 计算相似度的第二种方式
print recommend(myMat, 1, estMethod=svdEst, simMeas=pearsSim)
"""
# 默认推荐
# 默认推荐(菜馆菜肴推荐示例)
print recommend(myMat, 2)
"""
"""
# 计算相似度的方法
# 计算相似度的第一种方式
# print recommend(myMat, 1, estMethod=svdEst)
# 计算相似度的第二种方式
print recommend(myMat, 1, estMethod = svdEst, simMeas=pearsSim)
"""
# 利用SVD提高推荐效果
U, Sigma, VT = la.svd(mat(loadExData2()))
print Sigma # 计算矩阵的SVD来了解其需要多少维的特征
Sig2 = Sigma**2 # 计算需要多少个奇异值能达到总能量的90%
print sum(Sig2) # 计算总能量
print sum(Sig2) * 0.9 # 计算总能量的90%
print sum(Sig2[: 2]) # 计算前两个元素所包含的能量
print sum(Sig2[: 3]) # 两个元素的能量值小于总能量的90%,于是计算前三个元素所包含的能量
# 该值高于总能量的90%,这就可以了
"""
# 压缩图片
# imgCompress(2)
"""