Масштабирование функций в машинном обучении

В аспекте понимания

Привет, ребята! Сегодня в этом блоге мы поговорим о масштабировании функций. Прежде всего, имея дело с алгоритмами ML, вы, должно быть, пришли к такой ситуации, когда какой-либо из алгоритмов не работает с данными должным образом. Причиной могут быть сами данные. Прежде чем запускать какой-либо алгоритм над данными, необходимо предварительно обработать данные. Во время предварительной обработки очистка данных является наиболее важным шагом. Еще один шаг — масштабирование функций. Данные, используемые для масштабирования объектов, должны быть числовыми. Дайте нам знать с практическим аспектом.

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

Дано: данные с числовыми атрибутами, имеющими разные масштабы.

Решение: масштабирование функций

Что такое масштабирование функций?

Если входные числовые атрибуты данных имеют разные масштабы, метод, позволяющий придать всем атрибутам одинаковый масштаб, называется масштабированием объектов.

Пример

Предположим, у нас есть данные о количестве учеников в каждом классе. Общее количество студентов колеблется от 6 до 41 860, тогда как среднее количество учителей колеблется всего от 0 до 15.

В таком случае требуется масштабирование функций.

Способы масштабирования функций

Мин-макс масштабирование

Масштабирование Min-Max — это не что иное, как нормализация значений, при которой значения сдвигаются и масштабируются так, чтобы они в конечном итоге находились в диапазоне от 0 до 1. Это можно выполнить путем вычитания минимального значения и деления на максимальное минус минимальное. Scikit-learn предоставляет для этого преобразователь под названием MinMaxScaler. У него есть гиперпараметр Feature_range, который позволяет нам изменить диапазон, если нам не нужен диапазон от 0 до 1.

Преобразуйте объекты, масштабируя каждый объект до заданного диапазона.

Этот оценщик масштабирует и преобразует каждую функцию индивидуально так, чтобы она находилась в заданном диапазоне обучающего набора, например между нулем и единицей.

Преобразование определяется:

X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min

где мин, макс = Feature_range.

Это преобразование часто используется как альтернатива масштабированию с нулевым средним и единичной дисперсией. Sklearn предоставляет метод использования мин-макс-скейлера.



from sklearn.preprocessing import MinMaxScaler
data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]
scaler = MinMaxScaler()
print(scaler.fit(data))
MinMaxScaler()
print(scaler.data_max_)

Методы

fit(X[, y])

Вычислите минимум и максимум, которые будут использоваться для последующего масштабирования.

fit_transform(X[, y])

Подогнать данные, а затем преобразовать их.

get_feature_names_out([входные_функции])

Получите имена выходных объектов для преобразования.

get_params([глубоко])

Получите параметры для этой оценки.

inverse_transform(X)

Отмените масштабирование X в соответствии с Feature_range.

partial_fit(X[, y])

Онлайн-вычисление минимума и максимума по X для последующего масштабирования.

set_output([, трансформировать])

Установите выходной контейнер.

set_params(*параметры)

Установите параметры этой оценки.

transform(X)

Масштабируйте функции X в соответствии с Feature_range.

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

Это совсем другой метод. Сначала он вычитает среднее значение (поэтому стандартизированные значения всегда имеют нулевое среднее), а затем делит на стандартное отклонение, чтобы полученное распределение имело единичную дисперсию. Но метод стандартизации не ограничивает.

Стандартизируйте функции, удалив среднее значение и масштабируя его до единичной дисперсии.

Стандартный балл образца x рассчитывается как:

z = (x - u) / s

где u — среднее значение обучающих выборок или ноль, если with_mean=False, а s — стандартное отклонение обучающих выборок или единица, если with_std=False.

Sklearn предоставляет метод для стандартного скалера.



from sklearn.preprocessing import StandardScaler
data = [[0, 0], [0, 0], [1, 1], [1, 1]]
scaler = StandardScaler()
print(scaler.fit(data))
print(scaler.mean_)

Методы

fit(X[, y, вес_выборки])

Вычислите среднее значение и стандартное значение, которые будут использоваться для последующего масштабирования.

fit_transform(X[, y])

Подогнать данные, а затем преобразовать их.

get_feature_names_out([входные_функции])

Получите имена выходных объектов для преобразования.

get_params([глубокий])

Получите параметры для этой оценки.

inverse_transform(X[, копировать])

Уменьшите данные до исходного представления.

partial_fit(X[, y, вес_выборки])

Онлайн-вычисление среднего и стандартного значения по X для последующего масштабирования.

set_output([, трансформировать])

Установите выходной контейнер.

set_params(*параметры)

Установите параметры этой оценки.

transform(X[, копировать])

Выполните стандартизацию путем центрирования и масштабирования.

Сравнение стандартизации с масштабированием функций

Проблема: системе необходимо, чтобы данные масштабировались в определенном диапазоне значений.

Решение: масштабирование функций

В этой задаче стандартизация не работает, поскольку она не привязывает значения к определенному диапазону, что может быть проблемой для некоторых алгоритмов (например, нейронные сети часто ожидают входного значения в диапазоне от 0 до 1).

Стандартизация гораздо меньше подвержена влиянию выбросов по сравнению с масштабированием Min-max.

Например:

Предположим, что в классе среднее количество учителей равно 100 (по ошибке). Тогда мин-максное масштабирование сократит все остальные значения от 0–15 до 0–0,15, тогда как на стандартизацию это не сильно повлияет.

Scikit-learn предоставил преобразователь для стандартизации под названием StandardScaler.

Я надеюсь тебе понравится!!

Спасибо

  • Ахил Сони

Вы можете найти этот блог на

https://akhilworld.hashnode.dev/feature-scaling-in-ml