Menu
CoddyTech

Нормальная кривая

Часть раздела Статистика для машинного обучения путешествия по Machine Learning на Coddy. Урок 9 из 64.

Рост, результаты экзаменов, вес мешков с рисом: множество измерений складываются в нормальное распределение — колоколообразную кривую. 500 мешков с одной машины:

Гистограмма плотности для веса 500 мешков риса с наложенной оранжевой колоколообразной кривой. Пунктирная линия отмечает среднее значение — 1000 г — в пике, а стрелка длиной 8 г показывает стандартное отклонение, то есть ширину

Его задают два числа: среднее определяет положение пика, а стандартное отклонение — ширину. 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, заданной одним значением или массивом. Площадь под ней равна 1, как и у гистограммы плотности, поэтому их можно отображать на одном графике.

Некоторые модели предпочитают признаки с приблизительно нормальным распределением. Эта диаграмма проверяет это.

challenge icon

Задание

Легко

Длина болтов должна составлять 50 мм. В стартовом коде хранятся 240 измеренных значений длины в lengths и настраивается график. Сравните их с нормальной кривой:

  1. Выведите среднее значение и стандартное отклонение (np.std), округлённые до 2 знаков после запятой, как показано ниже.
  2. Постройте гистограмму плотности с bins=15.
  3. Нанесите на неё подобранную кривую: 100 точек от самого короткого до самого длинного болта.
  4. Покажите график.

Для другой партии:

Fitted curve: mean 49.99 mm, std 0.42 mm

и график:

Гистограмма плотности 180 болтов длиной примерно от 49 до 51 мм с плавной колоколообразной кривой, достигающей пика около 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