Нормализация столбца или датафрейма Pandas (с использованием Pandas или sklearn)

Узнайте, как нормализовать столбец или фрейм данных в Pandas, используя либо Pandas, либо scikit-learn.

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

В этом руководстве вы узнаете, как использовать Pandas и scikit-learn для нормализации как столбца, так и всего датафрейма с помощью максимального абсолютного масштабирования, масштабирования Min-Max и метода стандартизации по Z-оценке. Вы также узнаете, что представляют собой эти методы, а также когда и почему их использовать.

Быстрый ответ:

# Нормализация столбца с помощью Pandas и sklearn

# Использование Pandas
def min_max_scaling(column):
  return (column - column.min()) / (column.max() - column.min())

for col in df.columns:
  df[col] = min_max_scaling(df[col])

# Использование sklearn
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
scaler.fit(df)
scaled = scaler.fit_transform(df)
scaled_df = pd.DataFrame(scaled, columns=df.columns)

Оглавление

Что такое нормализация данных в машинном обучении?

Нормализация данных приводит признаки (или столбцы) с разными масштабами к общему масштабу. Например, если вы сравниваете рост и вес человека, значения могут сильно отличаться между двумя масштабами. Поэтому, если вы пытаетесь создать модель машинного обучения, один столбец может иметь другое влияние.

В этом случае на помощь приходит нормализация: значения различных столбцов корректируются, чтобы находиться в общем масштабе, что облегчает их сравнение.

В следующих разделах вы узнаете, как применять нормализацию данных к DataFrame в Pandas, что означает приведение числовых столбцов к общему масштабу. Это предотвращает предпочтение моделей в пользу значений с более крупным масштабом. По сути, нормализация данных преобразует данные с различными масштабами к одному масштабу. Это позволяет каждой переменной иметь похожее влияние на модель, делая её более стабильной и повышая её эффективность.

Давайте начнем с загрузки примерного DataFrame библиотеки Pandas, который мы будем использовать на протяжении всего руководства.

Загрузка образца Pandas Dataframe

Если вы хотите следовать за уроком, строка за строкой кода, скопируйте код ниже, чтобы создать датафрейм. Это создаст образец датафрейма, который вы можете использовать, чтобы следовать за уроком.

Загрузим DataFrame с тремя столбцами: age, weight и height. Посмотрим, как это можно сделать на Python с использованием Pandas:

import pandas as pd

# Создание DataFrame из словаря
df = pd.DataFrame.from_dict({
    'Age': [10, 35, 34, 23, 70, 55, 89],  # Возраст
    'Height': [130, 178, 155, 133, 195, 150, 205], # Рост
    'Weight': [80, 200, 220, 150, 140, 95, 180] # Вес
})

Мы можем вывести первые пять строк нашего датафрейма, используя команду print(df.head()). Это вернет следующий датафрейм:

   Age  Height  Weight
0   10     130      80
1   35     178     200
2   34     155     220
3   23     133     150
4   70     195     140

В следующем разделе вы узнаете, что такое максимальное абсолютное масштабирование.

Что такое максимальное абсолютное масштабирование?

Метод максимального абсолютного масштабирования изменяет масштаб каждой характеристики на значения в диапазоне от -1 до 1.

Каждое значение вычисляется по следующей формуле:

Каждое масштабированное значение вычисляется путем деления самого значения на абсолютное значение максимального значения. Тот факт, что масштаб может варьироваться от -1 до 1, не означает, что он обязательно будет таким. На самом деле, значения -1 и +1 будут существовать только тогда, когда в наборе данных присутствуют как отрицательные, так и положительные максимальные значения. Это означает, что как минимум либо -1, либо +1, либо оба значения будут присутствовать.

В следующем разделе вы узнаете, как нормализовать столбец Pandas с помощью масштабирования по максимальному абсолютному значению.

Нормализуйте столбец Pandas с максимальным абсолютным масштабированием с помощью Pandas

Pandas упрощает нормализацию столбца с использованием максимального абсолютного масштабирования. Для этого процесса можно использовать метод .max() и метод .abs().

Давайте посмотрим, как мы можем разработать функцию, которая позволяет применять метод масштабирования с максимальной абсолютной величиной к столбцу.

def absolute_maximum_scale(series):
    # Функция для масштабирования данных с использованием абсолютного максимального значения
    return series / series.abs().max()

# Цикл по всем столбцам DataFrame
for col in df.columns:
    # Применение функции масштабирования к каждому столбцу
    df[col] = absolute_maximum_scale(df[col])

# Вывод DataFrame с масштабированными данными
print(df)

# Результат:
#         Age    Height    Weight
# 0  0.112360  0.634146  0.363636
# 1  0.393258  0.868293  0.909091
# 2  0.382022  0.756098  1.000000
# 3  0.258427  0.648780  0.681818
# 4  0.786517  0.951220  0.636364
# 5  0.617978  0.731707  0.431818
# 6  1.000000  1.000000  0.818182

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

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

В следующем разделе вы узнаете, как использовать scikit-learn для применения максимального абсолютного масштабирования к DataFrame.

Нормализуйте столбец Pandas с максимальным абсолютным масштабированием с помощью scikit-learn

Во многих случаях, связанных с машинным обучением, вы будете импортировать популярную библиотеку scikit-learn. Благодаря этому, вы можете использовать эту библиотеку для применения максимального абсолютного масштабирования к вашему DataFrame Pandas.

Для этого мы будем использовать класс MaxAbsScaler для создания объекта скалера. Затем мы можем применить метод fit, чтобы позволить scikit-learn изучить необходимые параметры (максимальное абсолютное значение). Далее мы используем эти параметры для преобразования наших данных и нормализации столбца DataFrame Pandas с помощью scikit-learn.

Давайте посмотрим, как мы можем использовать Pandas и scikit-learn для этого:

# Использование Scikit-learn для преобразования с максимальным абсолютным масштабированием

from sklearn.preprocessing import MaxAbsScaler  # Импорт класса MaxAbsScaler из sklearn.preprocessing

scaler = MaxAbsScaler() # Создание экземпляра MaxAbsScaler

scaler.fit(df) # Обучение масштабатора на данных df

scaled = scaler.transform(df) # Преобразование данных df с помощью обученного масштабатора

scaled_df = pd.DataFrame(scaled, columns=df.columns) # Создание DataFrame из преобразованных данных

print(scaled_df) # Вывод DataFrame с масштабированными данными

# Результат:
#         Age    Height    Weight
# 0  0.112360  0.634146  0.363636
# 1  0.393258  0.868293  0.909091
# 2  0.382022  0.756098  1.000000
# 3  0.258427  0.648780  0.681818
# 4  0.786517  0.951220  0.636364
# 5  0.617978  0.731707  0.431818
# 6  1.000000  1.000000  0.818182

Давайте разберем, что мы здесь сделали:

  1. Мы загружаем объект scaler, используя класс MaxAbsScaler()

  2. Мы передаем датафрейм в метод .fit()

  3. Затем мы создаем масштабированную матрицу данных, используя метод .transform()

  4. Наконец, мы воссоздаем Pandas Dataframe, используя класс DataFrame

В следующем разделе вы узнаете о методе масштабирования признаков по минимуму и максимуму.

Что такое масштабирование признаков Min-Max?

Масштабирование признаков с использованием метода min-max часто просто называют нормализацией, которая изменяет масштаб признаков набора данных до диапазона от 0 до 1. Это вычисляется путем вычитания минимального значения признака из значения, а затем деления на разницу между максимальным и минимальным значением.

Формула:

С помощью Pandas легко применить нормализацию с использованием метода масштабирования признаков min max.

В следующем разделе вы узнаете, как использовать Pandas для нормализации столбца.

Нормализация столбца Pandas с помощью масштабирования признаков Min-Max с использованием Pandas

Чтобы использовать Pandas для применения мин-макс масштабирования, или нормализации, мы можем использовать методы .max() и .min(). Затем мы можем применить функцию в векторизованном формате, чтобы значительно повысить эффективность нашей операции.

Давайте посмотрим, как это выглядит в Pandas:

def min_max_scaling(series):
    # Функция для масштабирования данных с использованием минимального и максимального значений
    return (series - series.min()) / (series.max() - series.min())

# Цикл по всем столбцам DataFrame
for col in df.columns:
    # Применение функции масштабирования к каждому столбцу
    df[col] = min_max_scaling(df[col])

# Вывод первых 5 строк DataFrame с масштабированными данными
print(df.head())

# Результат:
#         Age    Height    Weight
# 0  0.000000  0.000000  0.000000
# 1  0.316456  0.640000  0.857143
# 2  0.303797  0.333333  1.000000
# 3  0.164557  0.040000  0.500000
# 4  0.759494  0.866667  0.428571

Давайте разберём, что мы здесь сделали:

  1. Мы определили нашу функцию так, чтобы она принимала серию

  2. Функция возвращает формулу, определенную выше: разница между значением и минимальным значением, деленная на разницу между максимальным и минимальным значениями.

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

В следующем разделе вы узнаете, как использовать sklearn для нормализации столбца методом min-max.

Нормализуйте столбец Pandas с помощью масштабирования признаков Min-Max с помощью scikit-learn

Модуль sklearn на Python также предоставляет простой способ нормализовать столбец с использованием метода масштабирования min-max. Библиотека sklearn содержит класс MinMaxScaler, который можно использовать для подгонки данных.

Давайте посмотрим, как мы можем использовать библиотеку для применения min-max нормализации к Dataframe в Pandas.

from sklearn.preprocessing import MinMaxScaler  # Импорт класса MinMaxScaler из sklearn.preprocessing

scaler = MinMaxScaler() # Создание экземпляра MinMaxScaler

scaler.fit(df) # Обучение масштабатора на данных df

scaled = scaler.fit_transform(df) # Обучение и преобразование данных df с помощью масштабатора

scaled_df = pd.DataFrame(scaled, columns=df.columns) # Создание DataFrame из преобразованных данных

print(scaled_df) # Вывод DataFrame с масштабированными данными

# Результат:
#         Age    Height    Weight
# 0  0.000000  0.000000  0.000000
# 1  0.316456  0.640000  0.857143
# 2  0.303797  0.333333  1.000000
# 3  0.164557  0.040000  0.500000
# 4  0.759494  0.866667  0.428571
# 5  0.569620  0.266667  0.107143
# 6  1.000000  1.000000  0.714286

Подобно применению метода масштабирования с максимальным абсолютным значением, давайте рассмотрим, что мы сделали здесь:

  1. Мы импортировали класс MinMaxScaler из sklearn.preprocessing

  2. Затем мы создаем экземпляр класса и применяем его к данным.

  3. Затем мы используем масштабатор, чтобы обучить и преобразовать наши данные.

  4. Наконец, мы создаем новый датафрейм из данных, передавая в него оригинальные столбцы для его воссоздания.

В следующем разделе вы узнаете, что такое масштабирование z-оценки и как его использовать.

Что такое масштабирование Z-оценки?

Метод Z-оценки часто называют стандартизацией, который преобразует данные в распределение значений с средним равным 0 и стандартным отклонением равным 1. В отличие от других двух методов, этот метод не ограничен диапазоном от 0 до 1 или от -1 до...

Вместо этого, поскольку данные имеют стандартное отклонение, 99% значений попадут в диапазон от -3 до 3. Конечно, будут значения, выходящие за эти пределы, но они будут крайне редкими.

Способ расчета этой стандартизации заключается в использовании следующей формулы:

В следующем разделе вы узнаете, как стандартизировать столбец Pandas, используя масштабирование по z-оценке.

Стандартизируйте столбец Pandas с помощью масштабирования Z-оценки с помощью Pandas

Чтобы стандартизировать столбец в DataFrame Pandas, мы можем использовать функции mean и std из библиотеки

Чтобы узнать больше о вычислении среднего значения столбца DataFrame в Pandas, ознакомьтесь с этим учебником здесь. Чтобы узнать больше о вычислении стандартного отклонения в Python, ознакомьтесь с моим руководством здесь, которое включает в себя всё: от расчета его с нуля до использования Pandas.

Давайте посмотрим, как можно использовать Pandas для расчета стандартизированного кадра данных с масштабированием z-оценки:

def z_score_standardization(series):
    # Функция для стандартизации данных с использованием Z-оценки (среднее и стандартное отклонение)
    return (series - series.mean()) / series.std()

# Цикл по всем столбцам DataFrame
for col in df.columns:
    # Применение функции стандартизации к каждому столбцу
    df[col] = z_score_standardization(df[col])

# Вывод DataFrame с стандартизированными данными
print(df)

# Результат:
#         Age    Height    Weight
# 0 -1.270474 -1.141772 -1.384428
# 1 -0.366682  0.483802  0.918383
# 2 -0.402833 -0.295119  1.302185
# 3 -0.800502 -1.040174 -0.041122
# 4  0.898628  1.059526 -0.233023
# 5  0.356352 -0.464450 -1.096577
# 6  1.585510  1.398187  0.534581

Давайте исследуем, что мы здесь сделали:

  1. Мы определяем новую функцию, которая принимает ряд в качестве входных данных.

  2. Затем мы возвращаем значение серии, вычтенное из среднего значения серии и деленное на стандартное отклонение серии.

Наконец, мы перебираем каждый столбец в датафрейме и переназначаем его самому себе.

Стандартизируйте столбец Pandas с помощью масштабирования Z-оценки с помощью scikit-learn

В этом заключительном разделе вы узнаете, как использовать sklearn для стандартизации колонки Pandas с помощью масштабирования z-score. Для этого мы используем класс StandardScaler из модуля sklearn.

Давайте посмотрим, как мы можем использовать библиотеку для применения z-оценки к Dataframe

from sklearn.preprocessing import StandardScaler  # Импорт класса StandardScaler из sklearn.preprocessing

scaler = StandardScaler() # Создание экземпляра StandardScaler

scaler.fit(df) # Обучение масштабатора на данных df

scaled = scaler.fit_transform(df) # Обучение и преобразование данных df с помощью масштабатора

scaled_df = pd.DataFrame(scaled, columns=df.columns) # Создание DataFrame из преобразованных данных

print(scaled_df) # Вывод DataFrame с стандартизированными данными

# Результат:
#         Age    Height    Weight
# 0 -1.372269 -1.233255 -1.495353
# 1 -0.396061  0.522566  0.991967
# 2 -0.435110 -0.318765  1.406520
# 3 -0.864641 -1.123516 -0.044416
# 4  0.970629  1.144419 -0.251693
# 5  0.384905 -0.501663 -1.184438
# 6  1.712547  1.510215  0.577414

Давайте разберем, что мы сделали выше:

  1. Мы создали экземпляр класса StandardScaler и обучили его на датафрейме

  2. Затем мы использовали метод .fit_transform(), чтобы масштабировать сам

  3. Наконец, мы воссоздали фрейм данных из данных, применив z-оценочное стандартизирование.

Заключение

В этом руководстве вы узнали три метода стандартизации или нормализации данных в Pandas, используя либо Pandas, либо sklearn. Вы узнали, как применять метод максимального абсолютного масштабирования, метод мин-макс масштабирования признаков и метод стандартизации z.

Чтобы узнать больше о методе нормализации минимума-максимума sklearn, ознакомьтесь с официальной документацией, которую можно найти здесь.

Last updated