Menu
CoddyTech

Стандартизация

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

Многие модели лучше всего обучаются, когда каждый признак центрирован относительно 0 и имеет разброс 1. Стандартизация делает именно это: каждое значение становится z-оценкой в пределах своего столбца.

Пять тыкв, вес в кг и ширина в см:

Два ряда точек на одной линейке стандартных отклонений: пять значений веса тыкв от 8 до 40 кг и пять значений ширины от 30 до 65 см, каждый ряд центрирован относительно собственного среднего значения в точке 0, все значения находятся в диапазоне от -1.6 до 1.6

Трансляция стандартизирует все столбцы одновременно:

pumpkins = np.array([[30, 60],
                     [8, 30],
                     [22, 55],
                     [40, 65],
                     [15, 40]])
z = (pumpkins - pumpkins.mean(axis=0)) / pumpkins.std(axis=0)
print(np.round(z.mean(axis=0), 2))
print(np.round(z.std(axis=0), 2))

Это выводит:

[0. 0.]
[1. 1.]

Сначала округлите, а затем проверьте: без округления среднее значение 0 может выводиться как 2.22044605e-17 — крошечная погрешность округления.

В отличие от min-max, здесь нет фиксированного диапазона: большинство значений находятся в пределах от -2 до 2.

challenge icon

Задание

Средне

На молочной ферме обнаружили необычных коров. Каждая строка в cows соответствует корове: удой (литров в день), вес (кг) и возраст (лет), названные в features. Программа считывает позицию коровы k.

  1. Дополните standardize(X). Проверочные строки затем выводят [0. 0. 0.] и [1. 1. 1.].
  2. Найдите z-оценку коровы k, наиболее удалённую от 0; знак не учитывайте, и выведите её, как показано ниже, с точностью до 2 знаков после запятой.

Для коровы с другой фермы:

Column means: [0. 0. 0.]
Column stds: [1. 1. 1.]
Cow 2 stands out by weight: 1.76 std above the herd

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

import numpy as np

features = ["milk", "weight", "age"]
# Одна строка на каждую корову: надой в литрах в день, вес в кг, возраст в годах
cows = np.array([[28, 610, 6],
                 [22, 540, 3],
                 [35, 680, 6],
                 [31, 590, 9],
                 [19, 650, 4],
                 [26, 520, 2],
                 [30, 600, 7]])
k = int(input())


# Возвращает X, в котором каждый столбец стандартизирован: среднее 0 и стандартное отклонение 1
def standardize(X):
    # Замените строку ниже на код стандартизации
    return X


# Не меняйте три строки ниже: они проверяют вашу функцию
z = standardize(cows)
print("Column means:", np.round(z.mean(axis=0), 2))
print("Column stds:", np.round(z.std(axis=0), 2))

# Напишите код ниже: чем выделяется корова k
quiz iconПроверьте себя

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

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

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