Простые способы масштабирования своими руками
Различные алгоритмы машинного обучения для более эффективной обработки данных нуждаются в приведении к их определенному диапазону, например, от 0 до 1. Способы такой обработки включают использование логистической функции, шкалирование по минимаксу, стандартизацию. Для лучшего понимания, рассмотрим как они задаются вручную и сравним с результатами готовых способов.
Ниже перечисленные преобразования в том же порядке заданы в функциях:
import numpy as np
def lor_tr(ar):
return 1/(1+np.exp(-ar))
def min_max_tr(ar):
return (ar - np.min(ar))/(np.max(ar) - np.min(ar))
def stand_tr(ar):
return (ar - np.mean(ar))/np.std(ar)
ar = np.array([-22, 11, 12, 10, 2, -2])
print(lor_tr(ar))
print(min_max_tr(ar))
print(stand_tr(ar))Выше выведены результаты применения преобразований к заданному массиву.
А теперь используем функцию expit из модуля scipy.special для сравнения с нашей lor_tr:
from scipy.special import expit expit(ar)
Вот аналог действий min_max_tr с помощью MinMaxScaler из модуля sklearn.preprocessing:
from sklearn.preprocessing import MinMaxScaler sc = MinMaxScaler() sc.fit_transform(ar.reshape(-1,1))
Для стандартного шкалирования класс находится рядышком с MinMaxScaler и называется StandardScaler:
from sklearn.preprocessing import StandardScaler sc = StandardScaler() sc.fit_transform(ar.reshape(-1,1))