关键字:SVD、奇异值分解、降维、基于协同过滤的推荐引擎
作者:米仓山下
时间:2018-11-3
机器学习实战(Machine Learning in Action,@author: Peter Harrington)
源码下载地址:https://www.manning.com/books/machine-learning-in-action
https://github.com/pbharrin/machinelearninginaction

********************************************************************************

奇异值分解(Singular Value Decomposition,简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域,是很多机器学习算法的基石。

SVD应用:SVD在数据压缩(如PCA)、于降维算法中的特征分解、推荐算法、潜在语义索引(LSI)等领域都有着广泛的应用

--------------------------------------------------------------------------------------------

一、奇异值分解(SVD)原理

SVD分解与PCA有都可以实现降维,在pca中Ax=λx,如果我们求出了矩阵A的n个特征值λ1≤λ2≤...≤λn,以及这n个特征值所对应的特征向量{w1,w2,...wn},,如果这n个特征向量线性无关,那么矩阵A就可以用下式的特征分解表示:A=WΣW−1。进行特征分解,矩阵A必须为方阵;如果A不是方阵,即行和列不相同时,可以使用SVD。SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求要分解的矩阵为方阵。假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD为:A=UΣVT,其中U是一个m×m,的矩阵,Σ是一个m×n的矩阵,除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,V是一个n×n的矩阵。U和V都是酉矩阵,即满足UTU=I,VTV=I。

<1>主成分分析通过对原始数据线性变化,最大化协方差矩阵,使在新的空间内数据的方差最大化(能量集中),特征值分解,对是针对数据列的降维。
<2>SVD分解是非方正条件下对数据进行奇异值分解。左奇异矩阵可以用于行数的压缩,右奇异矩阵可以用于列数即特征维度的压缩。

与PCA相比,SVD也可以得到协方差矩阵XTX最大的d个特征向量张成的矩阵,但是SVD有个好处,有一些SVD的实现算法可以不求先求出协方差矩阵XTX,也能求出我们的右奇异矩阵V。也就是说,我们的PCA算法可以不用做特征分解,而是做SVD来完成。这个方法在样本量很大的时候很有效。实际上,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是我们我们认为的暴力特征分解。在现在的大数据时代,由于SVD可以实现并行化,因此更是大展身手。

PCA的原理及数学推倒可以看【PCA】,SVD的原理和理解看【SVD】
(微信公众号的有些基础文章质量真的是比论坛博客的质量高)

书中对隐形语义的讲解感觉很突兀,我的理解是:其实可以理解为将将一个语义空间去进行分析处理。如在文中餐馆的例子,进行奇异值分解就是:VT矩阵会将用户映射到BBQ/日式食品空间去。U矩阵会将餐馆的菜映射到BBQ/日式食品空间去。自然语言中的奇异值分解形成“概念”后面再慢慢学习

--------------------------------------------------------------------------------------------

二、基于协同过滤的推荐引擎

首先需要说明,推荐引擎有很多方法,协同过滤只是众多场景下的一种,如有基于内容推荐、协同过滤、关联规则(Apriori算法、FPgrowth算法)、混合推荐等。

基于协同过滤的推荐引擎原理:协同过滤(collaborative filtering)是通过将用户和其他用户的数据进行对比来实现推荐的。利用相似物品,基于相似度加权平均求得未评价物品的预测评分,求得未评价物品预测评分的前N高,以此作为推荐项。

SVD(奇异值分解)在协同过滤推荐引擎中的作用是利用U对行数据降维,以解决矩阵稀疏问题,去除了噪声和冗余信息。SVD的作用是:实现了降维,将数据映射/压缩到某个隐形空间,SVD来减少特征空间并提高推荐的效果。可以将奇异值想象成一个新空间。这二维分别是什么呢?能告诉我们数据的什么信息?这二维分别对应图中给出的两个组,右图中已经标示出了其中的一个组。可基于每个组的共同特征来命名这二维,比如得到的美式BBQ和日式食品这二维。

书中首先讲了计算相似度的三种方法,包括欧氏距离、皮尔逊相关系数、余弦相似度。书中计算的是各种餐馆之间的相似度。

接着,就可以利用相似度便可以基于协同过滤进行推荐了,在用户没有评级的所有物品中,对每个物品预计一个可能的评级分数。这就是说,我们认为用户可能对物品的打分(这就是相似度计算的初衷),对这些物品的评分从高到底进行排序,返回前N个物品。

最后,利用SVD提高推荐的效果,解决数据矩阵稀疏问题,并且可以去燥。将用户映射到BBQ/日式食品空间,然后再计算餐馆之间的相似度,加权求为评价商品的得分。

--------------------------------------------------------------------------------------------

三、基于SVD的图像压缩

奇异值分解能够有效的降低数据的维数,图片为例,从450维降到149维后,还保留了90%的信息

原理:
使用SVD来对数据降维,从而实现图像的压缩。在协同过滤推荐引擎中仅使用SVD的左奇异矩阵U,在图像压缩中不仅用到了U还用到了V。一张二维n*m的灰度图片可以看做是n*m的矩阵,利用SVD可以实现对二维图像的压缩。

书中采用了二值化o-1矩阵,对数据进行了SVD压缩,仅保留前两个奇异值的信息,然后采用一个阈值还是把矩阵还原为一个0-1矩阵。(灰度图片和RGB图片的SVD分解下一节介绍)

注意:虽然奇异值分解很有效,但是不能滥用,一般情况下要求降维后信息的损失度不能超过5%,甚至是1%

书中源码
--------------------------------------------------------------------------------------------
参考文献:

刘建平-奇异值分解(SVD)原理与在降维中的应用:https://mp.weixin.qq.com/s/Z0ZkQlZDKUSJEWVq7Vi6Cg  & https://www.cnblogs.com/pinard/p/6251584.html

读书笔记(3) | SVD算法及应用 :https://mp.weixin.qq.com/s/EOmViXqvcIiN2cx5RtHSBg

机器学习实战 第十四章 利用SVD简化数据:https://blog.csdn.net/namelessml/article/details/52987113

机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

机器学习实战(Machine Learning in Action)学习笔记————10.奇异值分解(SVD)原理、基于协同过滤的推荐引擎、数据降维的更多相关文章

  1. 机器学习实战 [Machine learning in action]

    内容简介 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存.谋发展的决定性手段,这使得这一过去为分析师和数学家所专属 ...

  2. 学习笔记之机器学习实战 (Machine Learning in Action)

    机器学习实战 (豆瓣) https://book.douban.com/subject/24703171/ 机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中 ...

  3. K近邻 Python实现 机器学习实战(Machine Learning in Action)

    算法原理 K近邻是机器学习中常见的分类方法之间,也是相对最简单的一种分类方法,属于监督学习范畴.其实K近邻并没有显式的学习过程,它的学习过程就是测试过程.K近邻思想很简单:先给你一个训练数据集D,包括 ...

  4. Coursera 机器学习 第6章(下) Machine Learning System Design 学习笔记

    Machine Learning System Design下面会讨论机器学习系统的设计.分析在设计复杂机器学习系统时将会遇到的主要问题,给出如何巧妙构造一个复杂的机器学习系统的建议.6.4 Buil ...

  5. 【python与机器学习实战】感知机和支持向量机学习笔记(一)

    对<Python与机器学习实战>一书阅读的记录,对于一些难以理解的地方查阅了资料辅以理解并补充和记录,重新梳理一下感知机和SVM的算法原理,加深记忆. 1.感知机 感知机的基本概念 感知机 ...

  6. Machine Learning(Andrew Ng)学习笔记

    1.监督学习(supervised learning)&非监督学习(unsupervised learning) 监督学习:处理具有若干属性且返回值不同的对象.分为回归型和分类型:回归型的返回 ...

  7. Machine Learning With Spark学习笔记(在10万电影数据上训练、使用推荐模型)

    我们如今開始训练模型,还输入參数例如以下: rank:ALS中因子的个数.通常来说越大越好,可是对内存占用率有直接影响,通常rank在10到200之间. iterations:迭代次数,每次迭代都会降 ...

  8. Machine Learning With Spark学习笔记(提取10万电影数据特征)

    注:原文中的代码是在spark-shell中编写运行的,本人的是在eclipse中编写运行,所以结果输出形式可能会与这本书中的不太一样. 首先将用户数据u.data读入SparkContext中.然后 ...

  9. 【Python机器学习实战】感知机和支持向量机学习笔记(三)之SVM的实现

    前面已经对感知机和SVM进行了简要的概述,本节是SVM算法的实现过程用于辅助理解SVM算法的具体内容,然后借助sklearn对SVM工具包进行实现. SVM算法的核心是SMO算法的实现,首先对SMO算 ...

随机推荐

  1. Spring Boot 1.5.10 发布:修复重要安全漏洞!!!

    2018/01/31,Spring Boot团队发布了Spring Boot 1.5.10. Maven: <parent> <groupId>org.springframew ...

  2. LeetCode--No.013 Roman to Integer

    13. Roman to Integer Total Accepted: 95998 Total Submissions: 234087 Difficulty: Easy Given a roman ...

  3. postgresql-排序

    postgresql的排序. https://www.cnblogs.com/flying-tiger/p/8120046.html 1.是根据排序数据量的大小来判断,如果数据量少到能够整体放到内存的 ...

  4. mongodb3.x主从配置及备份

    本文将介绍下mongodb主从配置及备份 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...

  5. 【译】使用 ndb 调试 node 应用

    原文链接:Debugging Node.js Application Using ndb Google Chrome 实验室发布了一款新的 node debug 工具来提升开发者体验,本文将会全面介绍 ...

  6. HDU 6022---MG loves set(K-D树)

    题目链接 Problem Description MG is an intelligent boy. One day he was challenged by the famous master ca ...

  7. python中合并数组的方法

    一.数组纵向合并 1.使用np.vstack()函数 [code] #数组 a = [[1,2,3],[4,5,6]] b = [[1,1,1],[2,2,2]] #纵向合并 c = np.vstac ...

  8. Hadoop社区版搭建

    1.环境准备 1.1 硬件配置 设备名 参数 数量 6台 系统 centos6.5 内存 64G 硬盘 32T/台 CPU 16核/台 1.2 软件版本 Hadoop-2.x 下载地址 JDK1.7  ...

  9. 关于 Nginx 配置 WebSocket 400 问题

    今天把项目升级了 asp.net core 到 2.1 的版本,使用了 signalr  的功能,由于阿里云不支持 websocket 协议,所以使用了 nginx 代理方式来解决,后续就报了一个登陆 ...

  10. 安装clickhouse缺少依赖libicudata.so.50()(64bit)

    root@localhost ]# rpm -ivh clickhouse-common--.el7.x86_64.rpm 错误:依赖检测失败: libicudata.so.()(64bit) 被 c ...