MLlib-基本统计计算

来源:互联网 发布:数据挖掘入门 编辑:程序博客网 时间:2024/05/01 11:50

http://spark.apache.org/docs/1.6.3/mllib-statistics.html


总体概况:

类似R语言中的Summary。

import org.apache.spark.mllib.linalg.Vectorimport org.apache.spark.mllib.stat.{MultivariateStatisticalSummary, Statistics}val observations: RDD[Vector] = ... // an RDD of Vectors// Compute column summary statistics.val summary: MultivariateStatisticalSummary = Statistics.colStats(observations)println(summary.mean) // a dense vector containing the mean value for each columnprintln(summary.variance) // column-wise varianceprintln(summary.numNonzeros) // number of nonzeros in each column

相关性:

支持Pearson’s and Spearman’s correlation.


分层抽样:

val data = ... // an RDD[(K, V)] of any key value pairsval fractions: Map[K, Double] = ... // specify the exact fraction desired from each key// Get an exact sample from each stratumval approxSample = data.sampleByKey(withReplacement = false, fractions)val exactSample = data.sampleByKeyExact(withReplacement = false, fractions)


假设检验:

要论证一个结果是否具有统计重要性(是否靠运气出现的),假设检验是一个强有力的工具。

关于假设检验的逻辑:http://cos.name/2010/11/hypotheses-testing/

大白话:

逻辑一:将我要验证的假设作为备择假设,由于要验证我的命题比较困难,那么我可以选择找反例来拒绝原假设,即我的逆否命题。

举个例子:

我说,这个硬币不均匀,即正反面出现的几率不是0.5。那么我只要拒绝原假设就行。

现在我们将硬币投掷100次(这是取样本)。发现正面90次,反面10次。

在拒绝原假设之前,我们怕自己犯第一类错误(弃真,就是说原假设是对的,但我们放弃了它),我们将这个概率设置的小一点,比如0.05,这就是显著性水平。那么如果我们真的拒绝了原假设,就说明我只有5%的可能性犯弃真错误,也就是95%的可能性拒绝对了!!!更直白点,95%的把握说明硬币不均匀。


下面面临两个问题:

1、如何拒绝。

2、0.05有啥用?


当然,光投掷100次,我们发现并不是0.5的几率。这个现象是否真的很极端?很极小概率发生?所以我们要看看P值!!所谓P值就是P{正面> 90,反面< 10}的概率。换句话说,就是比我们发现的一个反例还要极端的反例出现的概率。如果这P值比显著性水平还要小,那么我们更加有理由拒绝原假设了。

至于P值的计算,可以利用多次投掷硬币,比如再投掷1000次,根据样本分布,计算P的值。然后与显著性水平比较。

方法二:根据显著性水平来计算样本的置信区间,然后计算第一次样本的分布t值,是否在拒绝域里面。这里也没P值什么事了。


K-S检验:


随机数据生成:

RandomRDDs provides factory methods to generate random double RDDs or vector RDDs.


0 0