У меня очень несбалансированный набор данных, из которого я хочу получить как классификацию (двоичную), так и вероятности. Мне удалось использовать регрессию 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 вопроса:
- Имеет ли смысл мой обходной путь использования выборочных весов для замены весов классов?
- Есть ли способ передать выборочные веса через cross_val_predict точно так же, как если бы вы использовали fit без перекрестной проверки?