SVD降维
来源:互联网 发布:cad2016简体中文版mac 编辑:程序博客网 时间:2024/06/05 19:17
1. SVD降维
1.1 概念
奇异值分解(Singular value decomposition)
现实世界里,为了实现类似特征值分解的计算,我们使用奇异值分解。奇异值分解适用于任何矩阵,如下所示,其中A是一个m*n的矩阵:
A=Um∗mΣm∗nVTn∗nA=Um∗mΣm∗nVn∗nT
其中
U 是一个m*m的正交矩阵,其向量被称为左奇异向量
V 也是一个n*n的正交矩阵,其向量被成为右奇异向量
Σ是一个m*n的矩阵,其对角线上的元素为奇异值,其余元素皆为0
当选取top k个奇异值时,可以将矩阵降维成为:
Am∗n≈Um∗kΣk∗kVTk∗n
1.2 用处
当计算的结果不需要十分精确时,某些变量对于我们来说意义是十分小的。当处理的数据维度十分巨大的时候,计算量变得很大,这时候就可以通过降维来去除不是那么重要的维度(如本例中的z维度),这些维度对最终的计算结果的影响远远小于其它的维度。数据降维,将复杂的维度简单化,减少运算量
1.3 细节
降维后的数据展示,大维度数据处理
1.4 Demo
package spark.mllibimport org.apache.spark.mllib.linalg.distributed.RowMatriximport org.apache.spark.sql.SparkSessionimport org.apache.spark.{SparkConf, SparkContext}/** * Created by liuwei on 2017/7/13. */object SVDTest { def main(args: Array[String]): Unit = { import org.apache.spark.mllib.linalg.Matrix import org.apache.spark.mllib.linalg.SingularValueDecomposition import org.apache.spark.mllib.linalg.Vector import org.apache.spark.mllib.linalg.Vectors import org.apache.spark.mllib.linalg.distributed.RowMatrix var arr1:Array[Double] = new Array[Double](10000) for(i <- 0 to arr1.length-1){ arr1(i) = i%10 }// arr1.foreach(println) val v1 =Vectors.dense(arr1); val sparkConf = new SparkConf().setAppName("PCATest").setMaster("local[8]") val sc = new SparkContext(sparkConf) val data = Array( Vectors.sparse(5, Seq((1, 1.0), (3, 7.0))), Vectors.dense(2.0, 0.0, 3.0, 4.0, 5.0), Vectors.dense(4.0, 0.0, 0.0, 6.0, 7.0)) val rows = sc.parallelize(data) val mat: RowMatrix = new RowMatrix(rows) // Compute the top 5 singular values and corresponding singular vectors. val svd: SingularValueDecomposition[RowMatrix, Matrix] = mat.computeSVD(5, computeU = true) // U右奇异矩阵 val U: RowMatrix = svd.U // The U factor is a RowMatrix. U.rows.foreach(println) println("===============") // s奇异值向量 val s: Vector = svd.s // The singular values are stored in a local dense vector. println(s) println("===============") // V左奇异矩阵 val V: Matrix = svd.V // The V factor is a local dense matrix. println(V) }}
阅读全文
1 0
- SVD降维
- PCA和SVD降维
- SVD
- SVD
- svd
- svd++
- SVD
- SVD
- svd++
- svd
- svd++
- svd
- SVD
- SVD
- SVD
- SVD
- svd++
- SVD
- 编程通用知识
- eclipse oxygen4.7 bug: jsp html 标签Option 嵌入jsp标签如<c:if>报错
- Xen中半虚拟化的创建与配置
- Android长久浮窗 service
- Golang学习之采用Glide进行包管理
- SVD降维
- springboot【21】日志管理之1.5.x新特性:动态修改日志级别
- Java程序内存分析:使用mat工具分析内存占用
- 结构体定义 typedef struct 用法详解和用法小结
- 01 矩阵
- 前端跨域知识总结
- 测试调用XXX.asmx类型接口
- 关于Socket通讯时通讯协议的制定
- js笔记:Js封装库——css选择器