推荐系统:

1.基于内容的实现:KNN等

2.基于协同滤波(CF)实现:SVD
→ pLSA(从LSA发展而来,由SVD实现)、LDA、GDBT

SVD算是比较老的方法,后期演进的主题模型主要是pLSALDApLSA主要基于EM最大期望算法,而LDA主要基于Gibbs抽样算法,这个在下一篇文章《主题模型》里会详细介绍。

一、推荐系统

推荐系统实现主要分为两个方面:基于内容实现和基于协同滤波实现。

1.基于内容

不同人对不同电影评分这个例子,可以看做是一个普通回归(线性回归)问题,因此每部电影都要提前提取出一个特征向量(即x值),然后针对每个用户建模,即每个用户的打分值作为y值,利用这些已有的分值y和电影特征值x就可以训练回归模型了(最常见的是线性回归)。这样就可以预测那些用户没有评分的电影分数。(值得注意的是每个用户都建立他自己的回归模型)

从另一个角度,也可以是先给定每个用户对某种电影的喜好程度(即权值),然后学出每部电影的特征,最后采用回归来预测那些没有被评分的电影。

当然还可以是同时优化每个用户对不同类型电影的热爱程度以及每部电影的特征。具体可以参考Ng在coursera上的ML教程:https://www.coursera.org/course/ml

2.基于协同滤波

协同滤波可以看做是一个分类问题,也可以看做是一个矩阵分解问题。协同滤波主要是基于每个人自己的喜好都类似这一特征,它不依赖于个人的基本信息。比如刚才那个电影评分的例子中,预测那些没有被评分的电影的分数只依赖于已经打分的那些分数,并不需要去学习那些电影的特征。

二、奇异值分解SVD

1.SVD原理

SVD将矩阵分为三个矩阵的乘积,公式:

中间矩阵∑为对角阵,对角元素值为Data矩阵特征值λi,且已经从大到小排序,即使去掉特征值小的那些特征,依然可以很好地重构出原始矩阵。如下图:其中阴影部分代表去掉小特征值,重构时的三个矩阵。

如果m代表商品个数,n代表用户个数,则U矩阵每行代表商品属性,现在通过降维U矩阵(取阴影部分)后,每个商品的属性可以用更低的维度表示(假设k维)。这样当新来一个用户的商品推荐向量X,则可以根据公式X*U1*inv(S1)得到一个k维的向量,然后在V’中寻找最相似的的那个用户(相似度计算可用余弦公式),根据这个用户的评分来推荐(主要是推荐新用户未打分的那些商品)。具体例子可以参考文章:SVD在推荐系统中的应用

另外关于SVD分解后每个矩阵的实际含义可以参考google吴军的数学之美一书(吴军解释UV两个矩阵好像弄反了?)或者参考machine learning in action其中的svd章节。

2.SVD应用

SVD是一种降维工具,可以利用SVD来逼近矩阵并从中提取重要特征,保留80%~90%的能量就可以得到重要特征并去掉噪声。

SVD应用:

隐形语义索引、信息检索;

推荐引擎;

图像压缩;

matlab中调用SVD库函数:已知矩阵A=[…],则[U, S, V] = svd(A)就可以输出三个矩阵U, S, V分别是多少。

3.性能

优点:简化数据,去除噪声,提高算法结果

缺点:数据转换难以理解

数据类型:数值型数据

【机器学习】推荐系统、SVD分解降维的更多相关文章

  1. 机器学习之SVD分解

    一.SVD奇异值分解的定义 假设是一个的矩阵,如果存在一个分解: 其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵.这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩 ...

  2. 机器学习-特征值,svd分解

    求矩阵的秩 设 ,已知r(A)=2,则参数x,y分别是 解:任意三阶子式=0,有二阶子式≠0,但是这些子式比较多,可以使用初等变换,因为初等变换不改变矩阵的秩,可以将矩阵通过初等行(列)变换,化为行阶 ...

  3. 机器学习Python实现 SVD 分解

    这篇文章主要是结合机器学习实战将推荐算法和SVD进行对应的结合 不论什么一个矩阵都能够分解为SVD的形式 事实上SVD意义就是利用特征空间的转换进行数据的映射,后面将专门介绍SVD的基础概念.先给出p ...

  4. 机器学习中的矩阵方法04:SVD 分解

    前面我们讲了 QR 分解有一些优良的特性,但是 QR 分解仅仅是对矩阵的行进行操作(左乘一个酉矩阵),可以得到列空间.这一小节的 SVD 分解则是将行与列同等看待,既左乘酉矩阵,又右乘酉矩阵,可以得出 ...

  5. 海量数据挖掘MMDS week4: 推荐系统之数据降维Dimensionality Reduction

    http://blog.csdn.net/pipisorry/article/details/49231919 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  6. 矩阵的SVD分解

    转自 http://blog.csdn.net/zhongkejingwang/article/details/43053513(实在受不了CSDN的广告) 在网上看到有很多文章介绍SVD的,讲的也都 ...

  7. 简单易学的机器学习算法—SVD奇异值分解

    简单易学的机器学习算法-SVD奇异值分解 一.SVD奇异值分解的定义     假设M是一个的矩阵,如果存在一个分解: 其中的酉矩阵,的半正定对角矩阵,的共轭转置矩阵,且为的酉矩阵.这样的分解称为M的奇 ...

  8. SVD分解的理解[转载]

    http://www.bfcat.com/index.php/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很 ...

  9. SVD分解技术数学解释

    SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章 ...

随机推荐

  1. P2487 [SDOI2011]拦截导弹

    题目 P2487 [SDOI2011]拦截导弹 做\(SDOI\)有种想评黑的感觉,果然还是太弱了 做法 独立写(调)代码三个小时祭 简化题目:求二维最长不上升子序列及每个点出现在最长不上升子序列概率 ...

  2. img标签中alt属性与title属性

    alt属性 1.alt属性是考虑到不支持图像显示或者图像显示被关闭的浏览器的用户,以及视觉障碍的用户和使用屏幕阅读器的用户.当图片不显示的时候,图片的替换文字.2.alt属性值得长度必须少于100个英 ...

  3. Linux查看硬盘使用情况

    df df - report file system disk space usage df是查看文件系统磁盘使用情况的命令.如: # df -h Filesystem Size Used Avail ...

  4. Ansible Ad-Hoc命令集

    Ad-Hoc Ad-Hoc就是 “临时命令”, 从功能上讲 Ad-Hoc跟Ansible-playbook都差不多,Ansible提供了两种完成任务的方式: Ad-Hoc命令集与Ansible-pla ...

  5. Android_微信_设置

    减少 内存的使用 (http://news.ifeng.com/a/20170716/51440541_0.shtml) 1.关闭“附近的人” 打开微信,依次点击[我]—[设置]—[通用]—[功能], ...

  6. SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)

    SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提, 假设Books表如下: 类编号 图书名 出版社 价格 ----------------------------------- ...

  7. Python—numpy.bincount()

    1.它大致说bin的数量比x中的最大值大1,每个bin给出了它的索引值在x中出现的次数.下面,我举个例子让大家更好的理解一下: # 我们可以看到x中最大的数为7,因此bin的数量为8,那么它的索引值为 ...

  8. 04 - Django应用第一步

    知识点 1) 创建项目命令 以及项目结构介绍 2) 创建应用程序命令 应用, 项目的区别 以及应用程序结构 3) 启动项目命令 4) URLs的编写 include()的使用 get发送参数的格式 u ...

  9. Mybatis学习--Java API

    学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/java-api.html#directoryStructure 既然你已经知道如何配 ...

  10. ACM学习历程—Hihocoder 1289 403 Forbidden(字典树 || (离线 && 排序 && 染色))

    http://hihocoder.com/problemset/problem/1289 这题是这次微软笔试的第二题,过的人比第三题少一点,这题一眼看过去就是字符串匹配问题,应该可以使用字典树解决.不 ...