Menu
CoddyTech

Транслирование

Часть раздела Данные и графики путешествия по Machine Learning на Coddy. Урок 13 из 60.

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

Таблица 3 на 2 со значениями роста и веса минус строка средних значений 170 и 70, скопированная во все три строки, равна центрированной таблице: 0 и -10, 10 и 10, -10 и 0

В коде для роста и веса трёх человек:

data = np.array([[170, 60],
                 [180, 80],
                 [160, 70]])
print(data - data.mean(axis=0))

Это выводит:

[[  0. -10.]
 [ 10.  10.]
 [-10.   0.]]

Это копирование называется стандартизацией. Теперь таблица центрирована: каждое значение показывает, насколько оно отклоняется от среднего значения своего столбца.

Средние имеют форму (2,): по одному значению на каждый столбец таблицы (3, 2). Любая другая длина приведёт к ошибке.

challenge icon

Задание

Легко

Фитнес-приложение центрирует каждую таблицу перед тренировкой. В начальном коде вызывается center для двух таблиц: users (3 признака) и workouts (2), а затем выводятся результаты. Сейчас center возвращает таблицу без изменений.

Дополните center, чтобы она вычитала среднее значение каждого столбца из этого столбца независимо от количества столбцов. Оставьте строки ниже без изменений.

Для двух пользователей и двух тренировок вывод будет выглядеть так:

Centered users:
[[-6.  7. -5.]
 [ 6. -7.  5.]]
Column means after centering: [0. 0. 0.]
Centered workouts:
[[-10. -90.]
 [ 10.  90.]]
Column means after centering: [0. 0.]

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

import numpy as np


def center(table):
    # Верните table, вычтя из каждого столбца его среднее значение
    # Напишите свой код ниже
    return table


# Одна строка на пользователя: возраст, пульс в покое, минуты упражнений в день
users = np.array([[25, 62, 30],
                  [31, 70, 45],
                  [40, 58, 20],
                  [29, 66, 25]])
# Одна строка на тренировку: продолжительность в минутах, сожжённые калории
workouts = np.array([[30, 240],
                     [45, 410],
                     [20, 150],
                     [60, 520],
                     [35, 300]])

# Не изменяйте строки ниже
print("Centered users:")
print(center(users))
print("Column means after centering:", np.round(center(users).mean(axis=0), 2))
print("Centered workouts:")
print(center(workouts))
print("Column means after centering:", np.round(center(workouts).mean(axis=0), 2))
quiz iconПроверьте себя

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

Все уроки раздела Данные и графики

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