检查数据集或特征的正态性


介绍

从统计学角度来看,正态性是指属于正态分布或高斯分布的现象。数据集的**正态性**是指检验数据集或变量是否遵循正态分布。可以进行许多检验来检查数据集的正态性,其中最流行的是直方图法、QQ图和KS检验。

正态性检验 – 检查正态性

确定数据集或特征的正态性既有统计方法,也有图形方法。让我们来看一下其中的一些方法。

图形方法

直方图

直方图以条形图的形式显示特征的分布。每个条形代表特定值的出现频率。它用于可视化单个特征。

在上图中,我们可以看到左图比右图更接近钟形正态曲线。因此,我们可以推断左图是正态分布。

代码示例 [直方图]

import pandas as pd
df = pd.Series([11,12,13,14,15,16,17,18,8,3,5,7,9,23,30,34])
df.hist()

输出

QQ图

也称为分位数-分位数图,它更清晰地显示了与正态分布的偏差,因为它将实际分位数与理论分位数作图。

为了使数据或特征遵循正态分布,它应该更紧密地与上图中的红线对齐。在最左边的图像中,我们可以说它遵循正态分布,因为实际分位数与理论分位数一致。

代码示例 [QQ图]

import statsmodels.api as sapi
from scipy.stats import norm as nm
import matplotlib.pyplot as plt

data = nm.rvs(size=2000)
sapi.qqplot(data, line='45')
plt.show()

输出

统计方法

KS检验

KS检验代表 Kolmogorov-Smirnov 检验。它通过测量经验分布和理论分布之间的距离来定义检验统计量。在KS检验中,Kolmogorov-Smirnov是检验统计量。我们寻找原假设为真,然后它遵循Kolmogorov分布。P值可以决定是否接受或拒绝原假设。为了使数据遵循正态分布,KS统计量的值应为0。

如果检验的P值大于0.05,我们得出结论:数据遵循正态分布;如果P值小于0.05,我们认为是非正态分布。

KS检验的缺点是它需要大量的数点才能拒绝原假设。异常值会影响KS检验。

代码示例 [KS检验]

from scipy.stats import norm,kstest
datapoints = norm.rvs(size=2000)
statks, pval = kstest(datapoints, 'norm')
print("statistics (KS) : ", statks,", pvalue : " ,pval)

输出

statistics (KS) :  0.021882913017164163 , pvalue :  0.2894024815418249

Shapiro-Wilk检验

这是一个非常强大的正态性检验。它也用于其他分布。

如果Wilk检验的P值大于0.05,我们得出结论:数据遵循正态分布;如果P值小于0.05,我们认为是非正态分布。

代码示例 [Wilk检验]

from scipy.stats import shapiro,norm
datapoints = norm.rvs(size=1000)
statistic_val,pval = shapiro(datapoints)
print("statistic : ", statistic_val,",  pvalue : " ,pval)

输出

statistic :  0.9993162155151367 , pvalue :  0.9813627600669861

结论

数据集或特征的正态性是数据分析中一个非常理想的特性。有很多很好的正态性检验,包括图形方法和统计方法。正态数据集在机器学习和数据科学中被认为是标准的,因为它包含有用的信息,并且大多数自然现象的数据都表现出正态性。

更新于:2023年9月26日

307 次浏览

启动您的职业生涯

完成课程获得认证

开始
广告