转载: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
转载:SVD的更多相关文章
- 转载:奇异值分解(SVD) --- 线性变换几何意义(下)
本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...
- 转载:奇异值分解(SVD) --- 线性变换几何意义(上)
本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...
- 奇异值分解(SVD)原理详解及推导(转载)
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ...
- 奇异值分解(SVD)原理详解及推导 (转载)
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43053513 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有 ...
- SVD分解的理解[转载]
http://www.bfcat.com/index.php/2012/03/svd-tutorial/ SVD分解(奇异值分解),本应是本科生就掌握的方法,然而却经常被忽视.实际上,SVD分解不但很 ...
- 【转载】奇异值分解(SVD)计算过程示例
原文链接:奇异值分解(SVD)的计算方法 奇异值分解是线性代数中一种重要的矩阵分解方法,这篇文章通过一个具体的例子来说明如何对一个矩阵A进行奇异值分解. 首先,对于一个m*n的矩阵,如果存在正交矩阵U ...
- 奇异值分解(SVD) --- 几何意义 (转载)
PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把 这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象, ...
- 奇异值分解(SVD)原理与在降维中的应用
奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...
- 数值分析之奇异值分解(SVD)篇
在很多线性代数问题中,如果我们首先思考若做SVD,情况将会怎样,那么问题可能会得到更好的理解[1]. --Lloyd N. ...
随机推荐
- Spring-Cloud之Spring-Boot框架-1
一.Spring Boot 是由 Pivotal 团队开发的 Spring 框架,采用了生产就绪的观点 ,旨在简化配置,致力于快速开发. Spring Boot 框架提供了自动装配和起步依赖,使开发人 ...
- 表单提交学习笔记(一)—利用jquery.form提交表单(后台.net MVC)
起因:一开始想用MVC本身的Form提交方法,但是提交完之后想进行一些提示,MVC就稍显不足了,最后用jquery插件---jquery.form.js,完美解决了问题~~ 使用方法 一.下载jque ...
- selenium中的元素操作之下拉列表操作(四)
下拉列表操作中分为两种:select.非select 1.非select的下拉框操作 非select下拉列表操作与网页元素操作一致,找到元素,定位元素,设置等待,点击元素等等 接下来操作百度的设置按钮 ...
- linq根据英文首字母姓名排序
names.Sort((a, b) => a.name.CompareTo(b.name));
- JS去除字符串中的中括号
var str = '这是一个字符串[html]语句;[html]字符串很常见'; alert(str.replace(/\[|]/g,''));//移除字符串中的所有[]括号(不包括其内容) //输 ...
- mysql的yearweek 和 weekofyear函数
1.MySQL 的 YEARWEEK 是获取年份和周数的一个函数,函数形式为 YEARWEEK(date[,mode]) 例如 2010-3-14 ,礼拜天 SELECT YEARWEEK('2010 ...
- 有价证券secuerity英语
证券业 证券业是为证券投资活动服务的专门行业.各国定义的证券业范围略有不同.按照美国的 “产业分类标准”,证券业由证券经纪公司.证券交易所和有关的商品经纪集团组成.证券业在世界各国都是一个小的产业部门 ...
- Docke 镜像加速
一.国内获取Docker镜像时,访问 https://hub.docker.com/速度缓慢,只有几十K左右,这种情况可以使用国内的一些docker镜像,国内有些企业做了镜像拷贝工作,这样,我们就可以 ...
- Linux加密和数据安全性
加密和安全 墨菲定律 墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的, 原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导 致灾难,则必定有人会 ...
- composer.json详解
composer.json 架构:https://docs.phpcomposer.com/04-schema.html#homepage composer.json 完全解析:https://lea ...