автор Ашиш Адхикари
Предварительная обработка данных — это процесс очистки данных и управления ими, чтобы наша модель машинного обучения не была нарушена или предвзята во время понимания модели. Доступные данные реального мира очень неуправляемые и грязные, что может привести к сбою наших моделей машинного обучения, поэтому их необходимо предварительно обрабатывать. Существуют различные методы предварительной обработки данных, и мы рассмотрим их подробно.
Различные методы предварительной обработки данных:
- Стандартный масштабатор
- МинМаксСкалер
- RobustScaler
- Нормализация
- Бинаризация
- Кодирование категориальных (порядковых и номинальных) признаков
- Вменение
- Полиномиальные функции
- Пользовательский трансформатор
Стандартный масштабатор
StandardScaler — это метод предварительной обработки данных, который делает данные нормально распределенными. В наших данных могут быть различные несоответствия. давайте посмотрим на пример данных о недвижимости, где размер дома будет небольшим, но цена может составлять миллионы, что может вызвать несоответствие, а также может замедлить нашу модель из-за больших значений, поэтому появляется концепция StandardScaler. играть в. Если данные не распределены нормально, это не лучший масштабатор для использования.
StandardScaler предполагает, что наши данные нормально распределены (непрерывные числовые данные) в пределах каждой функции, и масштабирует их таким образом, что теперь распределение сосредоточено вокруг 0 со стандартным отклонением 1. Он вычитает среднее значение из исходных данных и делит его. по стандартному отклонению.
Давайте искать пример. Мы будем импортировать функцию StandardScaler, доступную в библиотеке sklearn.preprocessing. давайте сгенерируем обычные данные. Данные до предварительной обработки выглядят так:
#Generating Data
df = pd.DataFrame({
'x1' : np.random.normal(0,2,10000),
'x2' : np.random.normal(5,3,10000),
'x3' : np.random.normal(-5,5,10000)
})
#Plotting Data
df.plot.kde()
Здесь из рисунка видно, что данные имеют диапазон от -20 до 20, а также плотность разных типов данных различна. Чтобы нормализовать эти данные, давайте импортируем библиотеку и реализуем следующий код.
from sklearn.preprocessing import StandardScaler
model = StandardScaler()
data_tf = model.fit_transform(df)
df = pd.DataFrame(data_tf,columns=['x1','x2','x3'])
df.plot.kde()
Вы можете получить полный код здесь.
МинМаксСкалер
MinMaxScaler используется для масштабирования данных, которые нормализуют данные, сдвигая значения между 0 и 1. Мы можем просто назвать это сжатием данных. Большие значения данных преобразуются в дроби от 0 до 1. Мы можем использовать это масштабирование, если оно не подходит для StandardScaler. Это просто вычесть минимум столбца и разделить его на разницу между максимальным и минимальным. MinMaxScalers сдвигает данные между 0 и 1, а StandardScaler нормализует данные.
Давайте искать пример. Мы будем импортировать функцию MinMax, доступную в библиотеке sklearn.preprocessing. давайте сгенерируем обычные данные. Данные перед предварительной обработкой выглядят так:
#Generating Data
df = pd.DataFrame({ 'x1' : np.random.normal(0,2,10000), 'x2' : np.random.normal(2,5,10000), 'x3' : np.random.normal(-3,2,10000) }) df.plot.kde()
Данные имеют очень высокую дисперсию, и это может повлиять на нашу модель машинного обучения во время извлечения признаков. Итак, мы будем использовать MinMaxScaler и посмотрим, как будут выглядеть наши данные после масштабирования.
from sklearn.preprocessing import MinMaxScaler
model = MinMaxScaler()
data_tf = model.fit_transform(df)
df = pd.DataFrame(data_tf, columns=['x1','x2','x3'])
df.plot.kde()
Теперь мы видим, что наши данные полностью масштабированы и нормализованы между 0 и 1. Это сделает нашу модель машинного обучения более быстрой и эффективной. Теперь вы готовы перейти к следующему шагу. Найти полный код здесь.
RobustScaler
RobustScaler используется для данных с выбросами. Выбросы — это внезапное изменение данных, которое является неожиданным или непроизвольным. Большая часть машинного обучения удаляет те данные, которые не являются хорошими. Мы можем просто масштабировать эти данные с помощью RobustScaler. Он рассчитывается путем вычитания 1-го квартиля и деления его на разницу между 3-м квартилем и 1-м квартилем.
Давайте искать пример. Мы будем импортировать функцию RobustSacaler, доступную в библиотеке sklearn.preprocessing. давайте сгенерируем нормальные данные и соединим их с возмущением. данные перед предварительной обработкой выглядят так:
df = pd.DataFrame({
'x1' : np.concatenate([np.random.normal(20, 1, 5000), np.random.normal(1, 1, 30)]),
'x2' : np.concatenate([np.random.normal(30, 1, 5000), np.random.normal(50, 1, 30)]),
})
df.plot.kde()
Здесь данные нарушены в средней части, но все же данные могут иметь некоторое значение, поэтому их необходимо масштабировать, а не удалять. Итак, мы будем масштабировать его и видеть вывод новых измененных данных.
from sklearn.preprocessing import RobustScaler
model = RobustScaler()
df_trans = model.fit_transform(df)
df = pd.DataFrame(df_trans,columns=['x1','x2'])
df.plot.kde()
Мы видим, что пики теперь объединены, а данные сдвинуты к мелкому масштабу, поэтому теперь мы можем применить наши данные к нашей модели машинного обучения. Вы можете получить полный код здесь.
В следующем блоге мы рассмотрим больше методов предварительной обработки данных.