Масштабирование функций
Масштабирование признаков относится к методам или методам, используемым для нормализации диапазона независимых переменных в наших данных, или, другими словами, к методам установки диапазона значений признаков в пределах аналогичного масштаба. Масштабирование признаков обычно является последним шагом в конвейере предварительной обработки данных, выполняемым непосредственно перед обучением алгоритмов машинного обучения.
Величина функции имеет значение, потому что:
- На коэффициенты регрессии линейных моделей напрямую влияет масштаб переменной.
- Переменные с большей величиной/большим диапазоном значений преобладают над теми, у которых меньшая величина/диапазон значений.
- Градиентный спуск сходится быстрее, когда признаки находятся в одинаковых масштабах.
- Масштабирование функций помогает сократить время поиска векторов поддержки для SVM.
- Евклидовы расстояния чувствительны к величине объекта.
- Некоторые алгоритмы, такие как PCA, требуют, чтобы функции были центрированы на 0.
Модели машинного обучения, затронутые масштабированием функций:
- Линейная и логистическая регрессия
- Нейронные сети
- Опорные векторные машины
- КНН
- Кластеризация K-средних
- Линейный дискриминантный анализ (LDA)
- Анализ главных компонентов (PCA)
Существует несколько методов масштабирования функций, таких как
- Стандартизация
- Средняя нормализация
- Масштабирование до минимального и максимального значений — MinMaxScaling
- Масштабирование до максимального значения — MaxAbsScaling
- Масштабирование по квантилям и медиане — RobustScaling
- Нормализация к единичной длине вектора
но здесь я расскажу о важности стандартизации и нормализации.
Стандартизация
Стандартизация включает центрирование переменной на нуле и стандартизацию дисперсии до 1. Процедура включает вычитание среднего значения каждого наблюдения, а затем деление на стандартное отклонение:
z = (x — x_mean) / станд.
Результатом приведенного выше преобразования является z, который называется z-оценкой и показывает, на сколько стандартных отклонений данное наблюдение отклоняется от среднего значения. Z-оценка указывает положение наблюдения в распределении (в числах стандартных отклонений по отношению к среднему значению распределения). Знак z-показателя (+ или -) указывает, находится ли наблюдение выше (+) или ниже (-) среднего значения.
Форма стандартизированного (или нормализованного по z-оценке) распределения будет идентична исходному распределению переменной. Если исходное распределение является нормальным, то нормальным будет и стандартизированное распределение. Но если исходное распределение искажено, то стандартизированное распределение переменной также будет искажено. Другими словами, стандартизация переменной не нормализует распределение данных.
В двух словах, стандартизация:
- центрирует среднее значение в 0
- масштабирует дисперсию на 1
- сохраняет форму исходного распределения
- минимальные и максимальные значения различных переменных могут различаться
- сохраняет выбросы
Подходит для алгоритмов, которым требуются функции с центром в нуле.
Код процесса стандартизации для масштабирования функций
# the scaler - for standardisation from sklearn.preprocessing import StandardScaler
StandardScaler из scikit-learn удаляет среднее значение и масштабирует данные до единичной дисперсии. Кроме того, он запоминает и сохраняет параметры, необходимые для масштабирования. Таким образом, это лучший выбор для этой техники масштабирования признаков.
Начнем с загрузки набора данных:
# load the the Boston House price data # this is how we load the boston dataset from sklearn boston_dataset = load_boston() # create a dataframe with the independent variables data = pd.DataFrame(boston_dataset.data, columns=boston_dataset.feature_names) # add target data['MEDV'] = boston_dataset.target data.head()
Затем набор данных разделяется:
# let's separate the data into training and testing set X_train, X_test, y_train, y_test = train_test_split(data.drop('MEDV', axis=1),data['MEDV'], test_size=0.3,random_state=0)
Затем используется StandardScaler:
# standardisation: with the StandardScaler from sklearn # set up the scaler scaler = StandardScaler() # fit the scaler to the train set, it will learn the parameters scaler.fit(X_train) # transform train and test sets X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test)
Нормализация
Масштабирование до минимального и максимального значений — MinMaxScaling
Минимальное и максимальное масштабирование сжимает значения между 0 и 1. Оно вычитает минимальное значение из всех наблюдений, а затем делит его на диапазон значений:
Результатом приведенного выше преобразования является распределение, значения которого варьируются в диапазоне от 0 до 1. Но среднее значение не центрировано на нуле, а стандартное отклонение варьируется по переменным. Форма минимально-максимального масштабированного распределения будет аналогична исходной переменной, но дисперсия может измениться. Этот метод масштабирования также чувствителен к выбросам.
Вкратце, MinMaxScaling:
- не центрирует среднее значение в 0
- дисперсия варьируется по переменным
- может не сохранить форму исходного дистрибутива
- минимальное и максимальное значения равны 0 и 1.
- чувствительные выбросы
# the scaler - for min-max scaling from sklearn.preprocessing import MinMaxScaler
MinMaxScaling
MinMaxScaler из scikit-learn вычитает минимальное значение и масштабирует диапазон значений, отображая значения переменных от 0 до 1 с использованием MinMaxScaler в python: -
scaler = MinMaxScaler() # fit the scaler to the train set, it will learn the parameters scaler.fit(X_train) # transform train and test sets X_train_scaled = scaler.transform(X_train) X_test_scaled = scaler.transform(X_test)
Спасибо за чтение. Свяжитесь со мной в Linkedin