分享

Spark机器学习库(MLlib)之2:基础统计

xzc0202 2017-9-15 13:53:14 发表于 推荐型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 7572
问题向导:
(1)MLlib的提供了哪些相关性计算方法?
(2)假设检验是什么?

上一篇Spark机器学习库(MLlib)指南之1:简介
http://www.aboutyun.com/forum.php?mod=viewthread&tid=22712


1.基础统计

1.1.相关系数
计算两组数据之间的相关性是统计学中的一个常见操作。spark.ml灵活提供了计算数据两两相关性的方法。目前相关性方法有Pearson和Spearman。

Pearson和Spearman区别:
1.连续数据,正态数据,线性数据用person相关系数是最恰当的,当然也可以用spearman相关系数。效率没前者高
2.上述任一条件不满足,就用spearman相关系数,不能用pearson相关系数。
3.两个定序测量数据之间也用spearman相关系数,不能用pearson相关系数。
相关性计算是:输入向量数据、输出相关性矩阵.

[mw_shl_code=scala,true]import org.apache.spark.ml.linalg.{Matrix, Vectors}
import org.apache.spark.ml.stat.Correlation
import org.apache.spark.sql.Row

/*
一个向量(1.0,0.0,3.0)它有2中表示的方法
密集:[1.0,0.0,3.0]    其和一般的数组无异
稀疏:(3,[0,2],[1.0,3.0])     其表示的含义(向量大小,序号,值)   序号从0开始
*/
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("Pearson correlation matrix:\n" + coeff1.toString)

val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head
println("Spearman correlation matrix:\n" + coeff2.toString)[/mw_shl_code]

完整代码路径:"examples/src/main/scala/org/apache/spark/examples/ml/CorrelationExample.scala"
注:可以在git(git clone git://github.com/apache/spark.git)中获取,或者直接下载的spark包中也可以找到.

1.2.假设检验
假设检验是判断统计结果是否有意义的一个强有力的工具。spark.ml目前提供了Pearson卡方测试来验证独立性。
卡方检验是对每个特征和标签进行Pearson独立测试,对于每个特征值,都会通过(特征、标签)“数据对”进行卡方计算形成结果矩阵。所以标签和特征值必须明确.

详细API请参考文档: ChiSquareTest Scala docs

[mw_shl_code=scala,true]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("pValues = " + chi.getAs[Vector](0))
println("degreesOfFreedom = " + chi.getSeq[Int](1).mkString("[", ",", "]"))
println("statistics = " + chi.getAs[Vector](2))[/mw_shl_code]

完整代码路径:"examples/src/main/scala/org/apache/spark/examples/ml/ChiSquareTestExample.scala"

英文链接:http://spark.apache.org/docs/latest/ml-statistics.html


已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条