zoukankan      html  css  js  c++  java
  • 机器学习实战(Machine Learning in Action)学习笔记————10.奇异值分解(SVD)原理、基于协同过滤的推荐引擎、数据降维

    关键字: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

  • 相关阅读:
    a标签点击之后有个虚线边框,怎么去掉
    在ie下,a标签包被img的时候,为什么有个蓝色的边线
    如何让一个变量的值,作为另一个变量的名字
    html 获取宽高
    两个同级div等高布局
    java中IO流异常处理
    连带滑块效果图
    java中File类的使用
    java保留两位小数4种方法
    java日历显示年份、月份
  • 原文地址:https://www.cnblogs.com/Micang/p/10158386.html
Copyright © 2011-2022 走看看