📜  毫升 | Kolmogorov-Smirnov 检验

📅  最后修改于: 2022-05-13 01:54:43.329000             🧑  作者: Mango

毫升 | Kolmogorov-Smirnov 检验

Kolmogorov-Smirnov 测试是一种非常有效的方法来确定两个样本是否彼此显着不同。它通常用于检查随机数的一致性。均匀性是任何随机数生成器最重要的属性之一,可以使用 Kolmogorov-Smirnov 检验对其进行测试。
Kolmogorov-Smirnov 检验也可用于检验两个潜在的一维概率分布是否不同。这是确定两个样本是否彼此显着不同的一种非常有效的方法。

为了使用测试来检查随机数的均匀性,我们使用 U[0, 1] 的 CDF(累积分布函数)。

F(x)=x  for 0<=x<=1 

Empirical CDF, Sn(x)= (number of R1, R2…Rn < x) / N 随机数数组,随机数必须在 [0, 1] 范围内。

使用的假设——

H 0 (零假设):零假设假设数字均匀分布在 0-1 之间。
如果我们能够拒绝零假设,这意味着数字在 0-1 之间不是均匀分布的。未能拒绝零假设虽然并不一定意味着数字服从均匀分布。

scipy Python中的kstest函数–

参数:

Python3
from scipy.stats import kstest
import random
 
# N = int(input("Enter number of random numbers: "))
N = 5
 
actual =[]
print("Enter outcomes: ")
for i in range(N):
    # x = float(input("Outcomes of class "+str(i + 1)+": "))
    actual.append(random.random())
 
print(actual)
x = kstest(actual, "uniform")  
print(x)


Python3
from scipy.stats import kstest
import random
 
# N = int(input("Enter number of random numbers: "))
N = 10
 
actual =[]
print("Enter outcomes: ")
 
for i in range(N):
    # x = float(input("Outcomes of class "+str(i + 1)+": "))
    actual.append(random.random())
 
print(actual)
x = kstest(actual, "norm")  
print(x)


输出:


KS Test是一种非常强大的方法,可以自动区分来自不同分布的样本。 kstest函数也可用于检查给出的数据是否服从正态分布。它将观察到的正态分布的相对频率与预期的累积相对频率进行比较。 Kolmogorov-Smirnov 检验使用观察到的和预期的累积分布之间的最大绝对差。

  • 这里使用的零假设假设数字服从正态分布。
  • 该函数的函数保持完全相同。它再次返回统计数据和 p 值。如果 p 值 < alpha,我们拒绝 Null 假设。

Python3

from scipy.stats import kstest
import random
 
# N = int(input("Enter number of random numbers: "))
N = 10
 
actual =[]
print("Enter outcomes: ")
 
for i in range(N):
    # x = float(input("Outcomes of class "+str(i + 1)+": "))
    actual.append(random.random())
 
print(actual)
x = kstest(actual, "norm")  
print(x)

输出: