Spark ML Basic Statistics

相关性Correlation

用于计算两组数据之间的相关性, 当前spark.ml支持皮尔森(Pearson)相关系数和斯皮尔曼(Spearman)等级相关系数.

皮尔森相关系数受异常数据的影响比较大,比如变量中的值(变量的标注差为0)不能相同。

斯皮尔曼等级相关系数则不受限制,经常被称为非参数相关系数,包含两层含义:

1.只要在X和Y具有单调的函数关系的关系,那么X和Y就是完全Spearman相关的,这与Pearson相关性不同,后者只有在变量之间具有线性关系时才是完全相关的。

2. Spearman秩相关系数可以在不知道X和Y的联合概率密度函数时获得。

import org.apache.spark.ml.linalg.{Matrix, Vectors}
import org.apache.spark.ml.stat.Correlation
import org.apache.spark.sql.Row

val data = Seq(
  Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))),
  Vectors.dense(4.0, 5.0, 0.0, 3.0),
  Vectors.dense(6.0, 7.0, 0.0, 8.0),
  Vectors.sparse(4, Seq((0, 9.0), (3, 1.0)))
)

val df = data.map(Tuple1.apply).toDF("features")
val Row(coeff1: Matrix) = Correlation.corr(df, "features").head
println(s"Pearson correlation matrix:\n $coeff1")

val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head
println(s"Spearman correlation matrix:\n $coeff2")

详细代码:Spark 存储中的"examples/src/main/scala/org/apache/spark/examples/ml/CorrelationExample.scala"


假设测试Hypothesis testing)

用于测试结果是不是统计学上有意义的,也就是说该结果是不是“偶然”产生的。

Spark.ml支持皮尔森卡方分布(Pearson’s Chi-squared ( χ2) )测试

卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度性。较详细的解释以及例子可见这里

import org.apache.spark.ml.linalg.{Vector, Vectors}
import org.apache.spark.ml.stat.ChiSquareTest

val data = Seq(
  (0.0, Vectors.dense(0.5, 10.0)),
  (0.0, Vectors.dense(1.5, 20.0)),
  (1.0, Vectors.dense(1.5, 30.0)),
  (0.0, Vectors.dense(3.5, 30.0)),
  (0.0, Vectors.dense(3.5, 40.0)),
  (1.0, Vectors.dense(3.5, 40.0))
)

val df = data.toDF("label", "features")
val chi = ChiSquareTest.test(df, "features", "label").head
println(s"pValues = ${chi.getAs[Vector](0)}")
println(s"degreesOfFreedom ${chi.getSeq[Int](1).mkString("[", ",", "]")}")
println(s"statistics ${chi.getAs[Vector](2)}")
详细代码:spark存储中的 "examples/src/main/scala/org/apache/spark/examples/ml/ChiSquareTestExample.scala


你可能感兴趣的:(Spark ML Basic Statistics)