Как нормализовать данные в Python


Часто в статистике и машинном обучении мы нормализуем переменные таким образом, чтобы диапазон значений находился между 0 и 1.

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

Когда переменные измеряются в разных масштабах, они часто не вносят одинакового вклада в анализ. Например, если значения одной переменной находятся в диапазоне от 0 до 100 000, а значения другой переменной — в диапазоне от 0 до 100, переменной с большим диапазоном будет присвоен больший вес при анализе.

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

Чтобы нормализовать значения между 0 и 1, мы можем использовать следующую формулу:

x норма = (x i – x мин ) / (x макс – x мин )

куда:

  • x norm : i -е нормализованное значение в наборе данных
  • x i : i -е значение в наборе данных
  • x max : минимальное значение в наборе данных
  • x min : максимальное значение в наборе данных

В следующих примерах показано, как нормализовать одну или несколько переменных в Python.

Пример 1. Нормализация массива NumPy

В следующем коде показано, как нормализовать все значения в массиве NumPy:

import numpy as np 

#create NumPy array
data = np.array([[13, 16, 19, 22, 23, 38, 47, 56, 58, 63, 65, 70, 71]])

#normalize all values in array
data_norm = (data - data. min ())/ (data. max () - data. min ())

#view normalized values
data_norm

array([[0. , 0.05172414, 0.10344828, 0.15517241, 0.17241379,
 0.43103448, 0.5862069 , 0.74137931, 0.77586207, 0.86206897,
 0.89655172, 0.98275862, 1. ]])

Каждое из значений в нормализованном массиве теперь находится между 0 и 1.

Пример 2: нормализовать все переменные в Pandas DataFrame

Следующий код показывает, как нормализовать все переменные в кадре данных pandas:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
 'assists': [5, 7, 7, 9, 12, 9, 9, 4],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})

#normalize values in every column
df_norm = (df-df.min ())/ (df.max () - df.min ())

#view normalized DataFrame
df_norm

 points assists rebounds
0 0.764706 0.125 0.857143
1 0.000000 0.375 0.428571
2 0.176471 0.375 0.714286
3 0.117647 0.625 0.142857
4 0.411765 1.000 0.142857
5 0.647059 0.625 0.000000
6 0.764706 0.625 0.571429
7 1.000000 0.000 1.000000

Каждое из значений в каждом столбце теперь находится в диапазоне от 0 до 1.

Пример 3: нормализовать определенные переменные в Pandas DataFrame

В следующем коде показано, как нормализовать определенные переменные в кадре данных pandas:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'points': [25, 12, 15, 14, 19, 23, 25, 29],
 'assists': [5, 7, 7, 9, 12, 9, 9, 4],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})

define columns to normalize
x = df.iloc [:,0:2]

#normalize values in first two columns only 
df.iloc [:,0:2] = (x-x. min ())/ (x. max () - x. min ())

#view normalized DataFrame 
df

 points assists rebounds
0 0.764706 0.125 11
1 0.000000 0.375 8
2 0.176471 0.375 10
3 0.117647 0.625 6
4 0.411765 1.000 6
5 0.647059 0.625 5
6 0.764706 0.625 9
7 1.000000 0.000 12

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

Дополнительные ресурсы

В следующих руководствах представлена дополнительная информация о нормализации данных:

Как нормализовать данные между 0 и 1
Как нормализовать данные от 0 до 100
Стандартизация и нормализация: в чем разница?

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.