推荐系统:

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. 3D卡片折叠动画自定义下拉框

    在线演示 本地下载

  2. Entity Framework中的Identity map和Unit of Work模式(转)

    一,什么是Identity map模式 Identity map是EF获取和缓存数据的模式.Identity map模式指的是任何数据都只会被加载一次,以map的形式缓存,以唯一的identity来再 ...

  3. Oracle可能会遇到问题和解决方法

    1.plsql developer查询一列用中文,出现乱码 添加环境变量NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK->软件重启 2.ORA-1251 ...

  4. 图解MFC基本框架(深入消息映射机制)

    首先,先看整体的消息流向图: 上图解释: 起点是消息循环,在winmain函数中(mfc中winmain函数是隐含的调用的,在app全局对象构造完后紧接着调用winmain函数),while循环中不断 ...

  5. MySQL中处理Null时要注意两大陷阱

    MySQL数据库是一个基于结构化数据的开源数据库.SQL语句是MySQL数据库中核心语言.不过在MySQL数据库中执行SQL语句,需要小心两个陷阱. 陷阱一:空值不一定为空 空值是一个比较特殊的字段. ...

  6. 各数据库连接配置与maven依赖安装

    maven用的比较多,所以自己去捣鼓了一下:以下是关于数据库配置的一块,把相关的内容张贴出来,以备不时之需 //MySql 配置文件(maven):pom.xml <dependency> ...

  7. 详细的.Net并行编程高级教程--Parallel

    一直觉得自己对并发了解不够深入,特别是看了<代码整洁之道>觉得自己有必要好好学学并发编程,因为性能也是衡量代码整洁的一大标准.而且在<失控>这本书中也多次提到并发,不管是计算机 ...

  8. 【leetcode刷题笔记】Search in Rotated Sorted Array

    Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...

  9. redis学习--Hashes数据类型

    本文转自:http://www.cnblogs.com/stephen-liu74/archive/2012/03/19/2352932.html 一.概述: 我们可以将Redis中的Hashes类型 ...

  10. ACM学习历程—HYSBZ 2818 Gcd(欧拉函数 || 莫比乌斯反演)

    Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sam ...