Menu
CoddyTech

Дисперсия и стандартное отклонение

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

.std() — это типичное расстояние от среднего значения. Здесь оно рассчитано вручную для пяти порций эспрессо:

Пять порций эспрессо в виде точек вокруг оранжевой линии среднего значения на отметке 26 секунд. Серая черта соединяет каждую точку с линией и показывает отклонение: -2, +1, -1, +4 и -2

Каждый промежуток до среднего — это отклонение. Они взаимно компенсируются и дают 0, поэтому возведите их в квадрат, а затем найдите среднее: дисперсию.

shots = np.array([24, 27, 25, 30, 24])
deviations = shots - shots.mean()
variance = (deviations ** 2).mean()
print(deviations)
print(variance, np.round(np.sqrt(variance), 2))

Это выводит:

[-2.  1. -1.  4. -2.]
5.2 2.28

Его квадратный корень, стандартное отклонение, возвращает секунды в квадрате обратно в секунды: 2.28. np.var(a) и np.std(a) выполняют каждое из этих действий одним вызовом.

Признак со стандартным отклонением 0 никогда не меняется, поэтому он ничего не сообщает модели.

challenge icon

Задание

Легко

Контроль качества проверяет, насколько равномерно машина наполняет бутылки соком. В стартовом коде считываются шесть значений объёма в мл и выводится то, что возвращает spread_by_hand(a), рядом с np.std. Заверши эту функцию так, чтобы она возвращала:

  1. дисперсию: среднее значение квадратов отклонений от среднего значения a,
  2. стандартное отклонение — квадратный корень из дисперсии.

Для объёмов 1004, 996, 1011, 993, 1002 и 998:

Variance: 34.56 ml squared
Std: 5.88 ml
Same as np.std: True

Попробуйте сами

import numpy as np

values = []
for i in range(6):
    values.append(int(input()))
volumes = np.array(values)


# Возвращает дисперсию и стандартное отклонение массива a
def spread_by_hand(a):
    # Напишите здесь свой код, затем верните два значения вместо 0, 0
    return 0, 0


# Не изменяйте строки ниже
variance, std = spread_by_hand(volumes)
print(f"Variance: {np.round(variance, 2)} ml squared")
print(f"Std: {np.round(std, 2)} ml")
print("Same as np.std:", np.round(std, 2) == np.round(np.std(volumes), 2))
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Статистика для машинного обучения

Потренируйтесь самостоятельно: Онлайн-компилятор Python