Как использовать веса классов для GaussianNB и KNeighborsRegressor в sklearn? - PullRequest
2 голосов
/ 17 июня 2020

У меня очень несбалансированный набор данных, из которого я хочу получить как классификацию (двоичную), так и вероятности. Мне удалось использовать регрессию logisti c, а также случайный лес для получения результатов от cross_val_predict с использованием весов классов.

Я знаю, что RandomForestClassifier и LogisiticRegression могут принимать вес класса в качестве аргумента, а KNeighborsRegressor и GaussianNB - нет. Однако для KNN и NB в документации говорится, что для этого я могу использовать подгонку, которая включает в себя выборочные веса:

fit(self, X, y, sample_weight=None)

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

c_w = class_weight.compute_class_weight('balanced', np.unique(y), y)
sw=[]
for i in range(len(y)):
    if y[i]==False:
        sw.append(c_w[0])
    else:
        sw.append(c_w[1])

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

Проблема теперь в том, что я хочу использовать этот метод в

cross_val_predict()

sklearn, однако мне не удается передать веса выборки через перекрестную проверку.

У меня 2 вопроса:

  1. Имеет ли смысл мой обходной путь использования выборочных весов для замены весов классов?
  2. Есть ли способ передать выборочные веса через cross_val_predict точно так же, как если бы вы использовали fit без перекрестной проверки?

1 Ответ

0 голосов
/ 18 июня 2020
  1. см. Ответ на этот пост для описания разницы в весах выборки и класса. В общем, если вы используете веса классов, вы «информируете свою модель» о дисбалансе классов. Если вы используете веса выборки, вы даете своей модели понять, что некоторые образцы должны быть «более внимательно рассмотрены» или вообще не учитываться.

  2. аргумент fit_params должен работать, см. здесь :

    fit_params: dict, defualt = None - параметры для передачи методу подбора оценщика.

...