В этом посте я объясню, почему и как применять стандартизацию с помощью scikit-learn в Python.
Всем привет.
Это мой первый пост на Medium. Я инженер-электрик и компьютерный инженер, в настоящее время заканчиваю докторскую диссертацию в области биомедицинской инженерии и вычислительной нейробиологии. Я работаю над проблемами машинного обучения последние 4 года. Очень распространенный вопрос, который я вижу повсюду в сети, - как стандартизировать и зачем это делать, данные до того, как они будут соответствовать модели машинного обучения.
Как работает
StandardScaler
scikit-learn?
Первый вопрос, который приходит в голову:
Зачем в первую очередь стандартизировать?
Зачем стандартизировать перед установкой модели машинного обучения?
Что ж, идея проста. Переменные, которые измеряются в разных масштабах, не вносят одинаковый вклад в функцию подгонки модели и изучения модели и могут в конечном итоге вызвать смещение. Таким образом, для решения этой потенциальной проблемы перед подгонкой модели обычно используется стандартизованный по характеристикам (μ = 0, σ = 1).
Чтобы сделать это с помощью scikit-learn
, нам сначала нужно создать входной массив X
, содержащий функции и образцы с X.shape
being[number_of_samples, number_of_features]
.
Имейте в виду, что все scikit-learn
функции машинного обучения (ML) ожидают в качестве входных данных numpy
массив X
с этой формой, т.е. строки являются образцами, а столбцы - функциями / переменными. Сказав это, давайте предположим, что у нас есть матрица X
, где каждая строка / строка - это образец / наблюдение, а каждый столбец - переменная / функция.
Примечание. Древовидные модели обычно не зависят от масштабирования, но модели недревесных моделей, такие как SVM, LDA и т. д., часто сильно зависят от него.
Суть метода
Основная идея состоит в том, чтобы нормализовать / стандартизировать то есть μ = 0
и σ = 1
ваши функции / переменные / столбцы из X
, индивидуально, до применение любой модели машинного обучения. Таким образом, StandardScaler()
будет нормализовать функции, т.е. каждый столбец X, ИНДИВИДУАЛЬНО, так что каждый столбец / функция / переменная будет иметь μ = 0
и σ = 1
.
Пример рабочего кода Python:
from sklearn.preprocessing import StandardScaler import numpy as np # 4 samples/observations and 2 variables/features X = np.array([[0, 0], [1, 0], [0, 1], [1, 1]])
# the scaler object (model) scaler = StandardScaler()
# fit and transform the data scaled_data = scaler.fit_transform(X) print(X) [[0, 0], [1, 0], [0, 1], [1, 1]]) print(scaled_data) [[-1. -1.] [ 1. -1.] [-1. 1.] [ 1. 1.]]
Убедитесь, что среднее значение каждой функции (столбца) равно 0:
scaled_data.mean(axis = 0)
array([0., 0.])
Убедитесь, что стандартное значение каждой функции (столбца) равно 1:
scaled_data.std(axis = 0)
array([1., 1.])
Эффект трансформации на визуальном примере
Резюме
StandardScaler
удаляет среднее и масштабирует каждую характеристику / переменную до единичной дисперсии. Эта операция выполняется функционально и независимо.- На
StandardScaler
могут влиять выбросы (если они существуют в наборе данных), поскольку он включает оценку эмпирического среднего и стандартного отклонения каждого признака.
Как бороться с выбросами
- Ручной способ (не рекомендуется): визуально проверьте данные и удалите выбросы, используя статистические методы удаления выбросов, такие как метод порогового значения межквартильного размаха (IQR).
- Рекомендуемый способ: используйте
RobustScaler
, который просто масштабирует функции, но в данном случае использует статистику, устойчивую к выбросам. Этот инструмент масштабирования удаляет медианное значение и масштабирует данные в соответствии с квантильным диапазоном (по умолчанию IQR : Межквартильный размах). IQR - это диапазон между 1-м квартилем (25-й квантиль) и 3-м квартилем (75-й квантиль).
Это все на сегодня! Надеюсь, вам понравился этот первый пост! Следующая история выйдет на следующей неделе. Оставайтесь с нами и будьте в безопасности.
Оставайся с нами и поддержи меня
Если вам понравилась и эта статья показалась вам полезной, подпишитесь на меня и аплодируйте моей истории, чтобы поддержать меня!
- Мой список рассылки всего за 5 секунд: https://seralouk.medium.com/subscribe
- Станьте участником и поддержите меня: https://seralouk.medium.com/membership
Ссылки
[1] https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html
[2] https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.RobustScaler.html
Свяжись со мной
- LinkedIn: https://www.linkedin.com/in/serafeim-loukas/
- ResearchGate: https://www.researchgate.net/profile/Serafeim_Loukas
- Профиль EPFL: https://people.epfl.ch/serafeim.loukas
- Переполнение стека: https://stackoverflow.com/users/5025009/seralouk