scikit-learn: случайные параметры class_weight и sample_weight

У меня проблема дисбаланса класса и экспериментирование с взвешенным случайным лесом с использованием реализации в scikit-learn (> = 0,16).

Я заметил, что реализация принимает параметр class_weight в конструкторе дерева и sample_weight в методе подгонки, чтобы помочь устранить дисбаланс класса. Эти два, кажется, умножаются, хотя и принимают окончательный вес.

Мне трудно понять следующее:

  • На каких стадиях строительства/обучения/прогнозирования деревьев используются эти веса? Я видел несколько бумаг для взвешенных деревьев, но я не уверен, что делает scikit.
  • В чем же разница между class_weight и sample_weight?

Ответ 1

RandomForests построены на деревьях, которые очень хорошо документированы. Проверьте, как деревья используют взвешивание образцов:

Что касается разницы между class_weight и sample_weight: многое может быть определено просто по характеру их типов данных. sample_weight - это 1D массив длины n_samples, присваивающий явный вес каждому примеру, используемому для обучения. class_weight - это либо словарь каждого класса для равномерного веса для этого класса (например, {1:.9, 2:.5, 3:.01}), либо строка, сообщающая sklearn, как автоматически определять этот словарь.

Таким образом, вес обучения для данного примера является продуктом его явно названного sample_weight (или 1 если sample_weight не предоставлен), а class_weight (или 1 если class_weight не предоставлен).