在数据分析和统计学中,概率分布是用来描述随机变量取值可能性的函数。本文将探讨概率分布的基本概念,并介绍如何通过Q-Q图(Quantile-Quantile plots)来识别数据集是否遵循特定的分布类型,如正态分布、均匀分布和指数分布。
概率分布是数据分布的图形表示,其中x轴表示样本的可能值,y轴表示发生的概率。常见的分布类型包括高斯分布(正态分布)、均匀分布、指数分布等。本文将重点讨论这三种分布,并展示如何通过Q-Q图来识别它们。
正态分布,也称为高斯分布或钟形曲线,是最常用的分布之一。它在中间达到峰值,并向两端递减。正态分布在许多算法中都是核心,因此将详细讨论。在线性回归和逻辑回归等机器学习算法中,如果数值特征和目标变量遵循高斯分布或均匀分布,算法表现会更好。
均匀分布是一种概率分布,其中x值发生的概率是恒定的。例如,掷骰子时,每个数字出现的概率都是均匀的。
指数分布描述的是事件以恒定的速率连续且独立地发生。它常用于测量事件发生的预期时间。
概率分布对于数据分析和决策至关重要。某些机器学习模型在特定的分布假设下表现最佳。了解正在处理的分布类型可以帮助选择最佳的模型。因此,理解特征变量的分布类型是构建健壮机器学习算法的关键。
Q-Q图的强大之处在于它们能够将任何分布以视觉方式总结。Q-Q图非常有用,可以帮助确定:
在Q-Q图中,将理论分位数值与样本分位数值进行对比。分位数是通过排序数据获得的,它决定了分布中有多少值高于或低于某个特定限制。如果比较的数据集是相同类型的分布,将得到一条大致的直线。
以下是用于演示的库列表:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm
import scipy.stats as stats
NumPy用于创建正态、均匀、指数分布的数据;Matplotlib和Seaborn用于可视化各种分布;Statsmodels.api用于Q-Q图;SciPy.stats用于统计函数。
np_normal = pd.Series(np.random.normal(0, 1, 200))
sm.qqplot(np_normal, line='45', fit=True, dist=stats.norm)
如果数据集分布相似,将得到一条直线。由于正在将数据与正态分布的理论分位数进行对比,几乎得到了一条直线。
np_uniform = pd.Series(np.random.uniform(-5, 5, 200))
sm.qqplot(np_uniform, line='45', fit=True, dist=stats.norm)
在上述Q-Q图中,由于数据集具有均匀分布,左右尾部都很小,极端值在上图中接近中心。在正态分布中,这些理论极端值将超出2和-2个标准差,因此Q-Q图呈现S形。
如果将指数分布的变量与理论正态分布进行对比,图表将如下所示。代码可以在GitHub仓库中找到。
sm.qqplot(np_exp, fit=True, line='45', dist=stats.norm)
Q-Q图和数据的偏斜度
from scipy.stats import skewnorm
skewness = -5
random = skewnorm.rvs(a=skewness, loc=1000, size=50000)
random = random - min(random)
random = random / max(random)
random = random * 50000
random = pd.Series(random)
sm.qqplot(random, fit=True, line='45')