Имея ограниченные знания о SVM, он подходит для короткой и полной матрицы данных (много функций и не слишком много экземпляров), но не для больших данных.
Я понимаю, что одной из причин является то, что матрица ядра - это матрица n × n, где n - количество экземпляров в данных. Если мы скажем, 100K данных, матрица ядра K будет иметь 10 10 элементов и может занимать ~ 80G памяти.
Есть ли какая-либо модификация SVM, которую можно использовать в больших данных? (Скажите по шкале от 100К до 1М точек данных?)
machine-learning
svm
large-data
Хайтау Ду
источник
источник
Ответы:
Как вы упоминаете, для хранения матрицы ядра требуется память, которая квадратично масштабируется с количеством точек данных. Время обучения для традиционных алгоритмов SVM также масштабируется суперлинейно с количеством точек данных. Таким образом, эти алгоритмы не подходят для больших наборов данных.
Один из подходов к аппроксимации ядра использует приближение Нистрома (Williams and Seeger 2001). Это способ приблизить собственные значения / собственные векторы большой матрицы, используя меньшую подматрицу. Другой подход использует рандомизированные функции и иногда называется «случайными кухонными мойками» (Rahimi and Recht 2007).
Еще один прием для обучения SVM на больших наборах данных - приблизить задачу оптимизации с помощью набора меньших подзадач. Например, использование стохастического градиентного спуска в основной задаче является одним из подходов (среди многих других). Большая работа была проделана в области оптимизации. Менон (2009) дает хороший обзор.
Рекомендации
Уильямс и Сигер (2001). Использование метода Nystroem для ускорения машин с ядром.
Рахими и Рехт (2007). Случайные функции для больших машин с ядром.
Менон (2009) . Масштабные опорные векторные машины: алгоритмы и теория.
источник