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

转载:SVD的更多相关文章

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

    本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...

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

    本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...

  3. 奇异值分解(SVD)原理详解及推导(转载)

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ...

  4. 奇异值分解(SVD)原理详解及推导 (转载)

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ...

  5. SVD分解的理解[转载]

    http://www.bfcat.com/index.php/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很 ...

  6. 【转载】奇异值分解(SVD)计算过程示例

    原文链接:奇异值分解(SVD)的计算方法 奇异值分解是线性代数中一种重要的矩阵分解方法,这篇文章通过一个具体的例子来说明如何对一个矩阵A进行奇异值分解. 首先,对于一个m*n的矩阵,如果存在正交矩阵U ...

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

    PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把 这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象, ...

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

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

  9. 数值分析之奇异值分解(SVD)篇

    在很多线性代数问题中,如果我们首先思考若做SVD,情况将会怎样,那么问题可能会得到更好的理解[1].                                       --Lloyd N. ...

随机推荐

  1. java之mybatis之一对多关联映射

    1.在一对多的关联映射中,表结构如下 2.实体类结构 User.java public class User implements Serializable{ private int id; priv ...

  2. web API .net - .net core 对比学习-文件目录概述

    个人正在学习.net web Api的相关知识,因此用这一系列博客做一记录. 1. 首先我们分别创建 .net web api 项目和 .net core web api 项目. 2. 我们首先比较一 ...

  3. 1005 继续(3n+1)猜想(C#)

    一.题目内容: 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对 n= ...

  4. Java自学-控制流程 结束外部循环

    Java中结束外部循环 Java中如何结束外部for循环? 示例 1 : 结束当前循环 break; 只能结束当前循环 public class HelloWorld { public static ...

  5. 不安全的验证码Insecure CAPTCHA

    没啥好讲的,当验证不合格时,通过burp抓包工具修改成符合要求的数据包.修改参数标志位.USER-AGENT之类的参数. 防御 加强验证,Anti-CSRF token机制防御CSRF攻击,利用PDO ...

  6. kali之使用sqlmap进行sql注入

    sqlmap简介 sqlmap支持五种不同的注入模式: 1.基于布尔的盲注,即可以根据返回页面判断条件真假的注入. 2.基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是 ...

  7. pandas-10 pd.pivot_table()透视表功能

    pandas-10 pd.pivot_table()透视表功能 和excel一样,pandas也有一个透视表的功能,具体demo如下: import numpy as np import pandas ...

  8. Objective-C 知识点拾遗

    -- :: UIWebView的使用总结 UIWebView全解

  9. day 04 作业 预科

    目录 作业 1.分别列出 数字类型.字符串类型.列表.字典 的 作用.定义方式和使用方法. 数字类型 字符串类型 列表 字典 词云图 作业 1.分别列出 数字类型.字符串类型.列表.字典 的 作用.定 ...

  10. appium 操作界面

    操作界面函数: 1.swipe():模拟滑动 2.tap():点击坐标 1.swipe()函数:用来模拟滑动操作 参数说明: 坐标就是x/y坐标 duration是滑动从起点到终点坐标所耗费的时间. ...