Как выполнить преобразование Бокса-Кокса в Python

Как выполнить преобразование Бокса-Кокса в Python

Преобразование Бокса-Кокса — это широко используемый метод преобразования ненормально распределенного набора данных в более нормально распределенный .

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

  • y(λ) = (y λ – 1) / λ, если y ≠ 0
  • y(λ) = log(y), если y = 0

Мы можем выполнить преобразование box-cox в Python, используя функцию scipy.stats.boxcox() .

В следующем примере показано, как использовать эту функцию на практике.

Пример: преобразование Бокса-Кокса в Python

Предположим, мы генерируем случайный набор из 1000 значений, полученных из экспоненциального распределения :

#load necessary packages
import numpy as np 
from scipy. stats import boxcox 
import seaborn as sns 

#make this example reproducible
np.random.seed (0)

#generate dataset
data = np.random.exponential (size= 1000 )

#plot the distribution of data values
sns.distplot (data, hist= False , kde= True )

Мы видим, что распределение не является нормальным.

Мы можем использовать функцию boxcox() , чтобы найти оптимальное значение лямбда, которое дает более нормальное распределение:

#perform Box-Cox transformation on original data
transformed_data, best_lambda = boxcox(data) 

#plot the distribution of the transformed data values
sns.distplot (transformed_data, hist= False , kde= True ) 
Преобразование Бокса-Кокса в Python

Мы видим, что преобразованные данные следуют гораздо более нормальному распределению.

Мы также можем найти точное значение лямбда, используемое для выполнения преобразования Бокса-Кокса:

#display optimal lambda value
print(best_lambda)

0.2420131978174143

Было обнаружено, что оптимальная лямбда составляет примерно 0,242 .

Таким образом, каждое значение данных было преобразовано с использованием следующего уравнения:

Новый = (старый 0,242 – 1) / 0,242

Мы можем подтвердить это, посмотрев значения исходных данных по сравнению с преобразованными данными:

#view first five values of original dataset
data[0:5]

array([0.79587451, 1.25593076, 0.92322315, 0.78720115, 0.55104849])

#view first five values of transformed dataset
transformed_data[0:5]

array([-0.22212062, 0.23427768, -0.07911706, -0.23247555, -0.55495228])

Первое значение в исходном наборе данных было 0,79587.Таким образом, мы применили следующую формулу для преобразования этого значения:

Новый = (0,79587 0,242 – 1) / 0,242 = -0,222

Мы можем подтвердить, что первое значение в преобразованном наборе данных действительно равно -0,222 .

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

Как создать и интерпретировать график QQ в Python
Как выполнить тест Шапиро-Уилка на нормальность в Python

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