Spark(Python)中的Kolmogorov Smirnov测试不起作用?

时间:2016-05-19 23:02:04

标签: python pyspark apache-spark-mllib kolmogorov-smirnov

我正在使用Python spark-ml进行常态测试,并看到我认为是一个错误。

这是设置,我有一个规范化的数据集(范围-1,到1)。

当我进行直方图时,我可以清楚地看到数据不正常:

>>> prices_norm.histogram(10)

([-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0],
 [226, 269, 119, 95, 52, 26, 8, 2, 2, 5])

当我进行Kolmgorov-Smirnov测试时,我得到以下结果:

>>> testResults = Statistics.kolmogorovSmirnovTest(prices_norm, "norm")
>>> print testResults

Kolmogorov-Smirnov test summary:
degrees of freedom = 0 
statistic = 0.46231145770077375 
pValue = 1.742039845709087E-11 
Very strong presumption against null hypothesis: Sample follows theoretical distribution.

Kolmgorov-Smirnov检验将原假设(H0)定义为:数据遵循指定的分布http://www.itl.nist.gov/div898/handbook/eda/section3/eda35g.htm)。

在这种情况下,p值非常低,所以我们应该拒绝零假设。这是有道理的,因为它显然不正常。

那么为什么呢,它会说:

Sample follows theoretical distribution

这不是错的吗?难道不应该说样本不遵循理论分布吗?我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

这让我发疯,所以我直接看了源代码:

signtool.exe

代码正确,null假设设置为:

{
    "property": "value",
    "otherEntities" : "http://localhost:8080/myapp/api/otherEntities/1"
}

字符串消息的措辞只是重述零假设

git://git.apache.org/spark.git
spark/mllib/src/main/scala/org/apache/spark/mllib/stat/test/KolmogorovSmirnovTest.scala

可以说这个措辞令人困惑,因为它可以双向解释。但这确实是正确的。