Найкращий спосіб обробляти незбалансований набір даних багаторівневих класів за допомогою SVM


9

Я намагаюся побудувати модель прогнозування з SVM на досить незбалансованих даних. Мій етикетки / вихід мають три класи: позитивний, нейтральний та негативний. Я б сказав, що позитивний приклад становить приблизно 10 - 20% моїх даних, нейтральний - 50 - 60%, а негативний - 30 - 40%. Я намагаюся збалансувати класи, оскільки вартість, пов’язана з невірними прогнозами серед класів, не однакова. Одним із методів було переупорядкування навчальних даних та створення настільки ж збалансованого набору даних, який був більшим за вихідний. Цікаво, що коли я це роблю, я, як правило, отримую кращі прогнози для іншого класу (наприклад, коли я збалансував дані, я збільшив кількість прикладів для позитивного класу, але за вибірковими прогнозами, негативний клас зробив краще). Кожен може пояснити взагалі, чому це відбувається? Якщо я збільшить кількість прикладів для негативного класу, чи отримаю я щось подібне для позитивного класу у вибіркових прогнозах (наприклад, кращі прогнози)?

Також дуже відкриті до інших думок щодо того, як я можу вирішити незбалансовані дані або через накладення різних витрат на помилкову класифікацію, або за допомогою вагових класів у LibSVM (не знаю, як правильно вибрати / налаштувати їх).

Відповіді:


6

Існування різних штрафних санкцій для змінних запасних змін для шаблонів кожного класу є кращим підходом, ніж перекомпонування даних. Це асимптотично рівнозначне перекомплектування в будь-якому разі, але воно зручніше в реалізації та безперервно, а не дискретно, тому у вас є більше контролю.

Однак вибір ваг не є простим. В основному ви можете розробити теоретичне зважування, яке враховує витрати на помилкову класифікацію та різниці між навчанням, встановлюючи ймовірності попереднього класу, але це не дасть оптимальних показників. Найкраще робити вибір штрафних санкцій / ваг для кожного класу шляхом мінімізації втрат (з урахуванням витрат на помилкову класифікацію) шляхом перехресної перевірки.


Чи існує автоматизований спосіб, як це зробити, чи є учні, які мають цю функціональність?
Вам

Зазвичай я просто записую функцію matlab, щоб оцінити втрати для певного набору штрафних санкцій, а потім мінімізувати її за допомогою симплексного алгоритму Nelder-Mead. Я не знаю жодної бібліотеки, в яку вбудовано це.
Дікран Марсупіал

@DikranMarsupial Чи буде пошук в сітці двох змінних запасних змін у двокласовій задачі еквівалентний тому, що ви робите з алгоритмом симплекс?
Спейсі

@Tarantula так, метод точної оптимізації є відносно неважливим, ключовим моментом є переконатися, що ви оптимізуєте статистику перехресної перевірки, яка вас справді цікавить для вашої програми (тобто одні й ті ж частоти класів, що зустрічаються в оперативному використанні та з урахуванням витрат на помилкову класифікацію, якщо вони відомі).
Дікран Марсупіал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.