相关性Correlations 皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)

简介: 相关性Correlations

相关性Correlations


  • Correlations,相关度量,目前Spark支持两种相关性系数:皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)。相关系数是用以反映变量之间相关关系密切程度的统计指标。简单的来说就是相关系数绝对值越大(值越接近1或者-1), 当取值为0表示不相关,取值为(0~-1]表示负相关,取值为(0, 1]表示正相关。


  • Pearson相关系数表达的是两个数值变量的线性相关性, 它一般适用于正态分布。其取值范围是[-1, 1], 当取值为0表示不相关, 取值为[-1~0)表示负相关,取值为(0, 1]表示正相关。

公式


3.png

  • Spearman相关系数也用来表达两个变量的相关性,但是它没有Pearson相关系数对变量的分布要求那么严格, 另外Spearman相关系数可以更好地用于测度变量的排序关系。其计算公式为:

公式


6.png

1.根据输入类型的不同,输出的结果也产生相应的变化。如果输入的是两个RDD[Double],则输出的是一个double类型的结果;

如果输入的是一个RDD[Vector],则对应的输出的是一个相关系数矩阵。具体操作如下所示:


2.接下来我们先从数据集中获取两个series,这两个series要求必须数量相同,这里我们取莺尾花的前两个属性:


3.然后,我们调用Statistics包中的corr()函数来获取相关性,这里用的是"pearson" 皮尔逊,当然根据不同需要也可以选择"spearman" 斯皮尔曼等级:


4.上面介绍了求两个series的相关性,接下来介绍一下如何求 [相关系数矩阵]。

方法是类似的,首先还是先从数据集中获取一个RDD[Vector],为了进行对照,我们同样选择前两个属性:


5.我们调用Statistics包中的corr()函数,这里也同样可以选择"pearson"或者"spearman",得到相关系数矩阵:默认使用 皮尔逊

package basicstatistics
import org.apache.log4j.{Level, Logger}
import org.apache.spark.SparkContext
import org.apache.spark.mllib.linalg
import org.apache.spark.mllib.linalg.{Matrix, Vectors}
import org.apache.spark.mllib.stat.Statistics
import org.apache.spark.rdd.RDD
/**
 *
 *    相关性Correlations
 *
 *      Correlations,相关度量,目前Spark支持两种相关性系数:皮尔逊相关系数(pearson)和斯皮尔曼等级相关系数(spearman)。
 *  相关系数是用以反映变量之间相关关系密切程度的统计指标。简单的来说就是相关系数绝对值越大(值越接近1或者-1),
 *  当取值为0表示不相关,取值为(0~-1]表示负相关,取值为(0, 1]表示正相关。
 *      Pearson相关系数表达的是两个数值变量的线性相关性, 它一般适用于正态分布。其取值范围是[-1, 1], 当取值为0表示不相关,
 *  取值为[-1~0)表示负相关,取值为(0, 1]表示正相关。
 *
 *  公式  http://mocom.xmu.edu.cn/blog/58482eb8e083c990247075aa.png
 *
 *      Spearman相关系数也用来表达两个变量的相关性,但是它没有Pearson相关系数对变量的分布要求那么严格,
 *  另外Spearman相关系数可以更好地用于测度变量的排序关系。其计算公式为:
 *
 *  公式  http://mocom.xmu.edu.cn/blog/58482eb3e083c990247075a9.png
 */
object CorrelationsDemo {
  def main(args: Array[String]): Unit = {
    Logger.getLogger("org").setLevel(Level.ERROR)
    val sc = new SparkContext("local[*]", "")
    /**
     *    根据输入类型的不同,输出的结果也产生相应的变化。如果输入的是两个RDD[Double],则输出的是一个double类型的结果;
     * 如果输入的是一个RDD[Vector],则对应的输出的是一个相关系数矩阵。具体操作如下所示:
     */
    // 接下来我们先从数据集中获取两个series,这两个series要求必须数量相同,这里我们取莺尾花的前两个属性:
    val seriesX: RDD[Double] = sc.textFile("/home/rjxy/IdeaProjects/spark/spark_mllib_course/src/main/resources/data/iris.data")
      .map(_.split(",")).map(p => p(0).toDouble)
    val seriesY: RDD[Double] = sc.textFile("/home/rjxy/IdeaProjects/spark/spark_mllib_course/src/main/resources/data/iris.data")
      .map(_.split(",")).map(p => p(1).toDouble)
    // 然后,我们调用Statistics包中的corr()函数来获取相关性,这里用的是"pearson" 皮尔逊,当然根据不同需要也可以选择"spearman" 斯皮尔曼等级:
    val seriesCorrelation: Double = Statistics.corr(seriesX, seriesY, "pearson")
    println(seriesCorrelation+" double")
    //-0.1594565184858299 spearman
    //-0.10936924995064387 pearson 说明数据集的前两列,即花萼长度和花萼宽度具有微小的  负相关性  。
    //  上面介绍了求两个series的相关性,接下来介绍一下如何求  [相关系数矩阵]。
    // 方法是类似的,首先还是先从数据集中获取一个RDD[Vector],为了进行对照,我们同样选择前两个属性:
    val data: RDD[linalg.Vector] = sc.textFile("/home/rjxy/IdeaProjects/spark/spark_mllib_course/src/main/resources/data/iris.data")
      .map(_.split(",")).map(p => Vectors.dense(p(0).toDouble, p(1).toDouble))
    //我们调用Statistics包中的corr()函数,这里也同样可以选择"pearson"或者"spearman",得到相关系数矩阵:
    //默认使用 皮尔逊
    val dataCorrelation: Matrix = Statistics.corr(data)
    println(dataCorrelation+"矩阵")
  }
}


目录
相关文章
|
5月前
|
机器学习/深度学习 监控 数据挖掘
数据并非都是正态分布:三种常见的统计分布及其应用
这篇文章除了介绍线性模型在减肥app预测中的不切实际性,还探讨了不同统计分布在体重管理和数据分析中的应用。文章提到了正态分布和泊松分布,前者常用于描述围绕平均值对称分布的连续数据,如体重;后者适合计数数据,如体重变化次数。正态分布以其钟形曲线闻名,泊松分布则描述独立事件的数量。文章还简要介绍了卡方分布在检验分类变量关系时的作用。最后,文章指出了在线性回归中假设数据正态分布的原因,包括便于统计推断和最小化估计误差。
449 5
|
数据可视化 Python
概率学中的随机变量与分布
概率学中的随机变量与分布
概率学中的随机变量与分布
|
机器学习/深度学习 数据挖掘
09 协方差与相关系数
09 协方差与相关系数
65 0
(二)随机变量的数字特征:探索概率分布的关键指标
(二)随机变量的数字特征:探索概率分布的关键指标
(一)探索随机变量及其分布:概率世界的魔法
(一)探索随机变量及其分布:概率世界的魔法
|
Python
相关系数 r 和决定系数 R2 的那些事
有人说相关系数(correlation coefficient, r)和决定系数(coefficient of determination, R2,读作R-Squared)都是评价两个变量相关性的指标,且相关系数的平方就是决定系数?这种说法对不对呢?请听下文分解!
1090 0
R-ggpmisc|回归曲线添加回归方程,R2,方差表,香不香?
R-ggpmisc|回归曲线添加回归方程,R2,方差表,香不香?
106 0
|
机器学习/深度学习 算法
方差分析
方差分析
105 0
协方差与相关系数(标准协方差)
协方差与相关系数(标准协方差)
多变的夏普率二---正态分布约束下的样本的标准差是无偏估计?
多变的夏普率二---正态分布约束下的样本的标准差是无偏估计?
78 0
多变的夏普率二---正态分布约束下的样本的标准差是无偏估计?