Spark Mllib之降维--基于RDD

微信公众号:数据挖掘与分析学习

1.奇异值分解(SVD)

奇异值分解(SVD)将矩阵分解为三个矩阵:U,Σ和V,使得

其中,

  1. U是一个标准正交矩阵,其列称为左奇异向量,
  2. Σ是一个对角矩阵,非负对角线按降序排列,其对角线称为奇异值,
  3. V是一个标准正交矩阵,其列称为右奇异向量。

对于大型矩阵,通常我们不需要完全因子分解,只需要最大的若干个奇异值及其相关的奇异向量。这可以节省存储,去噪并恢复矩阵的低秩结构。

如果我们保留最大k个奇异值,那么得到的低秩矩阵的维数将是:

我们假设n小于m。 奇异值和右奇异向量是从Gramian矩阵ATA的特征值和特征向量导出的。如果用户通过computeU参数请求,存储右奇异向量U的矩阵是通过矩阵乘法U=A(VS-1)计算得到的。使用的实际方法是根据计算成本自动确定的:

  1. 如果n很小(n <100)或k与n(k> n / 2)相比较大,我们首先计算Gramian矩阵,然后在驱动器上本地计算其顶部特征值和特征向量。这需要在每个执行程序和驱动程序上单次传递O(n2)存储空间,并且在驱动程序上需要O(n2k)时间。
  2. 否则,我们以分布方式计算(ATA)v并将其发送到ARPACK以计算(ATA)在驱动器节点上的顶部特征值和特征向量。

package com.cb.spark.mllib;

 

import java.util.Arrays;

import java.util.List;

 

import org.apache.spark.SparkConf;

import org.apache.spark.api.java.JavaRDD;

import org.apache.spark.api.java.JavaSparkContext;

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值