关键字: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. webrtc vad小bug

    当channel为5的时候offset为80,再进行下面的操作smallest_values[j + 1]将会越出数组的限界到”第97个“:应该将下图的16改为15 low_value_vector数 ...

  2. 机器学习技法笔记:07 Blending and Bagging

    Roadmap Motivation of Aggregation Uniform Blending Linear and Any Blending Bagging (Bootstrap Aggreg ...

  3. 机器学习与Tensorflow(4)——卷积神经网络与tensorflow实现

    1.标准卷积神经网络 标准的卷积神经网络由输入层.卷积层(convolutional layer).下采样层(downsampling layer).全连接层(fully—connected laye ...

  4. 深度解析 Vue 响应式原理

    深度解析 Vue 响应式原理 该文章内容节选自团队的开源项目 InterviewMap.项目目前内容包含了 JS.网络.浏览器相关.性能优化.安全.框架.Git.数据结构.算法等内容,无论是基础还是进 ...

  5. (转)websphere线程池 连接池设置

    原文:http://www.talkwithtrend.com/Article/207511 池(Pool)是WebSphere中最常涉及的概念之一.从网络.Web 服务器.Web 容器.EJB 容器 ...

  6. asp.net core的docker实践

    如果centos中没有安装和docker和.net core镜像,先安装docker和asp.net core 镜像 安装dockeryum -y install docker-io 启动 Docke ...

  7. Set "$USE_DEPRECATED_NDK=true" in gradle.properties to continue using the current NDK integration. 解决办法

    1.将 jni 文件夹名改为 cpp: 2.添加 CMakeLists.txt; 3.修改 build.gradle; externalNativeBuild { cmake { path " ...

  8. Jackson序列化LocalDate与Springboot集成

    前言 Java8的date API一经推出便广受好评,今日也准备用一用,然后就用出问题了.基本用法见https://www.cnblogs.com/woshimrf/p/java8-date-api. ...

  9. spring-session-data-redis解决session共享的问题

    分布式系统要做到用户友好,需要对用户的session进行存储,存储的方式有以下几种: 本地缓存 数据库 文件 缓存服务器 可以看一些不同方案的优缺点 1.本地机器或者本地缓存.优点:速度快  缺点:服 ...

  10. Java与c#的一些细节区别

    实习中用的语言是c#,第一次接触到这种语言,然后写的过程中,发觉和Java几乎一摸一样,好像根本是无缝切换,但细节仍有很大的区别,称有空总结一波里面的部分细节实现. ps. 我写c#过程中,发觉c#有 ...