Как нормализовать данные в python
Часто в статистике и машинном обучении мы нормализуем переменные таким образом, чтобы диапазон значений находился между 0 и 1.
Наиболее распространенной причиной нормализации переменных является то, что мы выполняем какой-либо тип многомерного анализа (т. е. мы хотим понять взаимосвязь между несколькими переменными-предикторами и переменной отклика) и хотим, чтобы каждая переменная вносила равный вклад в анализ.
Когда переменные измеряются в разных масштабах, они часто не вносят одинаковый вклад в анализ. Например, если значения одной переменной варьируются от 0 до 100 000, а значения другой переменной — от 0 до 100, то переменной с большим диапазоном будет присвоен больший вес при анализе.
Стандартизируя переменные, мы можем быть уверены, что каждая переменная вносит равный вклад в анализ.
Чтобы нормализовать значения между 0 и 1, мы можем использовать следующую формулу:
x норма = (x i – x min ) / (x max – x min )
Золото:
- x норма : 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
Следующий код показывает, как нормализовать все переменные в DataFrame pandas:
import pandas as pd #createDataFrame 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
Следующий код показывает, как нормализовать определенную переменную в DataFrame pandas:
import pandas as pd #createDataFrame 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] = (xx. 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
Стандартизация или нормализация: в чем разница?