Вход
Регистрация

NN vs SVM vs RVM

Здравствуйте!

Решил попробовать новые методы для решения своей задачи. Вкратце подытожу преимущества и недостатки методик

+NN скорость обучения линейно зависит от числа входных примеров.
-NN у меня не получается повторно найти этот минимум обучения. Результаты оптимизаций отличаются. Надо избегать overfitting.

-SVM достаточно быстрый, но скорость похоже квадратично зависит от размера входных данных. Требуется процедура перебора на сетке для поиска оптимальных параметров C & Gamma. На входе был файл данных 30 мегабайт, 100 тысяч примеров для обучения. На выходе получился файл 13 мегабайт!!! Похоже слишком много векторов.

Еще SVM зависит от масштабирования данных, пока не разбирался, какой способ будет оптимальным. Использую сигмоидальное ядро и исходную базу входов, встречаются данные плюс минус 8.

-RVM самый медленный. Он на порядок тормознее SVM, но с другой стороны не требуется перебор на сетке. Я использую fast RVM, до сих пор не могу понять, какой порядок времени обучения от числа примеров, неужели кубическая степень? Текущая задача 100 000 входов обсчитывается уже 3 суток, результата до сих пор нет!

Мне интересно было сравнить разные методы обучения. RVM обучился только с 4000 входами, больше пока не потянул. На графике находит интересные зависимости. Скажем NN прогнозирует все значения близко к нулю. А вот RVM выделяет паттерны. Но при этом MSE & Corr показатели от RVM хуже!

SVM обучил до конца.
Corr( NN, Desired ) = 59.32%
Corr( SVM, Desired ) = 58.59%
Corr( NN, SVM ) = 96.05% видно оба метода нашли общую структуру данных и прогнозы весьма схожи

Далее я смешал результаты
res = ( NN + SVM ) / 2.0
Corr( res, Desired ) = 59.54% таким образом получилось совсем немножко улучшить прогнозируемость :)

Но я хочу большего. Да и файл сохранения в 13 мегабайт наводит на размышления :).

Теперь у меня есть подозрения, что с помощью текущей модели уже не получится улучшить прибыльность, надо менять саму идею.

Пока что пробую обучить другие наборы данных.

Подскажите пожалуйста, какую функцию кроме MSE можно использовать для обучения NN, мне похоже нужно что-то ближе к линейной функции ошибки. Есть статьи на эту тему?

С уважением,
Ярослав