Вопрос или проблема
В настоящее время у меня есть модель, которая имеет несколько числовых Y или предсказываемых переменных.
Пример данных:
Y1 | Y2 | … | YN |
---|---|---|---|
2710 | 0.32 | … | 31231 |
1710 | 0.52 | … | 51231 |
В настоящее время я использую регрессию (многовыходную регрессию с градиентным бустингом) для предсказания переменных Y.
На данный момент я не доволен точностью и ищу способы повышения точности. Мне порекомендовали использовать дискретизацию, чтобы я мог рассматривать Y как интервалы или квинтильи. т.е:
Y1 | Y2 | … | YN |
---|---|---|---|
2000 – 3000 | 0.3 – 0.4 | … | 30000 – 40000 |
1000 – 2000 | 0.5 – 0.6 | … | 51000 – 50000 |
Как я могу это сделать? Какие алгоритмы или библиотеки выполняют это? Я нахожу в интернете, как дискретизировать признаки, но не так много о самой дискретизации данных. Мне нужно вручную сформировать обученные данные в интервалы, а затем обучаться на них?
Я полагаю, что спрашиваю, куда двигаться дальше в плане кода.
Одним из вариантов является KBinsDiscretizer от scikit-learn, который разбивает непрерывные данные на интервалы.
Ответ или решение
Преобразование непрерывных данных в задачу классификации с использованием биннинга
Введение
При работе с непрерывными переменными в задачах моделирования часто возникает необходимость улучшить точность предсказаний. Один из подходов — это преобразование непрерывных данных в категориальные, использовав биннинг (дискретизацию). Это решение может быть особенно полезным, когда предсказываемые переменные имеют сложное распределение или когда модели регрессии не дают требуемого уровня точности.
Почему биннинг?
Биннинг позволяет разбить непрерывные данные на категории, что может помочь моделям лучше справляться с задачами классификации. Такой подход имеет свои преимущества:
- Упрощение анализа: Классификация может быть понятнее для анализаторов данных и конечных пользователей.
- Уменьшение влияния выбросов: Биннинг помогает смягчить влияние крайних значений, сглаживая разницу между наблюдениями.
- Лучшая производительность моделей: Некоторые алгоритмы могут показывать лучшие результаты при работе с категориальными данными по сравнению с непрерывными.
Как осуществить биннинг?
Для того, чтобы приступить к биннингу данных Y1, Y2, …, YN, можно использовать библиотеку Scikit-learn, которая предлагает инструменты для дискретизации данных. В частности, класс KBinsDiscretizer
позволяет выполнять эту задачу довольно просто.
Вот шаги, которые необходимо выполнить:
-
Импортировать необходимые библиотеки:
import numpy as np import pandas as pd from sklearn.preprocessing import KBinsDiscretizer
-
Подготовить данные: Заготовьте ваши данные в виде массива NumPy или DataFrame, убедившись, что все непрерывные переменные готовы к дискретизации.
-
Сконфигурировать и применить KBinsDiscretizer:
# Создайте экземпляр KBinsDiscretizer discretizer = KBinsDiscretizer(n_bins=5, encode='ordinal', strategy='uniform') # Примените дискретизацию к данным Y_binned = discretizer.fit_transform(data[['Y1', 'Y2', 'YN']])
В этом коде:
n_bins
определяет количество корзин для каждой переменной.encode
задаёт способ кодирования (например,ordinal
).strategy
определяет метод создания корзин (‘uniform’ означает равные интервалы).
-
Перевести бinned данные в DataFrame: Очень полезно преобразовать выходные данные обратно в DataFrame для более удобного анализа.
Y_binned_df = pd.DataFrame(Y_binned, columns=['Y1_binned', 'Y2_binned', 'YN_binned'])
-
Моделирование: Теперь, когда у вас есть дискретизированные данные, вы можете использовать классификационные алгоритмы, такие как:
- Деревья решений (например, Decision Trees)
- Случайный лес (Random Forest)
- Градиентный бустинг (например, XGBoost, LightGBM)
Например, для тренировки модели можно использовать:
from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier() model.fit(X_train, Y_binned_df)
Заключение
Преобразование непрерывных переменных в бины либо квинтильные группы может значительно повысить точность ваших моделей, особенно если данные показали сложные зависимости. Использование KBinsDiscretizer
в Scikit-learn упрощает процесс, позволяя легко управлять выводом и применением новых методов классификации.
Попробуйте этот подход на своих данных и проанализируйте производительность. Вы можете заметить значительные улучшения в точности и устойчивости ваших моделей после дискретизации.