转载:SVD

ComputeSVD


        在分布式矩阵有CoordinateMatirx,
RowMatrix, IndexedRowMatrix三种。除了CoordinateMatrix之外,IndexedRowMatrix和RowMatrix都有computeSVD方法,并且CoordinateMatrix有toIndexedRowMatrix()方法和toRowMatrix()方法可以向IndexedRowMatrix

和RowMatrix两种矩阵类型转换。

   

因此主要对比

IndexedRowMatrix

和

RowMatrix

两种矩阵类型的

ComputSVD

算法进行分析   关于SVD内容请参看维基百科,和一篇很棒的博文:《机器学习中的数学》进行了解。

一 算法描述:

           def   computeSVD

( k: Int, computeU: Boolean = false, rCond: Double = 1e-9):

                                
IndexedRowMatrix 

返回类型: 
SingularValueDecomposition[IndexedRowMatrix, Matrix]                       
RowMatrix              

返回类型: 
SingularValueDecomposition[RowMatrix, Matrix] 



                 U                is a RowMatrix of size m x k that satisfies U‘ * U = eye(k),
                 S                  is a Vector of size k, holding the singular values in descending order,
                 V                  is a Matrix of size n x k that satisfies V‘ * V = eye(k).



               k 
               number of leading singular values to keep (0 < k <= n). It might return less than k if there are 
                                    numerically zero singular values or there are not enough Ritz values converged before the                                     maximum number of Arnoldi update iterations is reached.

                 computeU   whether to compute U

                 rCoud         the reciprocal condition number. All singular values smaller than rCond * sigma(0) are treated as zero, 
                                    where sigma(0) is the largest singular value.

                 return         SingularValueDecomposition(U, s, V). U = null if computeU = false. 



二 选择例子:

构建一个4×5的矩阵M:

      
矩阵的形式为svdM.txt :
                        1  0  0  0  2
                        0  0  3  0  0
                        0  0  0  0  0
                        0  4  0  0  0

M矩阵的奇异值分解后奇异矩阵s应为:

               4  0  0  0  0
                           0  3  0  0  0
                           0  0
√5 0  0
                           0  0  0  0  0

我们将通过ComputeSVD函数进行验证.

三 构造矩阵,运行算法并验证结果:   

<一> 构造RowMatrix矩阵:M
 
        scala> val M = new RowMatrix(sc.textFile("hdfs:///usr/matrix/svdM.txt").map(_.split(‘ ‘))
                                                 .map(_.map(_.toDouble)).map(_.toArray)
                                                 .map(line => Vectors.dense(line)))
        M: org.apache.spark.mllib.linalg.distributed.RowMatrix = org.apache.spark.mllib.linalg.distributed.RowMatrix

<二> 调用算法
         scala> val svd = M.computeSVD(4, true)
         svd: SingularValueDecomposition[RowMatrix,Matrix]
        
可以看到svd是一个SingularValueDecomposition类型的对像,内部包含一个RowMatrix和一个Matrix用算法,并且此处的RowMatrix就是左奇异向量U,Matrix就是右奇异向量V.

<三> 验证结果

SingularValueDecomposition类API如下:
        

矩阵M的左奇异向量U:
        scala> scala> val U = svd.U
                   U: org.apache.spark.mllib.linalg.distributed.RowMatrix = org.apache.spark.mllib.linalg.distributed.RowMatrix
         scala> U.rows.foreach(println)
                    [0.0 ,0.0 ,  -0.9999999999999999 ,  -1.4901161193847656E-8]
                    [0.0 ,1.0 ,0.0 ,0.0]
                    [0.0 ,0.0 ,0.0 ,0.0]
                   [-1.0 ,0.0 ,0.0 ,0.0]

矩阵M的奇异值s:
         scala> val s = svd.s
                   s:  org.apache.spark.mllib.linalg.Vector = [4.0,3.0,2.23606797749979,1.4092648163485167E-8]

矩阵M的右奇异向量V:
         scala> val V = svd.V
                    V: org.apache.spark.mllib.linalg.Matrix =
                    0.0    0.0    -0.44721359549995787     0.8944271909999159
                    -1.0   0.0    0.0    0.0
                    0.0    1.0    0.0    0.0
                    0.0    0.0    0.0    0.0
                    0.0    0.0   -0.8944271909999159       -0.447213595499958

时间: 2024-11-05 11:28:09

转载:SVD的相关文章

转载:奇异值分解(SVD) --- 线性变换几何意义(上)

本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象,真心希望路过的各路朋友能从不同的角度阐述下自己对SVD实际意义的理解,比如 个性化推荐中应用了SVD,文本以及Web挖掘的时候也经常会用到SVD. 原文:We recommend a singular value decomposition 简介 SVD实际上是数学专业内容,但它现在

奇异值分解(SVD) --- 几何意义 (转载)

PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把 这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象,真心希望路过的各路朋友能从不同的角度阐述下自己对SVD实际意义的理 解,比如 个性化推荐中应用了SVD,文本以及Web挖掘的时候也经常会用到SVD. 原文:We recommend a singular value decomposition 关于线性变换部分的一些知识可以猛戳这里  奇异值分解(S

SVD(奇异值矩阵分解) 转载

http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html 一.奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法.两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征.先谈谈特征值分解吧: 1)特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 这时候λ就被称为特征向量v对应的特征值

自适应滤波:奇异值分解SVD

作者:桂. 时间:2017-04-03  19:41:26 链接:http://www.cnblogs.com/xingshansi/p/6661230.html 声明:欢迎被转载,不过记得注明出处哦~ [读书笔记10] 前言 广义逆矩阵可以借助SVD进行求解,这在上一篇文章已经分析.本文主要对SVD进行梳理,主要包括: 1)特征向量意义: 2)特征值分解与SVD: 3)PCA与SVD: 内容为自己的学习记录,其中多有借鉴他人之处,最后一并给出链接. 一.特征向量 第一反应是:啥是特征向量?为什

奇异值分解(转载)

转载自:http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有需要补充的,特别是关于矩阵和映射之间的对应关系.前段时间看了国外的一篇文章,叫A Singularly Valuable Decomposition The SVD of a Matrix,觉得分析的特别好,把矩阵和空间关系对应了起来.本文就参考了该文并结合矩阵的相关知识把SVD原理梳理一下. SVD不仅

SVD 奇异值分解

强大的矩阵奇异值分解(SVD)及其应用 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected].也可以加我的微博: @leftnoteasy 前言: 上一次写了关于PCA与LDA的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的.在上篇文章中便是基于特征值分解的一种解释.特征值和奇异值在大部分人的印象中,往

(转)机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用

版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 上一次写了关于PCA与LDA的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的.在上篇文章中便是基于特征值分解的一种解释.特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计算中.而且线性代数或者矩阵论里面,也很少讲任何跟特征值与奇异值有

机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用

机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 上一次写了关于PCA与LDA的文章,PCA的实现一般有两种,一种是用特征值分解去实现的,一种是用奇异值分解去实现的.在上篇文章中便是基于特征值分解的一种解释.特征值和奇异值在大部分人的印象中,往往是停留在纯粹的数学计

奇异值分解(SVD)原理与在降维中的应用

奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是很多机器学习算法的基石.本文就对SVD的原理做一个总结,并讨论在在PCA降维算法中是如何运用运用SVD的. 1. 回顾特征值和特征向量 我们首先回顾下特征值和特征向量的定义如下:$$Ax=\lambda x$$ 其中A是一个$n \times n$的矩阵,$x$是一个$n$维向量,则我们说$\lam