【机器学习】推荐系统、SVD分解降维
推荐系统:
1.基于内容的实现:KNN等
2.基于协同滤波(CF)实现:SVD
→ pLSA(从LSA发展而来,由SVD实现)、LDA、GDBT
SVD算是比较老的方法,后期演进的主题模型主要是pLSA和LDA。pLSA主要基于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分解降维的更多相关文章
- 机器学习之SVD分解
一.SVD奇异值分解的定义 假设是一个的矩阵,如果存在一个分解: 其中为的酉矩阵,为的半正定对角矩阵,为的共轭转置矩阵,且为的酉矩阵.这样的分解称为的奇异值分解,对角线上的元素称为奇异值,称为左奇异矩 ...
- 机器学习-特征值,svd分解
求矩阵的秩 设 ,已知r(A)=2,则参数x,y分别是 解:任意三阶子式=0,有二阶子式≠0,但是这些子式比较多,可以使用初等变换,因为初等变换不改变矩阵的秩,可以将矩阵通过初等行(列)变换,化为行阶 ...
- 机器学习Python实现 SVD 分解
这篇文章主要是结合机器学习实战将推荐算法和SVD进行对应的结合 不论什么一个矩阵都能够分解为SVD的形式 事实上SVD意义就是利用特征空间的转换进行数据的映射,后面将专门介绍SVD的基础概念.先给出p ...
- 机器学习中的矩阵方法04:SVD 分解
前面我们讲了 QR 分解有一些优良的特性,但是 QR 分解仅仅是对矩阵的行进行操作(左乘一个酉矩阵),可以得到列空间.这一小节的 SVD 分解则是将行与列同等看待,既左乘酉矩阵,又右乘酉矩阵,可以得出 ...
- 海量数据挖掘MMDS week4: 推荐系统之数据降维Dimensionality Reduction
http://blog.csdn.net/pipisorry/article/details/49231919 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 矩阵的SVD分解
转自 http://blog.csdn.net/zhongkejingwang/article/details/43053513(实在受不了CSDN的广告) 在网上看到有很多文章介绍SVD的,讲的也都 ...
- 简单易学的机器学习算法—SVD奇异值分解
简单易学的机器学习算法-SVD奇异值分解 一.SVD奇异值分解的定义 假设M是一个的矩阵,如果存在一个分解: 其中的酉矩阵,的半正定对角矩阵,的共轭转置矩阵,且为的酉矩阵.这样的分解称为M的奇 ...
- SVD分解的理解[转载]
http://www.bfcat.com/index.php/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很 ...
- SVD分解技术数学解释
SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章 ...
随机推荐
- 顺序表的静态存储(C语言实现)
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 1.顺序表的结构体声明 #define MAX_SIZE 5 //定义数组的大小 typed ...
- 剑指offer之 从尾到头打印链表
package Problem5; import java.util.Stack; //首先定义链表结构class LinkNode{ LinkNode next; int node_value;} ...
- maven 相关插件
maven打包配置,到底要打包哪些文件,如何配置??使用如下插件: <build> <finalName>weatherAdminSys</finalName> & ...
- hive启动时报错 java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D at org.apache.hadoop.fs.Path.initialize
错误提示信息如下 错误信息如下 [root@node1 bin]# ./hive Logging initialized -bin/lib/hive-common-.jar!/hive-log4j.p ...
- JSP<jsp:forward>与<%@ include%>
JSP<jsp:forward>与<%@ include%><jsp:include> <jsp:forward file="forwardTo_p ...
- pugixml 1.9 manual解读(部分)
Plain character data nodes (node_pcdata) represent plain text in XML. PCDATA nodes have a value, but ...
- Echarts一个页面加载多个图表及图表自适应
Echarts一个页面加载多个图表及图表自适应 模块化加载 //入口 require.config({ paths: { echarts: 'http://echarts.baidu.com/buil ...
- 浅谈WebService开发(一)
一.什么是WebService: 简单通俗来说,就是企业之间.网站之间通过Internet来访问并使用在线服务,一些数据,由于安全性问题,不能提供数据库给其他单位使用,这时候可以使 用WebSer ...
- 分享知识-快乐自己:揭秘HDFS
揭秘HDFS: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBas ...
- 什么是 Sass 其与SCSS区别是什么?
Sass 官网上是这样描述 Sass 的: Sass 是一门高于 CSS 的元语言,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法, ...