В этой статье обсуждаются преобразования, которые делают распределение вашей переменной более похожим на распределение Гаусса.

В моей предыдущей статье (Как узнать, является ли распределение моей переменной гауссовым?) мы обсуждали методы определения того, выглядит ли распределение переменной гауссовым.

Из этой статьи было обнаружено, что распределения переменных 0 и 1 набора данных Iris были ближе к распределению Гаусса, в то время как распределение переменных 2 и 3 было довольно далеко не распределение Гаусса. Ниже приведены графики плотности этих переменных.

Ниже приведены результаты теста Колмогорова-Смирнова для указанных выше переменных. Тест Колмогорова-Смирнова предполагает, что входная переменная имеет идеальное нормальное распределение. Следовательно, ни одна из переменных не выглядела как гауссова в тесте Колмогорова-Смирнова.

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

Метод 1: преобразование журнала

Логарифмическое преобразование вычисляет натуральный логарифм переменной, чтобы она больше походила на гауссову. Это преобразование может применяться только в том случае, если значения переменной больше 0 (поскольку log не определен для 0 и отрицательных чисел). Однако для использования этого преобразования можно выполнить масштабирование значений, чтобы они были положительными. Ниже приведена реализация преобразования журнала в Python. Я предпочитаю использовать ColumnTransformer для применения преобразований к данным.

Мы посмотрим на график плотности вышеуказанных переменных до и после логарифмического преобразования.

Мы видим, что переменные 0 и 1 выглядят почти так же, как и до применения логарифмического преобразования. Есть редуцирование одного из пиков переменных 2 и 3, но они не похожи на гауссовские. Мы рассмотрим результаты теста Колмогорова-Смирнова для вышеуказанных переменных до и после логарифмического преобразования.

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

Метод 2: обратное преобразование

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

Мы посмотрим на график плотности вышеуказанных переменных до и после обратного преобразования.

Мы видим, что переменные 0 и 1 выглядят почти так же, как и до применения обратного преобразования. Есть редуцирование одного из пиков переменных 2 и 3, но они не похожи на гауссовские. Рассмотрим результаты теста Колмогорова-Смирнова для указанных выше переменных до и после обратного преобразования.

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

Метод 3: преобразование экспоненты

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

Мы посмотрим на график плотности вышеуказанных переменных до и после квадратного преобразования.

На приведенных выше графиках видно, что переменные 0 и 1 выглядят как гауссовы, как и раньше, но переменная 3 больше похожа на гауссову (но не на идеальное гауссовское распределение) после квадратного преобразования по сравнению с предыдущими преобразованиями. Мы рассмотрим результаты теста Колмогорова-Смирнова для вышеуказанных переменных до и после квадратного преобразования.

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

Метод 4: преобразование Бокса-Кокса

Преобразование Бокса-Кокса — это эффективный метод (по сравнению с ранее обсуждавшимися методами) для преобразования распределения переменной, чтобы оно больше походило на гауссово. Недостатком этого метода является то, что он требует, чтобы значения переменной были больше 0. Однако для использования этого преобразования можно выполнить масштабирование значений, чтобы они были положительными.

Преобразование Бокса-Кокса ищет значение λ от -5 до 5 и использует лучшее значение λ, которое делает данные более гауссовыми. Ниже приведена реализация преобразования Бокса-Кокса в Python.

Мы посмотрим на график плотности вышеуказанных переменных до и после преобразования Бокса-Кокса.

Мы видим, что все переменные выглядят почти так же, как и до применения преобразования Бокса-Кокса. Мы рассмотрим результаты теста Колмогорова-Смирнова для вышеуказанных переменных до и после преобразования Бокса-Кокса.

Мы видим, что результаты теста Колмогорова-Смирнова показывают, что переменные 0 и 1 являются гауссовыми. Как упоминалось ранее, эти преобразования эффективны только тогда, когда распределение переменных перед преобразованием несколько близко к распределению Гаусса. Чтобы увидеть значения λ, выбранные для переменных, PowerTransformer должен соответствовать данным напрямую без ColumnTransformer.

Метод 5: преобразование Йео-Джонсона

Преобразование Йео-Джонсона похоже на преобразование Бокса-Кокса. Но Йео-Джонсона можно применять как к положительным, так и к отрицательным значениям переменной.

Ниже приведена реализация преобразования Йео-Джонсона в Python.

Мы посмотрим на график плотности вышеуказанных переменных до и после преобразования Йео-Джонсона.

Мы видим, что все переменные выглядят почти так же, как и до применения преобразования Йео-Джонсона. Мы рассмотрим результаты теста Колмогорова-Смирнова для вышеуказанных переменных до и после преобразования Йео-Джонсона.

Мы видим, что результаты теста Колмогорова-Смирнова показывают, что переменные 0 и 1 являются гауссовыми. Как упоминалось ранее, эти преобразования эффективны только тогда, когда распределение переменных перед преобразованием несколько близко к распределению Гаусса. Чтобы увидеть значения λ, выбранные для переменных, PowerTransformer должен соответствовать данным напрямую без ColumnTransformer.

Как мы видели выше, методы преобразования переменных работают только тогда, когда распределение переменной несколько близко к распределению Гаусса. Переменные с распределением, близкое к распределению Гаусса, нельзя сделать так, чтобы они выглядели гауссовскими с помощью этих преобразований. Также Бокс-Кокса и Йео-Джонсона оказались эффективными по сравнению с другими методами. Однако это зависит исключительно от ваших данных. В некоторых случаях первых трех обсуждаемых методов достаточно, чтобы преобразовать переменную, чтобы она больше походила на гауссову.