как бороться с несбалансированным классом? - PullRequest
0 голосов
/ 08 февраля 2020

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

  1. первый класс: 1089 данных
  2. второй класс: 486 данных
  3. третий класс: 748 данных
  4. четвертый класс: 617 данных
  5. пятый класс: 624 данные
  6. шестой класс: 2554 данные

, в общей сложности 6118 помеченных данных для 51 всех числовых признаков. существует множество признаков с высокой степенью корреляции (имеется 39 пар признаков с корреляцией выше 0,75 или ниже -0,75); по этой причине я попробовал выбор функции на основе высокой корреляции, а также PCA; Я использую модель, оптимизированную для поиска по сетке:

    svm = SVC(kernel='rbf', decision_function_shape='ovr')
param_grid = {'C': [50, 30, 100, 60, 25, 80],
              'gamma': [0.01, 0.1, 0.2, 0.3, 0.4, 0.5,0.001]}

grid = GridSearchCV(svm, param_grid, cv=10, scoring='f1_weighted',n_jobs=4,verbose=True)
grid.fit(all_train_data, train_target)
print(grid.best_params_)

, и я использовал F1_weighted для оценки результатов. мой вопрос: я делаю все правильно, или может быть что-то не хватает, что я мог бы сделать, связанные с фактами, что класс не сбалансирован (как параметр class_weight в SVM)?

1 Ответ

0 голосов
/ 08 февраля 2020

, пока разница между самым частым классом (шестым классом) и наименее частым (вторым классом) не будет в 5 раз больше, чем вторым классом, это может немного повлиять на вашу классификацию. Существует множество подходов к решению проблемы такого типа. Вы можете использовать Пакет с одинаковым количеством каждого класса каждый раз, когда вы его обучаете, или использовать увеличение данных или любые другие методы

...