Singular Value 奇异值 SVD

降维(Dimensionality Reduction) 是机器学习中的一种重要的特征处理手段,
它可以减少计算过程中考虑到的随机变量(即特征)的个数,其被广泛应用于各种机器学习问题中, 用于消除噪声、对抗数据稀疏问题。它在尽可能维持原始数据的内在结构的前提下, 得到一组描述原数据的,低维度的隐式特征(或称主要特征)。

MLlib机器学习库提供了两个常用的降维方法:

  • 奇异值分解(Singular Value Decomposition,SVD)

  • 主成分分析(Principal Component Analysis,PCA)

一、奇异值分解(SVD)

  1. 概念介绍

    奇异值分解(SVD)** 来源于代数学中的矩阵分解问题,对于一个方阵来说,
    我们可以利用矩阵特征值和特征向量的特殊性质(矩阵点乘特征向量等于特征值数乘特征向量)
    ,通过求特征值与特征向量来达到矩阵分解的效果:
    A = QΣQ^−1
    这里,Q是由特征向量组成的矩阵,而Σ是特征值降序排列构成的一个对角矩阵(对角线上每个值是一个特征值
    ,按降序排列,其他值为0),特征值的数值表示对应的特征的重要性。
    在很多情况下,最大的一小部分特征值的和即可以约等于所有特征值的和,而通过矩阵分解的降维就是通过在Q、Σ中
    删去那些比较小的特征值及其对应的特征向量,使用一小部分的特征值和特征向量来描述整个矩阵,从而达到降维的效果。
    但是,实际问题中大多数矩阵是以奇异矩阵形式,而不是方阵的形式出现的,奇异值分解是特征值分解在奇异矩阵上的推广形式,
    它将一个维度为m×n奇异矩阵A分解成三个部分 :
    A=UΣV^T
    其中U、V是两个正交矩阵,其中的每一行(每一列)分别被称为 左奇异向量 和 右奇异向量,他们和Σ中对角线上的奇异值相对应,
    通常情况下我们只需要取一个较小的值k,保留前k个奇异向量和奇异值即可,其中U的维度是m×k、V的维度是n×k、Σ是一个k×k的方阵,
    从而达到降维效果。

  2. SVD变换的例子

    准备好一个矩阵,这里我们采用一个简单的文件a.mat来存储一个尺寸为(4,9)的矩阵,其内容如下:

  1 2 3 4 5 6 7 8 95 6 7 8 9 0 8 6 79 0 8 7 1 4 3 2 16 4 2 1 3 4 2 1 5

随后,将该文本文件读入成RDD[Vector],并转换成RowMatrix,即可调用RowMatrix自带的computeSVD方法
计算分解结果,这一结果保存在类型为SingularValueDecomposition的svd对象中:

保持领先的奇异值的数量(0 < k < = n)。它可能会返回小于k如果有数值零奇异值或没有足够的丽兹值聚合前达到Arnoldi更新迭代的最大数量(以防矩阵A是坏脾气的)。

* [28.741265581939565,10.847941223452608,7.089519467626695]-0.32908987300830383  0.6309429972945555    0.16077051991193514-0.2208243332000108   -0.1315794105679425   -0.2368641953308101-0.35540818799208057  0.39958899365222394   -0.147099615168733-0.37221718676772064  0.2541945113699779    -0.25918656625268804-0.3499773046239524   -0.24670052066546988  -0.34607608172732196-0.21080978995485605  0.036424486072344636  0.7867152486535043-0.38111806017302313  -0.1925222521055529   -0.09403561250768909-0.32751631238613577  -0.3056795887065441   0.09922623079118417-0.3982876638452927   -0.40941282445850646  0.26805622896042314null

这里可以看到,由于限定了取前三个奇异值,所以奇异值向量s包含有三个从大到小排列的奇异值,
而右奇异矩阵V中的每一列都代表了对应的右奇异向量。U成员得到的是一个null值,这是因为在实际运用中,
只需要V和S两个成员,即可通过矩阵计算达到降维的效果,其具体原理可以参看这篇博文:
机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用,这里不再赘述。如果需要获得U成员,
可以在进行SVD分解时,指定computeU参数,令其等于True,即可在分解后的svd对象中拿到U成员,
如下文所示:

下面我们将通过实例介绍其具体的使用方法。

package dimensionalityreductionimport org.apache.log4j.{Level, Logger}
import org.apache.spark.SparkContext
import org.apache.spark.mllib.linalg
import org.apache.spark.mllib.linalg.{Matrix, SingularValueDecomposition, Vectors}
import org.apache.spark.mllib.linalg.distributed.RowMatrix
import org.apache.spark.rdd.RDD/*** Singular Value 奇异值 SVD**     降维(Dimensionality Reduction) 是机器学习中的一种重要的特征处理手段,*  它可以减少计算过程中考虑到的随机变量(即特征)的个数,其被广泛应用于各种机器学习问题中,*  用于消除噪声、对抗数据稀疏问题。它在尽可能维持原始数据的内在结构的前提下,*  得到一组描述原数据的,低维度的隐式特征(或称主要特征)。**       MLlib机器学习库提供了两个常用的降维方法:*   奇异值分解(Singular Value Decomposition,SVD)*   和*   主成分分析(Principal Component Analysis,PCA),*   下面我们将通过实例介绍其具体的使用方法。**/
object SingularValue {def main(args: Array[String]): Unit = {/*** 一、奇异值分解(SVD)**  1、概念介绍**      奇异值分解(SVD)** 来源于代数学中的矩阵分解问题,对于一个方阵来说,*    我们可以利用矩阵特征值和特征向量的特殊性质(矩阵点乘特征向量等于特征值数乘特征向量)*    ,通过求特征值与特征向量来达到矩阵分解的效果:**    A = QΣQ^−1**    这里,Q是由特征向量组成的矩阵,而Σ是特征值降序排列构成的一个对角矩阵(对角线上每个值是一个特征值*    ,按降序排列,其他值为0),特征值的数值表示对应的特征的重要性。**      在很多情况下,最大的一小部分特征值的和即可以约等于所有特征值的和,而通过矩阵分解的降维就是通过在Q、Σ中*    删去那些比较小的特征值及其对应的特征向量,使用一小部分的特征值和特征向量来描述整个矩阵,从而达到降维的效果。**        但是,实际问题中大多数矩阵是以奇异矩阵形式,而不是方阵的形式出现的,奇异值分解是特征值分解在奇异矩阵上的推广形式,*    它将一个维度为m×n奇异矩阵A分解成三个部分 :*    A=UΣV^T**        其中U、V是两个正交矩阵,其中的每一行(每一列)分别被称为 左奇异向量 和 右奇异向量,他们和Σ中对角线上的奇异值相对应,*    通常情况下我们只需要取一个较小的值k,保留前k个奇异向量和奇异值即可,其中U的维度是m×k、V的维度是n×k、Σ是一个k×k的方阵,*    从而达到降维效果。**//*** 2、SVD变换的例子*** 准备好一个矩阵,这里我们采用一个简单的文件a.mat来存储一个尺寸为(4,9)的矩阵,其内容如下:*1 2 3 4 5 6 7 8 95 6 7 8 9 0 8 6 79 0 8 7 1 4 3 2 16 4 2 1 3 4 2 1 5随后,将该文本文件读入成RDD[Vector],并转换成RowMatrix,即可调用RowMatrix自带的computeSVD方法计算分解结果,这一结果保存在类型为SingularValueDecomposition的svd对象中:*/Logger.getLogger("org").setLevel(Level.OFF)val sc = new SparkContext("local[*]", "li")val data: RDD[linalg.Vector] = sc.textFile("/home/rjxy/IdeaProjects/spark/spark_mllib_course/src/main/resources/data/a.mat").map((_: String).split(" ").map((_: String).toDouble)).map((line: Array[Double]) => Vectors.dense(line))val matrix: RowMatrix = new RowMatrix(data)//保持领先的奇异值的数量(0 < k < = n)。它可能会返回小于k如果有数值零奇异值或没有足够的丽兹值聚合前达到Arnoldi更新迭代的最大数量(以防矩阵A是坏脾气的)。val value: SingularValueDecomposition[RowMatrix, Matrix] = matrix.computeSVD(3)println(value.s)println(value.V)println(value.U)/*** [28.741265581939565,10.847941223452608,7.089519467626695]-0.32908987300830383  0.6309429972945555    0.16077051991193514-0.2208243332000108   -0.1315794105679425   -0.2368641953308101-0.35540818799208057  0.39958899365222394   -0.147099615168733-0.37221718676772064  0.2541945113699779    -0.25918656625268804-0.3499773046239524   -0.24670052066546988  -0.34607608172732196-0.21080978995485605  0.036424486072344636  0.7867152486535043-0.38111806017302313  -0.1925222521055529   -0.09403561250768909-0.32751631238613577  -0.3056795887065441   0.09922623079118417-0.3982876638452927   -0.40941282445850646  0.26805622896042314null**    这里可以看到,由于限定了取前三个奇异值,所以奇异值向量s包含有三个从大到小排列的奇异值,* 而右奇异矩阵V中的每一列都代表了对应的右奇异向量。U成员得到的是一个null值,这是因为在实际运用中,* 只需要V和S两个成员,即可通过矩阵计算达到降维的效果,其具体原理可以参看这篇博文:* 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用,这里不再赘述。如果需要获得U成员,* 可以在进行SVD分解时,指定computeU参数,令其等于True,即可在分解后的svd对象中拿到U成员,* 如下文所示:*/val value1: SingularValueDecomposition[RowMatrix, Matrix] = matrix.computeSVD(3, computeU = true)println(value1.s)println(value1.V)val u: RowMatrix = value1.Uval rows: RDD[linalg.Vector] = u.rowsprintln(rows.foreach(println))PrincipalComponentAnalysis}
}

降维(Dimensionality Reduction) 是机器学习中的一种重要的特征处理手段相关推荐

  1. 一文介绍机器学习中的三种特征选择方法

    作者 | luanhz 来源 | 小数志 导读 机器学习中的一个经典理论是:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限.也正因如此,特征工程在机器学习流程中占有着重要地位.广义的特征 ...

  2. 机器学习中的7种数据偏见

    作者 | Hengtee Lim 翻译 | Katie,责编 | 晋兆雨 出品 | AI科技大本营 头图 | 付费下载于视觉中国 机器学习中的数据偏差是一种错误,其中数据集的某些元素比其他元素具有更大 ...

  3. 独家 | 机器学习中的四种分类任务(附代码)

    作者:Jason Brownlee 翻译:陈丹 校对:杨毅远 全文约4400字,建议阅读18分钟 本文为大家介绍了机器学习中常见的四种分类任务.分别是二分类.多类别分类.多标签分类.不平衡分类,并提供 ...

  4. 【机器学习】图解机器学习中的 12 种交叉验证技术

    今天我给大家盘点下机器学习中所使用的交叉验证器都有哪些,用最直观的图解方式来帮助大家理解他们是如何工作的. 数据集说明 数据集来源于kaggle M5 Forecasting - Accuracy[1 ...

  5. 【思维导图】机器学习中的几种常见距离与相似度计算

    [全网最细致]机器学习距离与相似度计算 欧几里得距离 o如果我们将两个点分别记作(p1,p2,p3,p4-)和(q1,q2,q3,14,-),则欧几里得距离的计算公式为: ofrom math im ...

  6. 真香啊,机器学习中这3种交叉验证方法要掌握

    交叉验证是机器学习中常用的一种策略,其核心是对数据集进行划分,本文介绍sklearn中的3种交叉验证时划分数据集的方法: KFold StratifiedKFold GroupKFold 这里来举例说 ...

  7. 推荐 :机器学习中的四种分类任务(附代码)

    作者:Jason Brownlee  翻译:陈丹  校对:杨毅远 全文约4400字,建议阅读18分钟 本文为大家介绍了机器学习中常见的四种分类任务.分别是二分类.多类别分类.多标签分类.不平衡分类,并 ...

  8. 降维 (Dimensionality Reduction)

    文章目录 1. 目标一:数据压缩 2. 目标二:数据可视化 1. 目标一:数据压缩 第二种类型的无监督学习问题,称为降维.有几个不同的的原因可能想要做降维.一是数据压缩,数据压缩不仅允许压缩数据,它也 ...

  9. 深度盘点:详细介绍机器学习中的7种交叉验证方法!

    来源:机器学习社区 本文约3400字,建议阅读10分钟 本文与你分享7种最常用的交叉验证技术及其优缺点,提供了每种技术的代码片段. 在任何有监督机器学习项目的模型构建阶段,我们训练模型的目的是从标记的 ...

  10. 机器学习中如何处理非数值型的特征

    前言 传统的机器算法一般处理的是结构化数据,而结构化数据中往往包含以下几种类别: 传统的机器学习算法 SVM,LR,lightgbm,xgboost等 结构化数据类别 Categorical,类别型变 ...

最新文章

  1. keepalived(5)——lvs和arrp集成操作(1)
  2. 合泰单片机数码管c语言,合泰单片机定时器数码管显示
  3. linutx 基本配置
  4. 2021“MINIEYE杯”中国大学生算法设计超级联赛(2)I love exam(背包)
  5. 施工部署主要不包括_建筑工程施工方案及培训实例
  6. hadoop yarn如何启动聚合日志
  7. 太强了!这款轻量级中间件几行代码就搞定SpringBoot的分库分表问题
  8. 你知道项目管理有哪些分类和体系吗?
  9. Python中的角度转换功能
  10. deepin 安装最新snap商店
  11. linaCharts开发笔记:Three.js导入obj和使用中文
  12. 实在智能签约上海联通,共创美好智慧生活
  13. 读取excel标题、内容
  14. 360浏览器 | 如何从360浏览器中恢复你的密码
  15. 首例 3次IPO:前2次申请科创板、创业板均撤回、第3次改为主板、难圆其说变更保代及券商……
  16. Android:微信(一):集成、分享
  17. 埃斯顿机器人 王杰高_埃斯顿机器人总经理王杰高受邀出席2018中国机器人产业发展大会...
  18. 元宇宙+DAO=ZOO-Crypto World
  19. UsbDeviceManager.java
  20. 举个栗子~Minitab 技巧(3):用分组条形图快速对比数据

热门文章

  1. Qt+MPlayer音乐播放器开发笔记(一):ubuntu上编译MPlayer以及Demo演示
  2. 已解决(Python运行报错)SyntaxError: expression cannot contain assignment, perhaps you meant “==“?
  3. 微信重磅更新!上线4个实用功能,尝鲜体验有木有你想要的功能
  4. 机器学习:PageRank
  5. 2020年android studio ------jni常用函数总结
  6. 山东大学人机交互技术复习纲要
  7. python selenium 跳转网页_selenium关于页面跳转
  8. wps里ppt怎么换另一个的模板_现学现用极简技术|智能PPT,一个按键轻松搞定专业的制作!...
  9. linux openerp,Linux+OpenERP/ODOO 安装笔记求推荐。
  10. 惊鸿一现的永恒经典2007-05-07 09:40:18