Menu
CoddyTech

StandardScaler

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

Модель должна масштабировать каждый новый образец точно так же, как она масштабировала обучающие данные. StandardScaler из scikit-learn стандартизирует данные и запоминает, как это делать:

Схема: 4 предыдущие работы мойщика окон, X_train, проходят через fit и попадают в масштабировщик, который запоминает mean_ 8 и 22 и scale_ 4.47 и 9.72. Новая работа, 8 и 30, проходит через transform с использованием этих чисел и преобразуется в 0.00 и 0.82

В коде для каждой работы указано количество вымытых окон и затраченные минуты:

from sklearn.preprocessing import StandardScaler

X_train = np.array([[2, 8], [10, 25], [6, 20], [14, 35]])
scaler = StandardScaler()
scaler.fit(X_train)
X_new = np.array([[8, 30]])  # один образец: таблица с одной строкой
print(np.round(scaler.transform(X_new), 2))

Это выводит:

[[0.   0.82]]

fit вычисляет среднее значение и стандартное отклонение каждого столбца (деля на n, как np.std) и сохраняет их в scaler.mean_ и scaler.scale_. transform применяет их.

Никогда не выполняй подгонку на новых данных: средним значением самого набора данных станет [[0. 0.]]. На обучающих данных fit_transform выполняет обе операции за один вызов.

challenge icon

Задание

Средне

Сортировщик обучен на авокадо из X_train: весе, твёрдости и количестве дней после сбора урожая. Программа считывает новое авокадо в таблицу с одной строкой new_avocado, но начальный вариант масштабирования выводит [[0. 0. 0.]] для каждого авокадо.

  1. Исправь это: масштабируй новое авокадо, используя средние значения и стандартные отклонения обучающих данных.
  2. Подсчитай, сколько его измерений отклоняются от среднего значения обучающих данных более чем на 2 стандартных отклонения в любую сторону, и выведи результат, как показано ниже.

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

New avocado: [[2.98 0.   0.09]]
1 of 3 measurements are more than 2 std from the training avocados

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

import numpy as np
from sklearn.preprocessing import StandardScaler

# Авокадо для обучения, по одному в каждой строке: вес в граммах, твёрдость от 1 до 10, количество дней с момента сбора урожая
X_train = np.array([[210, 8, 2],
                    [185, 5, 6],
                    [240, 7, 3],
                    [170, 3, 9],
                    [225, 6, 5],
                    [195, 4, 7]])
# Новое авокадо на конвейере
weight = float(input())
firmness = float(input())
days = float(input())
new_avocado = np.array([[weight, firmness, days]])

# Для каждого авокадо выводится [[0. 0. 0.]]: исправьте это
scaler = StandardScaler()
scaled = scaler.fit_transform(new_avocado)
print("New avocado:", np.round(scaled, 2))

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

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

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

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