LightGBM использует сильно искаженные вправо данныеPython

Программы на Python
Ответить
Anonymous
 LightGBM использует сильно искаженные вправо данные

Сообщение Anonymous »

Преамбула: Я работаю с искаженным набором данных, где из ~7000 точек данных только ~2500 являются ненулевыми значениями, причем наиболее интересными точками данных являются крайне правые выбросы. Я надеюсь использовать LightGBM для прогнозирования этих целевых данных на основе ряда функций, но у меня возникли проблемы из-за асимметрии данных. Я рассматривал возможность использования преобразований (например, log, sqrt, box-cox), но они не улучшили производительность модели машинного обучения.
Изображение

Я наткнулся на imblearn.oversampling, который может быть решением моих проблем. Он создает синтетические выборки для выбросов, чтобы у модели было больше точек данных для обучения. Однако, поскольку я работаю с целыми числами, а не с классификациями, мне нужно объединить данные. Я настроил свой код следующим образом:

Код: Выделить всё

# Set up continous target for SMOTE
binning = KBinsDiscretizer(n_bins=200, encode='ordinal', strategy='quantile')
targets['binned'] = binning.fit_transform(new_targets.values.reshape(-1, 1)).ravel()

# Define the dynamic sampling strategy for SMOTE
smote_sampling_strategy = {i: 125 for i in range(1, 83)}
# Apply SMOTE with the adjusted strategy
smote = SMOTE(sampling_strategy=smote_sampling_strategy, random_state=42)
features_upsampled, binned_targets_upsampled = smote.fit_resample(features, new_targets['binned'])

# Replace the binned target with continuous values
bin_centers = binning.inverse_transform(binned_targets_upsampled.to_numpy().reshape(-1, 1)).ravel()

# Reconstruct upsampled targets DataFrame
upsampled_targets = pd.DataFrame({
'new_hothr': bin_centers,
'binned': binned_targets_upsampled
})
Изображение

Вопрос:[/b]
Хотя мне бы хотелось использовать этот подход, у меня есть вопросы относительно лучших практик использования этого метода, которые четко не найдены в документации imblearn, например as: Как вы определяете количество ячеек, на которые нужно разделить данные? Как определить, сколько синтетических образцов нужно добавить? Как гарантировать, что этот метод не приведет к переобучению? Наконец, даже при повышении дискретизации, как описано выше, этот уточненный набор данных по-прежнему не может уловить 99-й процентиль выбросов в прогнозируемых LightGBM результатах тестирования/обучения (с использованием GridSearchCV для выбора гиперпараметров), поэтому, если у кого-то есть дополнительные предложения о том, как можно попробовать, я я весь в ушах.
Заранее всем спасибо за ваше время и идеи! -В

Подробнее здесь: https://stackoverflow.com/questions/793 ... kewed-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»