Menu
CoddyTech

正态曲线

本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 9 课,共 64 课。

身高、考试成绩、大米袋的重量:许多测量值会呈正态分布,也就是钟形曲线。一台机器生产的 500 袋大米:

500 袋大米重量的密度直方图,上方叠加一条橙色钟形曲线。虚线标出峰值处的均值 1000 g,长度为 8 g 的箭头标出标准差,也就是曲线的宽度

两个数字就能画出它:平均值决定峰值的位置,标准差决定宽度。科学计算库 SciPy 知道这个公式:

from scipy import stats

ax.hist(bags, bins=16, density=True)
xs = np.linspace(bags.min(), bags.max(), 100)
ax.plot(xs, stats.norm.pdf(xs, bags.mean(), bags.std()))

stats.norm.pdf(x, mean, std) 是曲线在 x 处的高度,x 可以是单个值,也可以是数组。它的面积为 1,就像密度直方图一样,因此两者可以显示在同一张图表上。

有些模型更适合大致呈正态分布的特征。这个图表可以检查这一点。

challenge icon

挑战

简单

螺栓的长度应为 50 mm。起始代码在 lengths 中存储了 240 个测量长度,并设置好了图表。将它们与正态曲线进行比较:

  1. 按如下格式打印它们的平均值和标准差(np.std),并四舍五入到 2 位小数。
  2. 绘制密度直方图,使用 bins=15。
  3. 在直方图上绘制拟合曲线:从最短的螺栓到最长的螺栓,取 100 个点。
  4. 显示图表。

对于另一批螺栓:

Fitted curve: mean 49.99 mm, std 0.42 mm

图表如下:

180 个螺栓长度的密度直方图,长度约为 49 到 51 mm,上方覆盖着一条平滑的钟形曲线,峰值接近 50

亲手试试

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 不要修改下面的代码。
rng = np.random.default_rng(31)
lengths = np.round(rng.normal(50, 0.4, size=240), 2)

fig, ax = plt.subplots()
ax.set_title("Bolt Lengths")
ax.set_xlabel("Length (mm)")
ax.set_ylabel("Density")

# 在下面编写你的代码。
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

机器学习统计学中的所有课

自己练习: Python 在线编译器