Menu
CoddyTech

Масштабирование Min-Max

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

Масштабирование min-max даёт каждому признаку равные возможности: в каждом столбце наименьшее значение становится 0, наибольшее — 1, а остальные оказываются между ними.

Добавьте 40-летнего человека с доходом $80,000, затем масштабируйте все четыре значения:

Возраст и доход четырёх клиентов в виде таблицы, стрелка, затем та же таблица после масштабирования: в каждом столбце наименьшее значение стало 0.00, а наибольшее — 1.00, выделенное более тёмным цветом; остальные значения оказались между ними

Широковещание выполняет это одной строкой, используя для каждого столбца его собственное минимальное значение и диапазон:

X = np.array([[25, 52000],
              [61, 53000],
              [26, 55000],
              [40, 80000]])
lows = X.min(axis=0)
highs = X.max(axis=0)
scaled = (X - lows) / (highs - lows)

Теперь учитывается и возраст. Ближайшим соседом клиента 0 больше не является 61-летний клиент:

Масштабированные клиенты в виде точек на квадрате от 0 до 1, линии от клиента 0: ближайший — 26-летний клиент на расстоянии 0.11, 61-летний клиент — на расстоянии 1.00, клиент с доходом $80,000 — на расстоянии 1.08

Одно экстремальное значение становится равным 1 и сжимает остальные значения к 0, поэтому нормализация min-max подходит для столбцов без выбросов.

challenge icon

Задание

Средне

Обжарщик подбирает кофе, который заваривается одинаково. Каждая строка beans — это один сорт кофе: температура воды (C), время заваривания (s) и содержание кофеина (mg). Программа считывает позиции i и j; функция distance(a, b) из начального кода измеряет расстояние между двумя образцами.

  1. Масштабируй beans методом min-max.
  2. Выведи Every column from 0 to 1:, затем таблицу масштабированных данных с точностью до 2 знаков после запятой.
  3. Выведи расстояние между ними до и после масштабирования, как показано ниже.

Для трёх других сортов кофе, позиции 0 и 1:

Every column from 0 to 1:
[[1.   1.   0.67]
 [0.5  0.5  0.  ]
 [0.   0.   1.  ]]
Coffees 0 and 1: 63.28 apart before scaling, 0.97 after

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

import numpy as np


# Возвращает расстояние между двумя образцами (из Why Scale Features)
def distance(a, b):
    return np.sqrt(((a - b) ** 2).sum())


# Одна строка для каждого вида кофе: температура воды в C, время заваривания в секундах, содержание кофеина в mg
beans = np.array([[88, 120, 60],
                  [96, 300, 30],
                  [86, 90, 70],
                  [94, 240, 120],
                  [90, 180, 90],
                  [84, 60, 50]])
i = int(input())
j = int(input())

# Напишите свой код ниже
quiz iconПроверьте себя

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

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

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