原创文章,转载请注明: 转载自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相关系数

         详情可以参考:http://zh.wikipedia.org/wiki/%E6%96%AF%E7%9A%AE%E5%B0%94%E6%9B%BC%E7%AD%89%E7%BA%A7%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0

二、java api调用example

  详情可以参考:https://github.com/tovin-xu/mllib_example/blob/master/src/main/java/com/mllib/example/stat/CorrelationSuite.java

三、源码分析

  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 源码分析(二)-相关系数的更多相关文章

  1. spark(1.1) mllib 源码分析(一)-卡方检验

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4019131.html 在spark mllib 1.1版本中增加stat包,里面包含了一些统计相关的函数 ...

  2. spark(1.1) mllib 源码分析(三)-朴素贝叶斯

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/4042467.html 本文主要以mllib 1.1版本为基础,分析朴素贝叶斯的基本原理与源码 一.基本原 ...

  3. spark(1.1) mllib 源码分析(三)-决策树

    本文主要以mllib 1.1版本为基础,分析决策树的基本原理与源码 一.基本原理 二.源码分析 1.决策树构造 指定决策树训练数据集与策略(Strategy)通过train函数就能得到决策树模型Dec ...

  4. Fresco 源码分析(二) Fresco客户端与服务端交互(1) 解决遗留的Q1问题

    4.2 Fresco客户端与服务端的交互(一) 解决Q1问题 从这篇博客开始,我们开始讨论客户端与服务端是如何交互的,这个交互的入口,我们从Q1问题入手(博客按照这样的问题入手,是因为当时我也是从这里 ...

  5. 框架-springmvc源码分析(二)

    框架-springmvc源码分析(二) 参考: http://www.cnblogs.com/leftthen/p/5207787.html http://www.cnblogs.com/leftth ...

  6. Tomcat源码分析二:先看看Tomcat的整体架构

    Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server.Service.Conn ...

  7. 十、Spring之BeanFactory源码分析(二)

    Spring之BeanFactory源码分析(二) 前言 在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,A ...

  8. spark的存储系统--BlockManager源码分析

    spark的存储系统--BlockManager源码分析 根据之前的一系列分析,我们对spark作业从创建到调度分发,到执行,最后结果回传driver的过程有了一个大概的了解.但是在分析源码的过程中也 ...

  9. Vue源码分析(二) : Vue实例挂载

    Vue源码分析(二) : Vue实例挂载 author: @TiffanysBear 实例挂载主要是 $mount 方法的实现,在 src/platforms/web/entry-runtime-wi ...

随机推荐

  1. Unity AssetServer小笔记

    普及一下Asset Server知识: Unity的Asset Server,其实就是一个纯PostgreSQL数据库.Unity操作Asset Server,就是一个数据库客户端操作,但是Unity ...

  2. 分布式消息系统Jafka入门指南

    分布式消息系统Jafka入门指南 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.JafkaMQ简单介绍 JafkaMQ是一个分布式的公布/订阅消息系 ...

  3. Shell 传递参数(转)

    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 实例 以下实例我们向脚本传递三 ...

  4. nginx听课随记杂记

    今天听了个公开课,里面讲了异步非阻塞,说的不是很清楚,网上有个人写的很好:http://blog.csdn.net/feitianxuxue/article/details/8936802 提到了用n ...

  5. 对正在运行的mysql进行监控

    对正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态. (1)QPS(每秒Query量) QPS = Questions(or Queries) / seconds mysql &g ...

  6. C/C++ 编程计算2的100万次方(m的n次方),超长结果输出文件

    #include <iostream> #include <stdio.h> #include <stdlib.h> #include <string> ...

  7. hiberbnate 缓存策略概述

    1. 首先了解什么是缓存 这里说的缓存并不是指计算机的内存或者CPU的一二级缓存. 缓存是指为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能的一种策略.即对物理数据源的复制,存在于内 ...

  8. Ubuntu 如何切换到root账户

    root账号问题 ubuntu默认禁用了root账号,所以当年试图使用su root命令切换到root用户时,尽管你已经输入了正确的密码,终端依旧会提示你密码错误.你需要执行以下命令解除root账号的 ...

  9. gitlab8.0 一键安装 经过自己测试 发送邮件部分最难搞 国内没有说明白的

    邮件发送部分,弄了一天终于弄好啦,FQ过去查的资料,奶奶的无语 Gitlab搭建步骤 一:操作系统环境 CentOS: 6.5 –x86-64 二:安装方式 一种是自定义安装,一种是一键安装 三:自定 ...

  10. Android之常用功能代码

    透明导航栏 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().addFlags(WindowManage ...