在Scala IDEA for Eclipse或IDEA里程序编译实现与在Spark Shell下的对比(其实就是那么一回事)...
不多说,直接上干货!
比如,我这里拿主成分分析(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下的对比(其实就是那么一回事)...相关推荐
- spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)...
不多说,直接上干货! 前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...
- Scala IDE for Eclipse的下载、安装和WordCount的初步使用(本地模式和集群模式)
不多说,直接上干货! 这篇博客是, 是在Scala IDEA for Eclipse里maven创建scala和java代码编写环境. Scala IDEA for Eclipse里用maven来创建 ...
- eclipse 配置java路径_如何在eclipse的配置文件里指定jdk路径
运行eclipse时报如下错误: 在eclipse的配置文件里指定jdk路径,只需在eclipse的配置文件里增加-vm参数即可. 打开eclipse目录下的eclipse.ini配置文件,增加-vm ...
- 解决eclipse中Preferences里没有Tomcat选项的问题
#解决eclipse中Preferences里没有Tomcat选项的问题 在网上看了许多方法,都尝试了下未能解决该问题.后来看到网上有关Eclipse Tomcat Plugin插件的描述,功能就是在 ...
- 用eclipse开发android小程序,【转】Eclipse 开发Android小程序遇到的问题总结
用Eclipse 开发Android小程序遇到些小问题,在一边学习的过程中,将遇到的问题就记录一下,方面挺杂的,有关于程序出错的,关于linux应用的,有eclipse设置等- 1.ERROR: Ap ...
- Eclipse RCP开发桌面程序
所谓RCP,就是Rich Client Platform的缩写,即富客户平台,是Eclipse进化的产物(自3.0版以后出现),是Eclipse组织向用户提供的强大的开放性开发平台,能 够使用户方便地 ...
- arm调试java_使用J-Link GDB Server + Eclipse CDT进行ARM程序调试
之前我预告过这篇文章,这段时间以来,我工作一直比较忙,而且在装修我的小破窝,生活的压力让我把业余的时间都贡献给奥山战场了,我的小牧师,杀人很慢,被杀倒是挺速度的,呵呵:想当年上学的时候,我也是副本RL ...
- eclipse 编辑java慢_eclipse编译慢 提高eclipse的性能
编译慢原因有多种,其中可以通过修改eclipse.ini文件设置缓存大小,并将工作空间的validation的多项验证去除(因为这些验证也为在编译时被执行,只保留几个必须的,我就只设置了xml验证), ...
- 怎么在eclipse中调试java程序?
怎么在eclipse中调试java程序?关于这个问题我已经回答过很多次,但许多朋友可能还没有理解,本篇文章再来详细为大家解答一下怎么在eclipse中调试java程序?等相关问题,希望对大家有所帮助. ...
最新文章
- C++的集成开发环境(IDE)
- MySQL命令及使用技巧以及当前时间字段默认值设置
- Lambda表达式的无参数无返回值的练习
- VGG模型构建与实现
- 柱状图中xy轴怎么出现_如果制砂机设备在工作中出现堵料现象该怎么办?
- 物联网搜集大量数据协助制定业务策略 成为银行业竞争利器
- 蓝桥杯 算法训练 字符串合并
- 十种UI设计常用字体特效,让你的设计高大上!【萧蕊冰】
- CSS表格及表单美化
- 【推荐】工业互联网资料合集
- tensorflow各个版本的CUDA以及Cudnn版本对应关系(重点)
- 统信UOS命令大全 麒麟系统命令大全 Linux常用命令操作大全(非常全非常详细) ubuntu命令大全常用操作命令大全
- VBA宏将带分隔符txt文件另存为xls格式
- Python安装Pillow时出现The headers or library files could not be found for zlib/jpeg错误
- NING的2021年复盘
- Linux命令之ssh基本用法
- Object Removal by Exemplar-Based Inpainting 概括(附源码)
- C/C++编译器gcc的windows版本MinGW-w64安装教程
- 商务邮箱一般用什么邮箱正式?VIP邮箱名怎么设置好?
- USB PD快充协议芯片
热门文章
- Android的setVisibility的三个参数
- VMware虚拟机安装RHEL6.5系统
- 多用户用linux会很卡顿吗,新手学Linux系统,解决Linux系统卡顿的方法
- 20190915:(leetcode习题)对称二叉树
- 年薪50万的程序员_985程序员年薪50万,看似风光,但当事人却想转行
- java推送到 钉钉用户_javaweb利用钉钉机器人向钉钉群推送消息(解决中文乱码)...
- void及void指针含义的深刻解析
- 要把AI建在赤道上的华为,为何用全栈全场景方案打响第一枪
- 海量ICLR论文点评公开,用这几个工具可以读得更轻松
- 虚拟机克隆后如何修复网络、主机名等问题