Классификация с высокими показателями жира

15

Мне нужно обучить линейный классификатор на моем ноутбуке с сотнями тысяч точек данных и около десяти тысяч функций. Какие у меня варианты? Каково современное состояние для такого рода проблем?

Кажется, что стохастический градиентный спуск является перспективным направлением, и я чувствую, что это состояние дел:

«Pegasos: первичный оцененный субградиентный раствор для SVM» Шай Шалев-Шварц, Йорам Сингер, Натан Сребро, Эндрю Коттер. «Математическое программирование, серия B, 127 (1): 3-30, год: 2007».

Это консенсус? Должен ли я смотреть в другом направлении?

carlosdc
источник
1
Рассматривали ли вы использовать некоторые методы уменьшения размеров? тысячи функций требуют сокращения размерности см: en.wikipedia.org/wiki/Dimension_reduction
Дов
Этот вопрос можно улучшить с помощью исследований. Есть ли у вас какие-либо техники в виду?
Тамзин Блейк
@ Thom Blake: Я немного отредактировал вопрос своими мыслями.
Carlosdc
Не зная больше о данных, любой ответ будет неосведомленным. Это редкость? непрерывно? дискретная? избыточные функции / объекты? сколько классов? Например, PCA на редких данных иногда может быть вредным.
Киборг
2
высокий = много очков? жир = много возможностей? эта терминология где-либо используется в ссылках?

Ответы:

6

Я думаю, что вы должны смотреть на методы онлайн-обучения . Персептрон и персептрон ядро очень легко кода и работать очень хорошо на практике, и существует целый ряд других онлайновых методов. Обратите внимание, что любой метод онлайн-обучения может быть преобразован в алгоритм пакетного обучения, и в этом случае они очень похожи на методы стохастического градиентного спуска.

Если вы используете Matlab, есть действительно хороший набор инструментов под названием DOGMA от Francesco Orabona, который содержит ряд алгоритмов онлайн-обучения, и вы можете оценить несколько различных методов, используя это. Я использовал это в некоторых своих исследованиях и нашел, что это очень полезно (обратите внимание, что, насколько я помню, данные ожидаются как [функции x примеров], поэтому вам, возможно, придется их транспонировать).

Как уже упоминалось, вы можете попробовать уменьшить размерность. PCA может быть не очень хорошим вариантом, так как вам нужно вычислить ковариационную матрицу, которая будет очень дорогой. Вы можете попробовать посмотреть на случайные проекции . Теория жесткая, но принцип очень прост. Он основан на Джонсон-Линденштраус лемме , если вы заинтересованы, но основная идея заключается в том, что если вы случайно проецировать в нижнее пространство, то расстояние между точками сохраняются до некоторых е . Если вы используете ядро РФБ, то 2 расстояния все , что вы заинтересованы в!2ϵ2

TDC
источник
7

Во-первых, я хотел бы спросить вас, как вы знаете, линейный классификатор является лучшим выбором? Интуитивно понятно, что для такого большого пространства (R ^ 10000) возможно, что какой-то другой нелинейный классификатор является лучшим выбором.

Я предлагаю вам попробовать несколько разных классификаторов и наблюдать ошибки предсказания (я бы попробовал несколько регуляризованных моделей классификации).

Если вам не хватает памяти, уменьшите размер с помощью PCA

Niko
источник
2
Благодарю. Я больше думал о том, как справиться с масштабом проблемы. Я хотел начать с линейного, потому что это проще. Я думаю, что вы предлагаете метод, основанный на ядре. Позвольте мне отметить, что если у меня 750000 точек данных, то размер ядра будет 540 ГБ. Поэтому ответ не может быть: подключите его к LIBSVM / SVMLight / etc, получите хороший C и гамму и посмотрите, что вы получите.
Carlosdc
2
(-1) ответ а) частично настолько общий, что его можно применить к любому вопросу классификации; б) не объясняется, почему рекомендуется PCA (по сравнению с любым другим методом уменьшения размерности).
Штеффен
3

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

Вот документ, который описывает это (но я рекомендую сделать свой собственный поиск): http://users.ics.tkk.fi/oja/Oja1982.pdf , и вот ссылка на кое-что, что может работать с реализацией matlab: http : //www.cs.purdue.edu/homes/dgleich/projects/pca_neural_nets_website/index.html .

ДБ.
источник
1

Как предположил jb, я думаю, что лучше использовать метод «Уменьшение размеров». Принципиальный компонентный анализ (PCA) является популярным выбором. Также вы можете попробовать неконтролируемые методы обучения. Для получения дополнительной информации об обучении неконтролируемой функции можно найти по адресу http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial

Upul
источник
1
PCA не PAC;) ( 15 символов )
нейрон