spark(1.1) mllib 源码分析(二)-相关系数
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4024733.html
在spark mllib 1.1版本中增加stat包,里面包含了一些统计相关的函数,本文主要分析其中的相关系数计算的原理与实现:
一、基本原理
在stat包中实现了皮尔逊(Pearson)与斯皮尔曼(Spearman)两类相关系数的计算
(1)Pearson: (x,y)协方差/[(x标准方差)*(y标准方差)]
-
- 详情可以参考:http://zh.wikipedia.org/wiki/%E7%9A%AE%E5%B0%94%E9%80%8A%E7%A7%AF%E7%9F%A9%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0
- 协方差:
- 方差:
- 标准方差:
- 协方差与方差关系:
- 协方差矩阵:
- 因此,pearson相关系数的关键就是计算协方差矩阵即可
- (2)Spearman :等级变量之间的皮尔逊相关系数。将向量x、y根据值大小排序,然后根据排序后的序号计算Pearson相关系数
二、java api调用example
三、源码分析
1、相关系数计算接口
主要包含两类接口:(1)计算x,y两个向量相关系数 ,实际也会调用(2)的实现方法
(2)计算矩阵相关系数,会计算矩阵所有列向量之间的相关系数
2、Pearson相关系数实现
调用了computeCorrelationMatrix实现方法
在mllib的RowMatrix类中,实现了一些矩阵运算操作。computeCovariance函数就是求协方差矩阵
先调用了treeAggregate方法计算矩阵M的行数m与每列的和向量mean
computeGramianMatrix函数计算格拉姆矩阵,就是对矩阵M进行M^T *M的操作,最后根据GramianMatrix即可得到协方差矩阵
调用computeCorrelationMatrixFromCovariance函数,利用协方差与方差的关系计算出标准方差,
最后协方差/标准方差即可得出pearson相关系数
3、Spearman相关系数实现
调用computeCorrelationMatrix函数来计算Spearman相关系数
首先给矩阵X分配行号uid,列号columnIndex,并根据列号、列值排序
这段代码的功能是先调用zipWithIndex分配位置排名id,如果在一列中存在相同值,则需要用相同值的平均位置排名来当作它的实际位置排名,否则就用它的位置排名
最后,根据行号uid转化成DenseVector,调用pearson相关系数函数计算
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4024733.html
spark(1.1) mllib 源码分析(二)-相关系数的更多相关文章
- spark(1.1) mllib 源码分析(一)-卡方检验
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4019131.html 在spark mllib 1.1版本中增加stat包,里面包含了一些统计相关的函数 ...
- spark(1.1) mllib 源码分析(三)-朴素贝叶斯
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原 ...
- spark(1.1) mllib 源码分析(三)-决策树
本文主要以mllib 1.1版本为基础,分析决策树的基本原理与源码 一.基本原理 二.源码分析 1.决策树构造 指定决策树训练数据集与策略(Strategy)通过train函数就能得到决策树模型Dec ...
- Fresco 源码分析(二) Fresco客户端与服务端交互(1) 解决遗留的Q1问题
4.2 Fresco客户端与服务端的交互(一) 解决Q1问题 从这篇博客开始,我们开始讨论客户端与服务端是如何交互的,这个交互的入口,我们从Q1问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...
- 框架-springmvc源码分析(二)
框架-springmvc源码分析(二) 参考: http://www.cnblogs.com/leftthen/p/5207787.html http://www.cnblogs.com/leftth ...
- Tomcat源码分析二:先看看Tomcat的整体架构
Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server.Service.Conn ...
- 十、Spring之BeanFactory源码分析(二)
Spring之BeanFactory源码分析(二) 前言 在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,A ...
- spark的存储系统--BlockManager源码分析
spark的存储系统--BlockManager源码分析 根据之前的一系列分析,我们对spark作业从创建到调度分发,到执行,最后结果回传driver的过程有了一个大概的了解.但是在分析源码的过程中也 ...
- Vue源码分析(二) : Vue实例挂载
Vue源码分析(二) : Vue实例挂载 author: @TiffanysBear 实例挂载主要是 $mount 方法的实现,在 src/platforms/web/entry-runtime-wi ...
随机推荐
- jsp实现仿QQ空间新建多个相冊名称,向相冊中加入照片
工具:Eclipse,Oracle,smartupload.jar.语言:jsp,Java:数据存储:Oracle. 实现功能介绍: 主要是新建相冊,能够建多个相冊,在相冊中加入多张照片,删除照片,删 ...
- 复制VirtualBox中的虚拟机
假设简单的复制虚拟机是行不通的.复制过程须要一个小技巧,复制出来的VDI文件无法在虚拟介质管理器中注冊.由于每一个VDI文件都有一个唯一的uuid.而VirtualBox不同意注冊反复的uuid. 为 ...
- 为LoadRunner写一个lr_save_float函数
LoadRunner中有lr_save_int() 和lr_save_string() 函数,但是没有保存浮点数到变量的lr_save_float函数.<lr_save_float() func ...
- 操作系统CPU调度知识点
1.进程基本概念:进程是程序的一次运行. 是系统进程资源分配和调度的基本单位. 2.进程三态:运行状态.就绪状态.堵塞状态.三态转换规则,就绪状态的进程因为调度进程运行状态,运行状态因为时间片用完而进 ...
- 【Datastage】函数大全
一. 类型转换函数 类型转换函数用于更改参数的类型. 以下函数位于表达式编辑器的"类型转换"类别中.方括号表示参数是可选的.缺省日期格式为 %yyyy-%mm-%dd. 以下示例按 ...
- hibernate 1 + N 问题解决
1+N就是在hibernate中第一次查一个所需要的表的内容,他会把别的相关表的内容也查询一遍. 解决办法有三种: 1,设置LAZY. 2,借鉴createCriteria的查询语句,from T ...
- angularJS 第一天 使用模型与控制器绑定数据
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...
- 英文版windows乱码问题(win7/8/10)
- Java分布式 一些概念理解
转至 java那些事 2017-02-09 有些朋友工作一年了觉得该深入一下子了,所以想深入学习一下以提升自己的专业技能,想问一下如何入门Java分布式应用,学习过程大致是怎么样的,涉及到那些知识, ...
- 点滴积累【JS】---JS小功能(JS实现多物体缓冲运动)
效果: 思路: 利用setInterval计时器进行运动,offsetWidth实现宽度的变动,在用onmouseover将终点和所选中的DIV放入参数再进行缓冲运动. 代码: <head ru ...