博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
协同过滤推荐中利用SVD提高推荐的效果
阅读量:7135 次
发布时间:2019-06-28

本文共 1066 字,大约阅读时间需要 3 分钟。

1.什么是SVD :

SVD指的是奇异值分解

2.利用Python实现SVD

from numpy import linalg as la# Numpy有一个称为linalg的线性代数工具,其中svd计算方法如下U,Sigma,VT = la.svd(dataMat)

3.利用SVD提高效率

生产实际中的数据比较稀疏,在生产中不管是基于用户的相似度计算还是基于物品的相似度计算
都需要较多的时间和很多的计算力,通过SVD可以将映射到低纬空间中去

4.基于SVD的评估方法Python实现(参考自机器学习实战)

def svdEst(dataMat, user, simMeas, item):    n = shape(dataMat)[1]    simTotal = 0.0; ratSimTotal = 0.0    U,Sigma,VT = la.svd(dataMat)# numpy 的svd计算    Sig4 = mat(eye(4)*Sigma[:4]) #numpy.eye() 生成对角矩阵    # 机器学习实战的P264中代码对应的公式推导 https://blog.csdn.net/appleyuchi/article/details/82913217    xformedItems = dataMat.T * U[:,:4] * Sig4.I    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

其中计算按照奇异值能到达总能量的90% 计算;dataMat.T U[:,:4] Sig4.I 的推导请参见:

你可能感兴趣的文章
readline-6.3 之arm平台交叉编译
查看>>
一个好用的Dialog插件
查看>>
C迷途指针
查看>>
转:Servlet的url匹配以及url-pattern详解
查看>>
asynDBcenter(复习)
查看>>
C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》
查看>>
白话经典算法系列之中的一个 冒泡排序的三种实现
查看>>
前端安全须知
查看>>
mysql 5.6以后的安装方法
查看>>
poj2392 Space Elevator(多重背包问题)
查看>>
腾讯2014年实习生招聘笔试面试经历
查看>>
在iOS中实现一个简单的画板App
查看>>
hadoop高速扫盲帖,从零了解hadoop
查看>>
Oracle 语法
查看>>
手把手教你写专利申请书/怎样申请专利
查看>>
404 Not Found !
查看>>
2014年听写VOA50篇
查看>>
访问属性与类数据成员
查看>>
INNO SETUP卸载程序中加入自定义窗体
查看>>
使用 ZooKeeper 同步集群配置
查看>>