автор Ашиш Адхикари

Предварительная обработка данных — это процесс очистки данных и управления ими, чтобы наша модель машинного обучения не была нарушена или предвзята во время понимания модели. Доступные данные реального мира очень неуправляемые и грязные, что может привести к сбою наших моделей машинного обучения, поэтому их необходимо предварительно обрабатывать. Существуют различные методы предварительной обработки данных, и мы рассмотрим их подробно.

Различные методы предварительной обработки данных:

  • Стандартный масштабатор
  • МинМаксСкалер
  • 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()

Мы видим, что пики теперь объединены, а данные сдвинуты к мелкому масштабу, поэтому теперь мы можем применить наши данные к нашей модели машинного обучения. Вы можете получить полный код здесь.

В следующем блоге мы рассмотрим больше методов предварительной обработки данных.