哈喽,我是小白~
今儿和大家详细的聊聊概率分布中的正态分布~
之前总结了十大概率分布的内容,大家有空可以看看,这里跳转。
后面,会细化每一个概率分布的内容,大家可以关注起来~
如果需要本文PDF版本的同学,文末获取~
另外,文末有总结性的干货~
一起来看下具体细化内容~
直观解释
正态分布(Normal Distribution)是概率论和统计学中一种非常重要的连续分布,其概率密度函数呈对称的钟形曲线,故又称为“钟形曲线”。
在实际生活中,许多自然现象和人类行为的数据近似服从正态分布,例如:
人的身高:身高集中在某个平均值左右,个别极端高或极端低的人较少。 考试分数:在一次考试中,大多数人的分数会集中在一个范围内,极高或极低的分数少。 产品质量控制:生产线上产品的重量、尺寸等可能有轻微的波动,但大部分产品的质量指标集中在平均值附近。
正态分布的本质:
正态分布的本质是数据的集中趋势与对称性。数据中心附近的值出现的概率更高,而随着距离均值的增大,数据出现的概率逐渐下降。这样就形成了正态分布的钟形结构。
正态分布的主要特点:
1. 对称性:正态分布的概率密度曲线关于均值对称,均值(mean)、中位数(median)、众数(mode)相同。
2. 单峰性:曲线在均值处达到峰值,意味着数据的密集度在均值处最高。
3. 68-95-99.7法则:在正态分布中,数据分布满足如下规律:
68%的数据位于均值的±1个标准差以内。 95%的数据位于均值的±2个标准差以内。 99.7%的数据位于均值的±3个标准差以内。
这个特性说明在均值附近的数据出现概率大,而远离均值的数据出现概率小。
正态分布的形状和特征
正态分布的形状由两个参数决定:
**1. 均值 **:决定曲线的中心位置。
**2. 标准差 **:决定曲线的宽度和高度。标准差越小,曲线越瘦高;标准差越大,曲线越平缓宽阔。
图形特点细化
**均值**:均值越大,正态分布的中心位置越向右移动。 **标准差**:标准差越小,分布的集中度越高,分布曲线更“瘦高”;标准差越大,数据的离散程度增加,分布更“矮胖”。
我们可以通过绘制正态分布的概率密度函数(PDF)来直观感受这些变化。PDF表示的是在正态分布下某个具体值附近出现的概率密度。
例如,标准正态分布(即均值 ,标准差 )的曲线就是一个典型的正态分布曲线。
核心公式
正态分布的概率密度函数(Probability Density Function, PDF)定义如下:
其中:
是分布中的一个随机变量; 是均值(期望值),决定分布的中心; 是标准差,决定分布的扩展程度; 是方差,表示数据离均值的分散程度。
公式推导过程
1. 标准正态分布:
当均值为0,标准差为1时,分布称为标准正态分布(Standard Normal Distribution),其概率密度函数简化为:
该公式描述了标准正态分布曲线的形状。
2. 一般正态分布的公式推导:
对于任意均值 和标准差 ,我们可以通过平移和拉伸来得到一般正态分布的公式。
平移:如果将标准正态分布平移至均值为 ,则曲线的中心变为 。 拉伸:如果拉伸曲线使标准差为 ,曲线变得更“宽”或更“窄”,表示数据的离散程度。
通过变换后的公式:
3. 参数含义:
是归一化系数,确保分布的面积总和为1。 指数项 决定了数据集中在均值附近的趋势,数据越偏离均值,概率密度越低。
这个公式的主要作用是确保数据根据其距离均值的远近程度分布在正态曲线下,靠近均值的点概率密度大,远离均值的概率密度小。这种概率密度函数能够很好地刻画许多现实数据的分布特征。
Python实现
为了更好地理解正态分布,接下来我们将用Python生成一些符合正态分布的数据,并绘制其分布图。
数据生成和可视化
我们将生成一个均值为0,标准差为1的正态分布数据,并用直方图和曲线展示分布形状。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
palette = sns.color_palette("coolwarm", as_cmap=True) # 使用渐变色调
# 设置正态分布的均值和标准差
mu, sigma = 0, 1 # 均值为0,标准差为1
# 生成正态分布的数据
data = np.random.normal(mu, sigma, 1000)
# 绘制正态分布图
plt.figure(figsize=(12, 8))
sns.histplot(data, bins=30, kde=True, color=palette(0.6), stat="density", edgecolor="black")
# 添加标题和轴标签
plt.title("Enhanced Normal Distribution Visualization (μ=0, σ=1)", fontsize=18, fontweight='bold')
plt.xlabel("Value", fontsize=14)
plt.ylabel("Density", fontsize=14)
# 增加均值和标准差的标记线
plt.axvline(mu, color='red', linestyle='--', label=f"Mean (μ) = {mu}")
plt.axvline(mu + sigma, color='green', linestyle='--', label=f"Mean + 1σ = {mu + sigma}")
plt.axvline(mu - sigma, color='green', linestyle='--', label=f"Mean - 1σ = {mu - sigma}")
# 显示图例
plt.legend(loc="upper right", fontsize=12)
plt.show()
numpy.random.normal()
用于生成符合指定均值和标准差的正态分布数据。seaborn.histplot()
用于绘制直方图并叠加核密度估计(KDE)曲线,帮助可视化数据的分布情况。
生成的图像中,曲线呈现典型的钟形分布,且数据大部分集中在均值附近。
应用示例:机器学习中的正态分布应用
正态分布在机器学习中被广泛用于数据模拟和建模。在机器学习中,某些算法(如朴素贝叶斯分类器)假设数据分布为正态分布。下面举例展示如何使用正态分布模拟数据,并训练一个简单的机器学习模型。
示例:生成二分类正态分布数据并训练分类器
我们生成两类数据:一类数据符合均值为0、标准差为1的正态分布,另一类数据符合均值为3、标准差为1的正态分布。然后用逻辑回归模型进行分类。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from matplotlib.colors import ListedColormap
palette = sns.color_palette("coolwarm", 2) # 使用双渐变色调
# 生成两类正态分布数据
np.random.seed(0) # 设置随机种子
class1 = np.random.normal(0, 1, 500)
class2 = np.random.normal(3, 1, 500)
# 构造数据集
X = np.concatenate([class1, class2]).reshape(-1, 1)
y = np.array([0]*500 + [1]*500)
# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练逻辑回归模型
model = LogisticRegression()
model.fit(X_train, y_train)
# 预测与评估
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
# 生成分类边界可视化
x_min, x_max = X.min() - 1, X.max() + 1
x_values = np.linspace(x_min, x_max, 500).reshape(-1, 1)
y_prob = model.predict_proba(x_values)[:, 1]
# 可视化数据和分类边界
plt.figure(figsize=(12, 8))
plt.plot(x_values, y_prob, color="black", linewidth=2, label="Decision Boundary")
sns.histplot(class1, color=palette[0], bins=20, kde=True, stat="density", label="Class 0")
sns.histplot(class2, color=palette[1], bins=20, kde=True, stat="density", label="Class 1")
# 图形美化
plt.title("Binary Classification on Normal Distributed Data", fontsize=18, fontweight='bold')
plt.xlabel("Value", fontsize=14)
plt.ylabel("Density", fontsize=14)
plt.legend(loc="upper right", fontsize=12)
# 显示模型准确性
plt.text(x_min + 0.5, 0.35, f"Accuracy: {accuracy * 100:.2f}%", fontsize=14, color="black")
plt.show()
1. 数据生成:生成两类数据,分别符合不同均值的正态分布。
2. 数据集构建:将生成的数据和标签组合,并划分为训练集和测试集。
3. 模型训练与评估:使用逻辑回归模型进行训练,并在测试集上进行准确率评估。
通过这个例子,大家可以看到正态分布数据可以用于模拟二分类问题。模型在此示例中的准确性较高,展示了正态分布数据在分类问题上的应用效果。
最后