Python — Большие данные обучения и тестирования в libsvm

Я использую Libsvm в перекрестной проверке 5×2 для классификации очень большого количества данных, то есть у меня есть 47 тыс. Образцов для обучения и 47 тыс. Образцов для тестирования в 10 различных конфигурациях.

Я обычно использую скрипт Libsvm easy.py чтобы классифицировать данные, но это занимает так много времени, я ждал результатов более 3 часов и ничего, и мне все еще приходится повторять эту процедуру более 9 раз!

Кто-нибудь знает, как использовать libsvm быстрее с очень большим объемом данных? функции Libsvm в C ++ работают быстрее, чем функции python?

3

Решение

Обучающий алгоритм LibSVM не масштабируется до такого рода наборов данных; в наихудшем случае это занимает время O (n³), а в типичных — около O (n²). Первое, что нужно попробовать — правильно масштабировать наборы данных; если это все еще не работает, переключитесь на

  • линейный SVM (или логистическая регрессия) с использованием, например, Liblinear, Vowpal Wabbit или же вапити
  • более масштабируемая реализация ядра SVM, такая как LaSVM
6

Другие решения

Как упомянул Ларсман, libsvm может не так хорошо масштабироваться в зависимости от размерности данных и количества точек данных.

Реализация C может работать немного быстрее, но это не будет значительным отличием. У вас есть несколько вариантов, доступных для вас.

  • Вы можете случайно выбрать ваши данные для работы с небольшим подмножеством.
  • Вы можете проецировать свои данные в более низкое измерение с чем-то вроде PCA
  • В зависимости от вашего типа данных вы можете посмотреть на разные ядра. Сработает ли ядро ​​пересечения гистограммы для ваших данных? Используете ли вы ядро ​​RBF, когда вам действительно нужна линейная решающая функция?

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

3

easy.py — это скрипт для обучения и оценки классификатора. выполняет метатренинг для параметров SVM с помощью grid.py. в grid.py это параметр «nr_local_worker», который определяет количество потоков. Вы можете увеличить его (проверьте загрузку процессора).

0
По вопросам рекламы [email protected]