Maison  >  Article  >  Périphériques technologiques  >  11 méthodes de base pour déterminer la normalité des distributions de données

11 méthodes de base pour déterminer la normalité des distributions de données

WBOY
WBOYavant
2023-12-14 20:50:541328parcourir

Dans le domaine de la science des données et de l'apprentissage automatique, de nombreux modèles supposent que les données sont normalement distribuées ou que les données fonctionnent mieux sous une distribution normale. Par exemple, la régression linéaire suppose que les résidus sont distribués normalement et l'analyse discriminante linéaire (LDA) est dérivée d'hypothèses telles que la distribution normale. Par conséquent, comprendre comment tester la normalité des données est crucial pour les data scientists et les praticiens de l'apprentissage automatique

11 méthodes de base pour déterminer la normalité des distributions de données

Cet article vise à présenter 11 méthodes de base pour tester la normalité des données afin d'aider les lecteurs à mieux comprendre les caractéristiques de la distribution des données et à apprendre comment appliquer des méthodes d’analyse appropriées. Cela permet de mieux gérer l'impact de la distribution des données sur les performances du modèle et de devenir plus à l'aise dans le processus d'apprentissage automatique et de modélisation des données

11 méthodes de base pour déterminer la normalité des distributions de données

Méthodes de traçage

1) est une méthode largement utilisée pour vérifier si une distribution de données. est conforme à une distribution normale. Dans le tracé QQ, les quantiles des données sont comparés aux quantiles de la distribution normale standard. Si la distribution des données est proche de la distribution normale, les points sur le tracé QQ seront proches d'une ligne droite

Pour démontrer le Tracé QQ, ce qui suit L'exemple de code génère un ensemble de données aléatoires qui suivent une distribution normale. Après avoir exécuté le code, vous pouvez voir le tracé QQ ainsi que la courbe de distribution normale correspondante. En observant la distribution des points sur le graphique, vous pouvez dans un premier temps juger si les données sont proches d'une distribution normale

import numpy as npimport scipy.stats as statsimport matplotlib.pyplot as plt# 生成一组随机数据,假设它们服从正态分布data = np.random.normal(0, 1, 1000)# 绘制QQ图stats.probplot(data, dist="norm", plot=plt)plt.title('Q-Q Plot')plt.show()

11 méthodes de base pour déterminer la normalité des distributions de données2 KDE Plot

Le tracé KDE (Kernel Density Estimation) est une méthode de visualisation de la distribution des données, ce qui peut aider Nous avons testé la normalité des données. Dans le tracé KDE, en estimant la densité des données et en les dessinant dans une courbe lisse, cela nous aide à observer la forme de distribution des données.

Pour démontrer le tracé KDE, l'exemple de code suivant génère un ensemble de données aléatoires qui obéit à un répartition normale. Après avoir exécuté le code, vous pouvez voir le tracé KDE et la courbe de distribution normale correspondante, et utiliser la visualisation pour détecter si la distribution des données est conforme à la normalité

import numpy as npimport seaborn as snsimport matplotlib.pyplot as plt# 生成随机数据np.random.seed(0)data = np.random.normal(loc=0, scale=1, size=1000)# 创建KDE Plotsns.kdeplot(data, shade=True, label='KDE Plot')# 添加正态分布曲线mu, sigma = np.mean(data), np.std(data)x = np.linspace(min(data), max(data), 100)y = (1/(sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu) / sigma) ** 2)plt.plot(x, y, 'r--', label='Normal Distribution')# 显示图表plt.legend()plt.show()

11 méthodes de base pour déterminer la normalité des distributions de données3. Vous pouvez découvrir la distribution des données. en observant la forme du Violin Plot pour déterminer initialement si les données sont proches d'une distribution normale. Si le tracé en violon prend la forme d'une courbe en cloche, les données sont probablement distribuées à peu près normalement. Si votre tracé Violin est fortement asymétrique ou présente plusieurs pics, les données risquent de ne pas être distribuées normalement.

L'exemple de code suivant est utilisé pour générer des données aléatoires suivant une distribution normale pour démontrer Violin Plot. Après avoir exécuté le code, vous pouvez voir le tracé Violin et la courbe de distribution normale correspondante. Détectez la forme de la distribution des données grâce à la visualisation pour juger dans un premier temps si les données sont proches d'une distribution normale

import numpy as npimport seaborn as snsimport matplotlib.pyplot as plt# 生成随机数据np.random.seed(0)data = np.random.normal(loc=0, scale=1, size=100)# 创建 Violin Plotsns.violinplot(data, inner="points")# 添加正态分布曲线mu, sigma = np.mean(data), np.std(data)x = np.linspace(min(data), max(data), 100)y = (1/(sigma * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - mu) / sigma) ** 2)plt.plot(x, y, 'r--', label='Normal Distribution')# 显示图表plt.legend()plt.show()

4.Histogramme

11 méthodes de base pour déterminer la normalité des distributions de donnéesL'utilisation d'un histogramme (Histogramme) pour détecter la normalité de la distribution des données est également courante méthode. L'histogramme peut nous aider à comprendre intuitivement la distribution des données et peut déterminer de manière préliminaire si les données sont proches d'une distribution normale

import numpy as npimport matplotlib.pyplot as pltimport scipy.stats as stats# 生成一组随机数据,假设它们服从正态分布data = np.random.normal(0, 1, 1000)# 绘制直方图plt.hist(data, bins=30, density=True, alpha=0.6, color='g')plt.title('Histogram of Data')plt.xlabel('Value')plt.ylabel('Frequency')# 绘制正态分布的概率密度函数xmin, xmax = plt.xlim()x = np.linspace(xmin, xmax, 100)p = stats.norm.pdf(x, np.mean(data), np.std(data))plt.plot(x, p, 'k', linewidth=2)plt.show()

Comme le montre la figure ci-dessus, si l'histogramme présente approximativement une courbe en forme de cloche et est cohérent avec la distribution normale correspondante. Si les formes de courbe sont similaires, alors les données sont susceptibles d'être distribuées normalement. Bien entendu, la visualisation n’est qu’un jugement préliminaire. Si une détection plus précise est requise, des méthodes statistiques telles que les tests de normalité peuvent être utilisées pour l’analyse.

11 méthodes de base pour déterminer la normalité des distributions de donnéesMéthodes statistiques

5. Test de Shapiro-Wilk

Le test de Shapiro-Wilk est une méthode statistique utilisée pour tester si les données sont conformes à la distribution normale, également connue sous le nom de test W. Lors de l'exécution du test de Shapiro-Wilk, nous nous concentrons généralement sur deux indicateurs principaux :

Statistique W : calculez la statistique W en fonction de la corrélation entre les données observées et la valeur attendue sous la distribution normale, et la plage de valeurs de W entre 0 et 1, lorsque W est proche de 1, cela signifie que les données observées correspondent mieux à la distribution normale.

Valeur P : La valeur P indique la probabilité d'observer cette corrélation. Si la valeur P est supérieure au niveau de signification (généralement 0,05), cela indique que les données observées sont susceptibles de provenir d'une distribution normale.
  • Par conséquent, lorsque la statistique W est proche de 1 et que la valeur P est supérieure à 0,05, nous pouvons conclure que les données observées satisfont à la distribution normale.
  • Dans le code suivant, un ensemble de données aléatoires obéissant à la distribution normale est d'abord généré, puis le test de Shapiro-Wilk est effectué pour obtenir la statistique du test et la valeur P. Sur la base de la comparaison entre la valeur P et le niveau de signification, vous pouvez déterminer si les données de l'échantillon proviennent d'une distribution normale.
from scipy import statsimport numpy as np# 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 100)# 执行Shapiro-Wilk检验stat, p = stats.shapiro(data)print('Shapiro-Wilk Statistic:', stat)print('P-value:', p)# 根据P值判断正态性alpha = 0.05if p > alpha:print('样本数据可能来自正态分布')else:print('样本数据不符合正态分布')

11 méthodes de base pour déterminer la normalité des distributions de données

6.KS检验

KS检验(Kolmogorov-Smirnov检验)是一种用于检验数据是否符合特定分布(例如正态分布)的统计方法。它通过计算观测数据与理论分布的累积分布函数(CDF)之间的最大差异来评估它们是否来自同一分布。其基本步骤如下:

  • 对两个样本数据进行排序。
  • 计算两个样本的经验累积分布函数(ECDF),即计算每个值在样本中的累积百分比。
  • 计算两个累积分布函数之间的差异,通常使用KS统计量衡量。
  • 根据样本的大小和显著性水平,使用参考表活计算p值判断两个样本是否来自同一分布。

Python中使用KS检验来检验数据是否符合正态分布时,可以使用Scipy库中的kstest函数。下面是一个简单的示例,演示了如何使用Python进行KS检验来检验数据是否符合正态分布。

from scipy import statsimport numpy as np# 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 100)# 执行KS检验statistic, p_value = stats.kstest(data, 'norm')print('KS Statistic:', statistic)print('P-value:', p_value)# 根据P值判断正态性alpha = 0.05if p_value > alpha:print('样本数据可能来自正态分布')else:print('样本数据不符合正态分布')

11 méthodes de base pour déterminer la normalité des distributions de données

7.Anderson-Darling检验

Anderson-Darling检验是一种用于检验数据是否来自特定分布(例如正态分布)的统计方法。它特别强调观察值在分布尾部的差异,因此在检测极端值的偏差方面非常有效

下面的代码使用stats.anderson函数执行Anderson-Darling检验,并获取检验统计量、临界值以及显著性水平。然后通过比较统计量和临界值,可以判断样本数据是否符合正态分布

from scipy import statsimport numpy as np# 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 100)# 执行Anderson-Darling检验result = stats.anderson(data, dist='norm')print('Anderson-Darling Statistic:', result.statistic)print('Critical Values:', result.critical_values)print('Significance Level:', result.significance_level)# 判断正态性if result.statistic <p style="text-align:center;"><img src="https://img.php.cn/upload/article/000/887/227/170255826239547.png" alt="11 méthodes de base pour déterminer la normalité des distributions de données"></p><h4>8.Lilliefors检验</h4><p>Lilliefors检验(也被称为Kolmogorov-Smirnov-Lilliefors检验)是一种用于检验数据是否符合正态分布的统计检验方法。它是Kolmogorov-Smirnov检验的一种变体,专门用于小样本情况。与K-S检验不同,Lilliefors检验不需要假定数据的分布类型,而是基于观测数据来评估是否符合正态分布</p><p>在下面的例子中,我们使用lilliefors函数进行Lilliefors检验,并获得了检验统计量和P值。通过将P值与显著性水平进行比较,我们可以判断样本数据是否符合正态分布</p><pre class="brush:php;toolbar:false">import numpy as npfrom statsmodels.stats.diagnostic import lilliefors# 生成一组服从正态分布的随机数据data = np.random.normal(0, 1, 100)# 执行Lilliefors检验statistic, p_value = lilliefors(data)print('Lilliefors Statistic:', statistic)print('P-value:', p_value)# 根据P值判断正态性alpha = 0.05if p_value > alpha:print('样本数据可能来自正态分布')else:print('样本数据不符合正态分布')

11 méthodes de base pour déterminer la normalité des distributions de données

9.距离测量Distance Measures

距离测量(Distance measures)是一种有效的测试数据正态性的方法,它提供了更直观的方式来比较观察数据分布与参考分布之间的差异。

11 méthodes de base pour déterminer la normalité des distributions de données

下面是一些常见的距离测量方法及其在测试正态性时的应用:

(1) "巴氏距离(Bhattacharyya distance)"的定义是:

  • 测量两个分布之间的重叠,通常被解释为两个分布之间的接近程度。
  • 选择与观察到的分布具有最小Bhattacharyya距离的参考分布,作为最接近的分布。

(2) 「海林格距离(Hellinger distance)」:

  • 用于衡量两个分布之间的相似度,类似于Bhattacharyya距离。
  • 与Bhattacharyya距离不同的是,Hellinger距离满足三角不等式,这使得它在一些情况下更为实用。

(3) "KL 散度(KL Divergence)":

  • 它本身并不是严格意义上的“距离度量”,但在测试正态性时可以用作衡量信息丢失的指标。
  • 选择与观察到的分布具有最小KL散度的参考分布,作为最接近的分布。

运用这些距离测量方法,我们能够比对观测到的分布与多个参考分布之间的差异,进而更好地评估数据的正态性。通过找出与观察到的分布距离最短的参考分布,我们可以更精确地判断数据是否符合正态分布

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer