不多说,直接上干货!

  比如,我这里拿主成分分析(PCA)。

1、主成分分析(PCA)的概念介绍

  主成分分析(PCA) 是一种对数据进行旋转变换的统计学方法,其本质是在线性空间中进行一个基变换,使得变换后的数据投影在一组新的“坐标轴”上的方差最大化,随后,裁剪掉变换后方差很小的“坐标轴”,剩下的新“坐标轴”即被称为 主成分(Principal Component) ,它们可以在一个较低维度的子空间中尽可能地表示原有数据的性质。主成分分析被广泛应用在各种统计学、机器学习问题中,是最常见的降维方法之一。PCA有许多具体的实现方法,可以通过计算协方差矩阵,甚至是通过上文提到的SVD分解来进行PCA变换。

2、主成分分析(PCA)的变换

  MLlib提供了两种进行PCA变换的方法,第一种与上文提到的SVD分解类似,位于org.apache.spark.mllib.linalg包下的RowMatrix中,这里,我们同样读入上文中提到的mx.txt文件,对其进行PCA变换:

  在Spark  Shell里

scala> import org.apache.spark.mllib.linalg.Vectors
scala> import org.apache.spark.mllib.linalg.distributed.RowMatrix
scala> val data = sc.textFile("mx.txt").map(_.split(" ").map(_.toDouble)).map(line => Vectors.dense(line))
data: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector] = MapPartitionsRDD[3] at map at :31
//通过RDD[Vectors]创建行矩阵
scala> val rm = new RowMatrix(data)
rm: org.apache.spark.mllib.linalg.distributed.RowMatrix = org.apache.spark.mllib.linalg.distributed.RowMatrix@4397952a
//保留前3个主成分
scala> val pc = rm.computePrincipalComponents(3)
pc: org.apache.spark.mllib.linalg.Matrix =
-0.41267731212833847  -0.3096216957951525    0.1822187433607524
0.22357946922702987   -0.08150768817940773   0.5905947537762997
-0.08813803143909382  -0.5339474873283436    -0.2258410886711858
0.07580492185074224   -0.56869017430423      -0.28981327663106565
0.4399389896865264    -0.23105821586820194   0.3185548657550075
-0.08276152212493619  0.3798283369681188     -0.4216195003799105
0.3952116027336311    -0.19598446496556066   -0.17237034054712738
0.43580231831608096   -0.023441639969444372  -0.4151661847170216
0.468703853681766     0.2288352748369381     0.04103087747663084

  可以看到,主成分矩阵是一个尺寸为(9,3)的矩阵,其中每一列代表一个主成分(新坐标轴),每一行代表原有的一个特征,而a.mat矩阵可以看成是一个有4个样本,9个特征的数据集,那么,主成分矩阵相当于把原有的9维特征空间投影到一个3维的空间中,从而达到降维的效果。可以通过矩阵乘法来完成对原矩阵的PCA变换,可以看到原有的(4,9)矩阵被变换成新的(4,3)矩阵。

scala> val projected = rm.multiply(pc)
projected: org.apache.spark.mllib.linalg.distributed.RowMatrix = org.apache.spark.mllib.linalg.distributed.RowMatrix@2a805829
scala> projected.rows.foreach(println)
[12.247647483894383,-2.725468189870252,-5.568954759405281]
[2.8762985358626505,-2.2654415718974685,1.428630138613534]
[12.284448024169402,-12.510510992280857,-0.16048149283293078]
[-1.2537294080109986,-10.15675264890709,-4.8697886049036025]

  需要注意的是,MLlib提供的PCA变换方法最多只能处理65535维的数据。

   在Scala IDEA for Eclipse或IDEA里程序编译实现

参考

http://mocom.xmu.edu.cn/article/show/58627a2faa2c3f280956e7ae/0/1

在Scala IDEA for Eclipse或IDEA里程序编译实现与在Spark Shell下的对比(其实就是那么一回事)...相关推荐

  1. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)...

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

  2. Scala IDE for Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)

    不多说,直接上干货! 这篇博客是, 是在Scala IDEA for Eclipse里maven创建scala和java代码编写环境. Scala IDEA for Eclipse里用maven来创建 ...

  3. eclipse 配置java路径_如何在eclipse的配置文件里指定jdk路径

    运行eclipse时报如下错误: 在eclipse的配置文件里指定jdk路径,只需在eclipse的配置文件里增加-vm参数即可. 打开eclipse目录下的eclipse.ini配置文件,增加-vm ...

  4. 解决eclipse中Preferences里没有Tomcat选项的问题

    #解决eclipse中Preferences里没有Tomcat选项的问题 在网上看了许多方法,都尝试了下未能解决该问题.后来看到网上有关Eclipse Tomcat Plugin插件的描述,功能就是在 ...

  5. 用eclipse开发android小程序,【转】Eclipse 开发Android小程序遇到的问题总结

    用Eclipse 开发Android小程序遇到些小问题,在一边学习的过程中,将遇到的问题就记录一下,方面挺杂的,有关于程序出错的,关于linux应用的,有eclipse设置等- 1.ERROR: Ap ...

  6. Eclipse RCP开发桌面程序

    所谓RCP,就是Rich Client Platform的缩写,即富客户平台,是Eclipse进化的产物(自3.0版以后出现),是Eclipse组织向用户提供的强大的开放性开发平台,能 够使用户方便地 ...

  7. arm调试java_使用J-Link GDB Server + Eclipse CDT进行ARM程序调试

    之前我预告过这篇文章,这段时间以来,我工作一直比较忙,而且在装修我的小破窝,生活的压力让我把业余的时间都贡献给奥山战场了,我的小牧师,杀人很慢,被杀倒是挺速度的,呵呵:想当年上学的时候,我也是副本RL ...

  8. eclipse 编辑java慢_eclipse编译慢 提高eclipse的性能

    编译慢原因有多种,其中可以通过修改eclipse.ini文件设置缓存大小,并将工作空间的validation的多项验证去除(因为这些验证也为在编译时被执行,只保留几个必须的,我就只设置了xml验证), ...

  9. 怎么在eclipse中调试java程序?

    怎么在eclipse中调试java程序?关于这个问题我已经回答过很多次,但许多朋友可能还没有理解,本篇文章再来详细为大家解答一下怎么在eclipse中调试java程序?等相关问题,希望对大家有所帮助. ...

最新文章

  1. C++的集成开发环境(IDE)
  2. MySQL命令及使用技巧以及当前时间字段默认值设置
  3. Lambda表达式的无参数无返回值的练习
  4. VGG模型构建与实现
  5. 柱状图中xy轴怎么出现_如果制砂机设备在工作中出现堵料现象该怎么办?
  6. 物联网搜集大量数据协助制定业务策略 成为银行业竞争利器
  7. 蓝桥杯 算法训练 字符串合并
  8. 十种UI设计常用字体特效,让你的设计高大上!【萧蕊冰】
  9. CSS表格及表单美化
  10. 【推荐】工业互联网资料合集
  11. tensorflow各个版本的CUDA以及Cudnn版本对应关系(重点)
  12. 统信UOS命令大全 麒麟系统命令大全 Linux常用命令操作大全(非常全非常详细) ubuntu命令大全常用操作命令大全
  13. VBA宏将带分隔符txt文件另存为xls格式
  14. Python安装Pillow时出现The headers or library files could not be found for zlib/jpeg错误
  15. NING的2021年复盘
  16. Linux命令之ssh基本用法
  17. Object Removal by Exemplar-Based Inpainting 概括(附源码)
  18. C/C++编译器gcc的windows版本MinGW-w64安装教程
  19. 商务邮箱一般用什么邮箱正式?VIP邮箱名怎么设置好?
  20. USB PD快充协议芯片

热门文章

  1. Android的setVisibility的三个参数
  2. VMware虚拟机安装RHEL6.5系统
  3. 多用户用linux会很卡顿吗,新手学Linux系统,解决Linux系统卡顿的方法
  4. 20190915:(leetcode习题)对称二叉树
  5. 年薪50万的程序员_985程序员年薪50万,看似风光,但当事人却想转行
  6. java推送到 钉钉用户_javaweb利用钉钉机器人向钉钉群推送消息(解决中文乱码)...
  7. void及void指针含义的深刻解析
  8. 要把AI建在赤道上的华为,为何用全栈全场景方案打响第一枪
  9. 海量ICLR论文点评公开,用这几个工具可以读得更轻松
  10. 虚拟机克隆后如何修复网络、主机名等问题