Spark MLlib学习(1)--基本统计

Correlation

支持的方法有Pearson相关系数和spearman相关系数。

Pearson相关系数

皮尔逊相关系数用来衡量定距变量的线性关系,取值范围是-1到1,接近0的变量相关性小,接近1或-1的变量相关性大。

spearman相关系数

斯皮尔曼相关性系数,通常也叫斯皮尔曼秩相关系数。“秩”,可以理解成就是一种顺序或者排序,那么它就是根据原始数据的排序位置进行求解,这种表征形式就没有了求皮尔森相关性系数时那些限制。下面来看一下它的计算公式:

计算过程就是:首先对两个变量(X, Y)的数据进行排序,然后记下排序以后的位置({X}', {Y}'),({X}', {Y}')的值就称为秩次,秩次的差值就是上面公式中的d_{i},n就是变量中数据的个数,最后带入公式就可求解结果。

下面为MLlib代码,用来求向量的皮尔逊相关系数和斯皮尔曼相关性系数:

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

val data = Seq(
  //生成稀疏向量,该向量个4个值,第一个值为1.0,最后一个值为-2.0,即向量为(1.0, 0.0, 0.0,-2.0)
  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")
//Pearson相关系数
val Row(coeff1: Matrix) = Correlation.corr(df, "features").head
println(s"Pearson correlation matrix:\n $coeff1")

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

Hypothesis testing

现在支持的方法有皮尔逊的卡方检验。

“皮尔森卡方检验”可用于两种情境的变项比较:适配度检验,和独立性检验

  • “适配度检验”验证一组观察值的次数分配是否异于理论上的分配。

  • “独立性检验”验证从两个变量抽出的配对观察值组是否互相独立(例如:每次都从A国和B国各抽一个人,看他们的反应是否与国籍无关)。

下面的例子用于计算features和label的独立性:

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
//卡方分配右尾机率p,如果p值很小,说明观察值与理论值偏离程度太大,应当拒绝无效假设
println(s"pValues = ${chi.getAs[Vector](0)}")
//自由度df
println(s"degreesOfFreedom ${chi.getSeq[Int](1).mkString("[", ",", "]")}")
//统计值
println(s"statistics ${chi.getAs[Vector](2)}")

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值