程序员的自我修养
Home » Apache Spark, 概率论与数理统计 » Spark 1.1.0 Basic Statistics(下)

Spark 1.1.0 Basic Statistics(下)

2条评论5,277次浏览

Hypothesis testing

Hypothesis testing,假设检验。Spark目前支持皮尔森卡方检测(Pearson’s chi-squared tests),包括适配度检定和独立性检定。

皮尔森卡方检测

皮尔森卡方检测是最著名的卡方检测方法之一,一般提到卡方检测时若无特殊说明则代表使用的是皮尔森卡方检测。皮尔森卡方检测可以用来进行适配度检测独立性检测

适配度检测

适配度检测,Goodness of Fit test,验证一组观察值的次数分配是否异于理论上的分配。\(H_0\) 假设(虚无假设,null hypothesis)为一个样本中已发生事件的次数分配会服从某个特定的理论分配。通常情况下这个特定的理论分配指的是均匀分配,目前Spark默认的是均匀分配。

独立性检测

独立性检测,independence test,验证从两个变量抽出的配对观察值组是否互相独立。其虚无假设是:两个变量呈统计独立性。

检测三个步骤

  1. 计算卡方检定的统计值“ \(\chi^2\) ”:把每一个观察值和理论值的差做平方后、除以理论值、再加总
  2. 计算 \(\chi^2\) 统计值的自由度“df”
  3. 依据研究者设定的置信水平,查出自由度为df的卡方分配临界值,比较它与第1步骤得出的 \(\chi^2\) 统计值,推论能否拒绝虚无假设

适配度检测示例

场景

将五角星的5个角分别标记为1,2,3,4,5。现在旋转若干次五角星,记录每个角指向自己的次数。

第一个的结果为(1,7,2,3,18),第二个五角星的结果为(7,8,6,7,9)。现做出虚无假设:五角星的每个角指向自己的概率是相同的。

代码示例

运行结果

计算过程

对于1.0,7.0,2.0,3.0,18.0\(E_i=6.2\)

  1. \(\chi^2=\sum_{i=1}^n{(O_i-E_i)^2\over E_i}={(1-6.2)^2+(7-6.2)^2+(2-6.2)^2+(3-6.2)^2+(18-6.2)^2\over 6.2}=31.419354839\)
  2. \(df=m-1=5-1=4\)
  3. p-value可以通过查表得到,p-value<<0.001

解读

这里有5个维度的数据,自由度为4。根据均匀分布,每个维度出现的概率应该是1/5=0.2。而根据测试数据来看,这5个值出现的次数是1,7,2,3,18,显然是不符合概率都是0.2的。在一次实验中出现这样的分布的可能性即为p-value的值(2.5138644141226737E-6 ),这在一次实验中是不可能出现了,若出现了我们则有足够的理由认为假设是不成立的。所以拒绝了虚无假设(observed follows the same distribution as expected),即测试数据不满足均匀分布(这个五角星可能由于质量分布的原因导致这样的结果)。而另一组数据(7,8,6,7,9)则更符合等概率的出现,所以接受虚无假设。

独立性检测示例

场景

抽样100个人,分别记录这100个人的性别和是否是左撇子。如下表所示:

总计
43 44 87
9 4 13
总计 52 48 100

现做出虚无假设:性别与惯用手是独立事件。

代码示例

运行结果

计算过程

其中r为行数,c为列数。

  1. \(E_{i,j}={(\sum_{n=1}^c O_{i,n})(\sum_{m=1}^r O_{m,j})\over N}\) ,如 \(E_{1,1}=(43+44)*(43+9)/100=45.24\)
  2. \(\chi^2=\sum_{i=1}^r\sum_{j=1}^c{(O_{i,j}-E_{i,j})^2\over E_{i,j}}={{(43-45.24)^2\over 45.24}+{(44-41.76)^2\over 41.76}+{(9-6.76)^2\over 6.76}+{(4-6.24)^2\over 6.24}}=1.7774150400145103\)
  3. \(df=(r-1)(c-1)=(2-1)*(2-1)=1\)
  4. p-value可以通过查表得到,0.1<p-value<0.2

解读

由于p-value>0.05,所以无法拒绝虚无假设,即无法拒绝性别变量与惯用手变量互相独立的假设。

Random data generation

Random data generation,用于随机数的生成。RandomRDDs包下现支持正态分布、泊松分布和均匀分布三种分布方式。

示例程序

均匀分布

概率密度函数

\(f(x)=\begin{equation}\begin{cases}{1\over{b-a}}, a\le x\le b\\0, other\end{cases}\end{equation}\)
800px-Uniform_Distribution_PDF_SVG.svg

累积分布函数

\(F(x)=\begin{equation}\begin{cases}{0, x\lt a}\\{{x-a}\over{b-a}}, a\le x\lt b\\1, x\ge b\end{cases}\end{equation}\)
800px-Uniform_cdf.svg

期望值

\(E(x)={{a+b}\over 2}\)

方差

\(Var(x)={(b-a)^2\over 12}\)

正态分布

概率密度函数

\(f(x)={1\over {\sigma\sqrt{2\pi}}}e^{-{(x-\mu)^2}\over{2\sigma^2}}\)
720px-Normal_Distribution_PDF.svg

累积分布函数

\(F(x)={1\over 2}(1+erf{x-\mu\over{\sigma\sqrt 2}})\)
Normal_Distribution_CDF.svg

期望值

\(E(x)={\mu}\)

方差

\(Var(x)={\sigma^2}\)

泊松分布

概率质量函數

\(P(X=k)={e^{-k}\lambda^k\over{k!}}\)
360px-Poisson_pmf.svg

累积分布函数

\(F(X=k)={\Gamma(k+1,k)\over {k!}}\)
360px-Poisson_cdf.svg

期望值

\(E(x)={\lambda}\)

方差

\(Var(x)={\lambda}\)

参考文献

(转载本站文章请注明作者和出处 程序员的自我修养 – SelfUp.cn ,请勿用于任何商业用途)
2条评论
  1. ashley说道:

    这个是MLlib跑的么 MLlib是scala写的么。。

发表评论


profile
  • 文章总数:79篇
  • 评论总数:331条
  • 分类总数:31个
  • 标签总数:44个
  • 运行时间:1072天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论
  • 增达网: 受教了!呵呵!
  • Anonymous: :!: :smile: :oops: :grin: :eek: :shock:
  • 27: :razz: dsa会报错,rsa不会
  • Anonymous: 看错了 忽略我
  • Anonymous: UserSideCF这个类在哪里
  • 晴子: 在主节点初始化CM5数据库的时候报错误:Verifying that we can write to /opt/cm-5.9.0/etc/cloudera-scm -server log4j:ERROR Could not...
  • zhangnew: 就4题 :?:
  • linxh: “ 但要是遇到预先并不知道数组的长度而又需要获取正确的(或者称之 为原始的)split长度时,该如何处理呢。。? ” 印象中可以split函数参数传-1?
  • linxh: 班门弄斧一下: ssh host cmd 和直接ssh上后cmd结果不一样是因为ssh直接运行远程命令 是非交互非登录模式与ssh上去得到一个登录交互式Shell二 者加载的环境变量不一样。
  • 匿名: 其实文本分类和数字分类是一样的,只是文本分类需要多一个步骤, 就是计算它的tf-idf值将其转换为double类型
  • yurnom: 可能苹果最近又改变了返回值吧,最近没做测试了。 BadDeviceToken一般测试环境和正式环境弄错的情况 下会出现。
  • Anonymous: :razz: 博主,良心贴啊, 最近也在弄apns推送。 有个问题想请教你一下啊。 你博客中写的 Unregistered 错误,有准确的说明吗, 我看你博客中写的:...
  • 一波清泉: 回复邮箱: 1004161699@qq.com 多谢
  • Anonymous: 17/02/09 01:15:02 WARN Utils: Service ‘SparkUI’ could not bind on port 4040. Attempting port...
  • pacificLee: :twisted:
  • 小码: 为什么没有后面的呢,只有前10个
  • Anonymous: :lol:
  • Anonymous: :razz: 楼主是属于会聊天的。 我想问,sqoop发了几个版本了,应该没这些问题了吧。
  • Anonymous: Config.kafkaConfig.kafkaGroupI d 这个是指自己配置的group id 还是从 import org.apache.kafka.common.config .Config 这个类...
  • Anonymous: ZkUtils.getPartitionsForTopics (zkClient, Config.kafkaConfig.topic) 那个方法是在 spark-streaming_2.10 中 kafka...