Простые способы масштабирования своими руками
Различные алгоритмы машинного обучения для более эффективной обработки данных нуждаются в приведении к их определенному диапазону, например, от 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))