2014-01-06 3 views
1

Я пытаюсь обучить классификатор LS-SVM на наборе данных, имеющих следующие размеры:LS-SVM обучение: Из памяти

обучающего набора данных: TS = 48000x12 (двойной)
группы: G = 48000x1 (двойной)

Matlab код тренировки:

class = svmtrain(TS,G,'method','LS',... 
       'kernel_function','rbf','boxconstraint',C,'rbf_sigma',sigma); 

Затем я получил сообщение об ошибке: USIN

ошибка g svmtrain (строка 516)
Ошибка при оценке функции ядра «rbf_kernel».

Вызванный:
Ошибка с помощью repmat
Из памяти. Введите HELP MEMORY для своих опций.

Обратите внимание, что размер физической памяти составляет 4 ГБ, и он работает, когда я уменьшаю размер обучения набора данных. Поэтому, если есть решение с одинаковым размером данных и, конечно, без добавления физической памяти.

+0

Сколько классов у вас есть в вашем наборе обучения? – lejlot

+0

@lejlot: 'svmtrain' Функция Matlab работает только по двоичной классификации, поэтому у меня есть только два класса. – Sofiane

+0

Возможно, вам удастся избежать использования Breeze в Scala для SVM. Мне не нравятся безрезультатные решения чего-либо, и Matlab всегда будет не в масштабе. Я предлагаю вам перейти на http://spark.incubator.apache.org/docs/latest/mllib-guide.html – samthebest

ответ

1

Кажется, что для реализации требуется вычисление всей матрицы Грама, размер N x N (где N - количество сампелей) в вашем случае - 2,304,000,000, теперь каждый из них представлен 32-битным поплавком, это означает, что требуется не менее 4 байтов, что дает 9,216,000,000 байтов, что примерно равно 9GB данных только для матрицы Gram (Kernel).

Есть два варианта:

    реализация
  • поиск которых для RBF ядра не вычислить ядро ​​(грамм) матрицы, но вместо того, чтобы использовать некоторые отозваны для вычисления значения Kernel каждый раз
  • Вы можете попробовать использовать какой-то приближении LS-SVM, как Fast разреженных Сближение наименьших квадратов Поддержка Vector Machine: http://homes.cs.washington.edu/~lfb/software/FSALS-SVM.htm
+0

Спасибо, что ответили. Но как вы вычислили число N? (зная, что у меня есть 48000 образцов для обучения и 12 функций) – Sofiane

+0

N = 48000, поэтому N * N = 2,304,000,000 – lejlot

+0

Второй вариант вашего ответа полезен, но это не устраняет проблему, потому что когда я пытаюсь интегрировать разработанные функции C (после компиляции 'mex'), Matlab сталкивается с внутренней проблемой и ее нужно закрыть. Кроме того, я предпочитаю решение, которое позволяет использовать функции Matlab (в частности, функции Matlab SVM для обучения и тестирования). Спасибо за полезное предложение. – Sofiane

Смежные вопросы