August 23, 2022

Простые способы масштабирования своими руками

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