Scikit-learn: Вектор релевантности (RVM)

Созданный на 3 янв. 2013  ·  68Комментарии  ·  Источник: scikit-learn/scikit-learn

RVM - это байесовская структура для получения разреженных решений задач регрессии и классификации. Он использовал модель, идентичную SVM (Support Vector Machine). Он устраняет следующие недостатки SVM:
- Количество базисных функций в SVM линейно растет с размером обучающей выборки.
В RVM мы начинаем с нулевого базиса и постепенно обновляем (добавляем / удаляем) набор базовых функций до сходимости.

- Предсказания SVM не являются вероятностными, а прогнозы RVM - вероятностными.

- В SVM необходимо оценить параметр компромисса маржи 'C', чего нет в RVM.

- Ядро SVM должно быть положительно определенным. В RVM мы можем использовать любое ядро.

Он уже реализован в dlib http://dlib.net/dlib/svm/rvm_abstract.h.html, а здесь также есть реализация Matlab http://www.vectoranomaly.com/downloads/downloads.htm. Эти коды должны служить руководством.
Думаю, неплохо было бы добавить его в scikit-learn.

Использованная литература :
1- Tipping, M. E. and A. C. Faul (2003). Fast marginal likelihood maximisation for sparse Bayesian models. In C. M. Bishop and B. J. Frey (Eds.), Proceedings of the Ninth International Workshop on Artificial Intelligence and Statistics, Key West, FL, Jan 3-6.

2- Tipping, M. E. (2001). Sparse Bayesian learning and the relevance vector machine. Journal of Machine Learning Research 1, 211–244.

New Feature

Самый полезный комментарий

Привет @amueller и всем! Мы увидели эту тему и решили реализовать версию RVM, совместимую с sklearn (https://github.com/Mind-the-Pineapple/sklearn-rvm). Многое из того, что мы делали, мы основывали на реализации Джеймса Ричи. Было бы здорово, если бы кто-то захотел взглянуть на него, и отзывы и комментарии (@themrzmaster) приветствуются :)
У нас есть планы по поддержанию этого репозитория, реализации быстрой версии в версии 0.2, и мы надеемся, что, возможно, когда-нибудь этот код будет полезен для основного репозитория scikit-learn 😊 🍍

Все 68 Комментарий

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

Надо схватить моего епископа.

Какая связь между ARD и RVM? Является ли RVM всего лишь версией ARD с «базовой функцией»?

Кстати, кого-нибудь беспокоило, что в разделе Generalized Linear Models нет обобщенных моделей?

Итак, мы должны использовать sequential sparse learning algorithm Bishop p. 352 следующих, я полагаю?
Познай себя;)

Интересно, есть ли подобный метод при ОРЗ? Это было бы круто, поскольку текущая реализация ARD довольно медленная: - /

Нет, реализация RVM определенно не использует SMO. Я думаю, что SMO используется только для оптимизации SVM.
Да, мы должны использовать sequential sparse learning algorithm в ссылке 1, стр. 7. (это епископ, стр. 352? Какой именно). Этот алгоритм достаточно «простой», и мы можем написать его без использования dlib. Я думал написать его на python, а затем использовать cython для оптимизации. В этом случае мы можем в полной мере воспользоваться реализацией Matlab. Что вы думаете?
В любом случае, должно быть возможно писать на C ++. Но для этого нам понадобится хорошая библиотека линейной алгебры на C ++. Я не уверен, что scikit-learn по умолчанию поставляется с одним из них.

Бишоп - это «Машинное обучение и распознавание образов».

Алгоритм, вероятно, не совсем прост. Если вы хотите начать с этого, это определенно будет более крупный проект. Если вам интересно и вы хотите реализовать это каким-либо образом, продолжайте.

Реализация этого также немного отличается от внедрения в scikit-learn. Это также включает в себя написание тестов, документации, руководства пользователя и красивого кода.

Для первой попытки вам определенно следует использовать только numpy. Он внутренне использует blas и поэтому работает довольно быстро.
Ускорение использования Cython имеет смысл только в том случае, если есть много накладных расходов на Python. Если все время тратиться на вызовы BLAS, использование Cython не имеет особого смысла.

ОК для Cython и numpy. Я не знал, что епископ говорит о RVM.
Для отношений ARD и RVM. Я мало что знаю об ARD. Но в ссылке 2 авторы сказали, что RVM основан на ARD: «Мы называем те обучающие векторы, связанные с остальными векторами релевантности ненулевых весов, из уважения к принципу автоматического определения релевантности, который мотивирует представленный подход». (213) строка 8.
В любом случае, как ARD работает?

ARD также объясняется в книге Bishops и в руководстве пользователя . Он ставит диагональный гауссовский априор на веса и пытается оценить дисперсию, что (насколько я понимаю) то же самое, что и RVM. Это правильно?

Я понимаю, что рефери упомянул:

http://books.nips.cc/papers/files/nips20/NIPS2007_0976.pdf

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

Спасибо @agramfort , мне было интересно об этом. Я не стал вдаваться в подробности, но подумал, поскольку статья была единственной ссылкой ...

Я был бы очень признателен, если бы вы могли добавить туда комментарий со ссылкой на главу епископа, которая использовалась, возможно, говоря, что вместо этого мы должны реализовать другой документ.

(кстати, из самых медленных вещей в наборе тестов сейчас подходит ARD на бостонском наборе данных в общих тестах)

Спасибо @agramfort , мне было интересно об этом. Я не стал вдаваться в подробности, но подумал, поскольку статья была единственной ссылкой ...

Я был бы очень признателен, если бы вы могли добавить туда комментарий со ссылкой на главу епископа, которая использовалась, возможно, говоря, что вместо этого мы должны реализовать другой документ.

см .: https://github.com/scikit-learn/scikit-learn/pull/1530

Кстати, никого не беспокоил тот факт, что раздел Generalized Linear
Models не содержит обобщенных моделей?

Это делает: логистические регрессии.

Интересно, есть ли подобный метод при ОРЗ? Это было бы круто, как
текущая реализация ARD довольно медленная: - /

Я считаю, что наиболее многообещающим средством быстрого решения ARD является реализация
стратегия представлена ​​в:
http://books.nips.cc/papers/files/nips20/NIPS2007_0976.pdf

Я изложил суть кода, написанного недавно.

Если кто-то захочет поработать над ARD, я подумал, что это может быть полезно.

https://gist.github.com/4494613

ВНИМАНИЕ: это не так много проверено, и я не гарантирую правильность, но это
вроде работает.

@amueller
Я проанализировал ARD в http://books.nips.cc/papers/files/nips20/NIPS2007_0976.pdf и думаю, что RVM и ARD хотят оптимизировать одну и ту же целевую функцию. Разница проявляется в методе оптимизации этой функции. В RVM авторы заметили, что большая часть веса будет близка к нулю, и они использовали это для получения «быстрого» алгоритма.

Звучит странно. Если цель одна, у вас должна быть возможность использовать те же методы для оптимизации, верно?

Да, конечно, вам стоит, но я думаю, что авторы RVM использовали другую стратегию оптимизации, чтобы получить более быстрый и разреженный алгоритм.

@yedtoss Я почти уверен, что есть еще

@agramfort знаете что-нибудь о разнице ARD и RVM?

@amueller
Изначально RVM - это метод регрессии. Но авторы представили способ использовать его для классификации. RVM использует любое ядро.
Я имею в виду, что логарифмическая вероятность ARD (уравнение 2 нового взгляда на автоматическое определение релевантности) и RVM (уравнение 7 быстрой максимизации предельного правдоподобия для разреженных байесовских моделей) идентичны.

Думаю, мне нужно было бы прочитать газеты, чтобы узнать, что происходит ...

извините, ребята, я не большой байесовский парень ... Я не очень хорошо разбираюсь в
тонкости ...

сумасшедший.

@larsmans @amueller, хотя в США есть патент на RVM, автор рекомендует реализацию Matlab под GPLv2 на своей веб-странице, так что, я думаю, ее можно реализовать ...
http://www.miketipping.com/sparsebayes.htm

Лучший,
Ангелос

@kalxas Лицензия и патент совершенно ортогональны, и GPLv2, в частности, не

Тем не менее, тем временем я узнал, что машины опорных векторов запатентованы AT&T, но, по всей видимости, патент никогда не применялся. Если что-то подобное можно будет доказать в отношении RVM, я могу изменить свое мнение о них.

@larsmans Я написал чистый порт numpy / python для реализации dlib (на данный момент ужасно медленный, я попытаюсь его цитонизировать). Судя по заголовку, инструмент dlib существует с 2008 года, и, похоже, они его устраивают. Не могли бы вы изменить свое мнение о RVM в sklearn?

Давайте послушаем мнение @GaelVaroquaux по этому

Есть ли обновления по этой теме? В последнее время я смотрел на RVM и задавался вопросом, есть ли там какой-нибудь код ...

Я не думаю, что кто-то пытался осуществить быструю реализацию, и мы все еще не уверены в правовом статусе.

@jlopezpena Взгляните на dlib, код довольно ясен, и это только заголовок (шаблоны). Должно быть довольно легко создать расширение C для использования из numpy

Всем привет,

Я недавно перевел свободно доступную программу MATLAB SparseBayes Майка Типпинга, которая в основном реализует RVM, из MATLAB в Python. Его можно найти здесь: https://github.com/jhallock7/SparseBayes-Python . Я связался с Майком Типпингом, и он сказал, что патент Microsoft предназначен только для оригинального медленного алгоритма, тогда как программа SparseBayes использует более быстрый, найденный здесь: http://www.miketipping.com/papers/met-fastsbl.pdf . Так что было бы хорошо, если бы какую-то форму его программы свернули в scikit-learn. Я относительно новичок в Python, поэтому мой перевод, несомненно, можно улучшить или изменить.

Спасибо за желание внести свой вклад, а также за проверку статуса патента.
Однако возникает другой вопрос: насколько полезны эти алгоритмы?

Я не рассматривал алгоритм и его использование с тех пор, как в последний раз читал книгу Бишопа, то есть некоторое время назад.
Я думаю, что интересным примером было бы показать, что это либо дает большую неопределенность, чем калибровка
SVM или что он быстрее (для калибровки SVM и поиска по C требуется много перекрестной проверки).

@amueller RVM (в основном регрессия вектора раскрытия (RVR)) очень полезен при анализе данных нейровизуализации. Во многих работах для прогнозирования используется этот метод, а не SVR. Было бы прекрасно, если бы этот метод можно было добавить в набор инструментов scikit learn.

@amueller Я реализовал медленную версию RVM, которая может использовать либо алгоритм EM, либо алгоритм с фиксированной точкой для соответствия модели (в основном для учебных / академических целей), и основное различие между RVM и SVR, которое я заметил из нескольких примеров, - это разреженность, т.е. 'векторы, используемые в прогнозировании. Во многих случаях RVM дает результаты, сравнимые с SVR, при этом количество поддерживающих векторов составляет лишь часть того, что использует SVR.
( вот один простой пример, который также используется в Tipping 2001)

@amueller (добавление к предыдущему комментарию) И, очевидно, небольшое количество опорных векторов подразумевает очень быстрое предсказание.
Еще одно преимущество RVM - вероятностное лечение. С помощью RVM для каждой точки данных в тестовом наборе вы найдете не только точечную оценку, но и прогнозное распределение.

RVR также обеспечивает распределение вероятностей?

Похоже, что RVR и RVM - разумные кандидаты для включения. Однако я не уверен в современных алгоритмах. Это http://www.miketipping.com/papers/met-fastsbl.pdf ? Это кажется довольно старым. Стиль кодирования SparseBayes .... интересен, и я думаю, что он будет лучше служить справочником, чем основой для реализации sklearn.

Да, RVR предоставляет вероятностные распределения, однако в некоторых случаях дисперсия прогнозируемого распределения может быть меньше для точек данных за пределами области примера обучающего набора.
Насколько мне известно, упомянутый вами документ является последней версией RVM, он также соответствует реализации Matlab на веб-сайте Tipping (версия 2).

Я также нашел интересное сравнение скорости RVM и SVM в книге Кевина Мерфи:
«RVM также быстрее всего обучается. И это несмотря на то, что код RVM находится в Matlab, а код SVM - на C» (Глава 14, стр. 490). Однако кажется, что они сделали сравнения только для небольших наборов данных.

@amueller RVM (в основном векторная регрессия раскрытия (RVR)) очень полезен в
Анализ данных нейровизуализации.

Я не уверен (и я делаю нейровизуализацию). Я не видел хорошего
эмпирическое сравнение.

Я вижу, что можно использовать RVM в отдельном пакете с
scikit-learn API, и поощрять хорошую эмпирическую работу, чтобы показать их
полезность. Если они полезны, объедините их в scikit-learn.

В некоторых исследованиях нейровизуализации использовалась регрессия релевантного вектора (RVR) и
сделали сравнения между RVR и SVR.
Чтобы перечислить несколько:
http://www.sciencedirect.com/science/article/pii/S1053811910000108
http://www.sciencedirect.com/science/article/pii/S1053811910012644
http://www.sciencedirect.com/science/article/pii/S1053811910003459
http://www.nature.com/npp/journal/v39/n3/abs/npp2013251a.html

И RVR реализован в наборе инструментов распознавания образов для
Данные нейровизуализации:
http://www.mlnl.cs.ucl.ac.uk/pronto/

Надеюсь, что RVR можно будет включить в scikit-learn.

С наилучшими пожеланиями

Zaixu

В четверг, 15 октября 2015 г., в 12:57, Гаэль Вароко [email protected]
написал:

@amueller RVM (в основном векторная регрессия раскрытия (RVR)) довольно
полезно в
Анализ данных нейровизуализации.

Я не уверен (и я делаю нейровизуализацию). Я не видел хорошего
эмпирическое сравнение.

Я вижу, что можно использовать RVM в отдельном пакете с
scikit-learn API, и поощрять хорошую эмпирическую работу, чтобы показать их
полезность. Если они полезны, объедините их в scikit-learn.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/scikit-learn/scikit-learn/issues/1513#issuecomment -148281784
.

Я вижу, что лучше всего иметь RVM в отдельном пакете с API scikit-learn и поощрять хорошую эмпирическую работу, чтобы показать их полезность. Если они полезны, объедините их в scikit-learn.

+1

Я имею в виду, что существует https://github.com/AmazaspShumik/Bayesian-Regression-Methods/blob/master/Relevance%20Vector%20Machine%20%26%20ARD/rvm.py, который выглядит относительно совместимым. требуется set_params и get_params или наследование от BaseEstimator .

И есть https://github.com/jhallock7/SparseBayes-Python, который можно обернуть.

@ZaixuCui, почему вы хотите, чтобы он был в scikit-learn, когда есть готовая к использованию реализация?

Я склонен согласиться с @GaelVaroquaux и @mblondel . Если почти десять лет никто не писал об алгоритмах, люди, похоже, не очень заинтересованы. [ой, стандартный алгоритм еще с 2003 года. но опять же libsvm - 2005]

Поскольку я использую scikit, научитесь делать SVR, elastic-net.
Итак, если есть реализация RVR, мне не нужно будет использовать Matlab, когда
делать анализ машинного обучения.

Большое спасибо.
Желает вам всего наилучшего

Zaixu

15 октября 2015 г., в 11:13, Андреас Мюллер [email protected]
написал:

Я имею в виду, что есть
https://github.com/AmazaspShumik/Bayesian-Regression-Methods/blob/master/Relevance%20Vector%20Machine%20%26%20ARD/rvm.py
что выглядит относительно совместимым. нужны set_params и get_params или
унаследованный от BaseEstimator.

И есть https://github.com/jhallock7/SparseBayes-Python, который может
быть завернутым.

@ZaixuCui https://github.com/ZaixuCui, почему вы хотите, чтобы он был в
scikit-learn, когда появится готовая к использованию реализация?

Я склонен согласиться с @GaelVaroquaux https://github.com/GaelVaroquaux
и @mblondel https://github.com/mblondel . Если никто не опубликовал
алгоритмы почти за десять лет, люди, кажется, не очень интересуются.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/scikit-learn/scikit-learn/issues/1513#issuecomment -148440665
.

Поскольку я использую scikit, научитесь делать SVR, elastic-net.
Итак, если есть реализация RVR, мне не нужно будет использовать Matlab, когда
делать анализ машинного обучения.

Вы можете использовать код Python для выполнения RVR, на который мы указали в
обсуждение.

Хорошо спасибо

В понедельник, 19 октября 2015 г., в 8:29, Гаэль Вароко [email protected]
написал:

Поскольку я использую scikit, научитесь делать SVR, elastic-net.
Итак, если есть реализация RVR, мне не нужно будет использовать Matlab
когда
делать анализ машинного обучения.

Вы можете использовать код Python для выполнения RVR, на который мы указали в
обсуждение.

-
Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/scikit-learn/scikit-learn/issues/1513#issuecomment -149213151
.

Не могли бы мы реализовать это как очень легкий класс на основе нашей новой реализации гауссовского процесса? Насколько я понимаю, RVR - это всего лишь имя, данное GP с особым типом ядра.

Хотя это потребует минимальных усилий, основывать реализацию RVR на одном из GP может быть не самым подходящим делом? CC: @jmetzen

@amueller @GaelVaroquaux @ZaixuCui @yedtoss @jlopezpena

Привет, я реализовал быструю версию Relevance Vector Machine с API scikit-learn,
так что, если кто-то намеревается использовать это, не стесняйтесь делать это.

Код: https://github.com/AmazaspShumik/sklearn_bayes/blob/master/sklearn_bayes/rvm/fast_rvm.py

Примеры: https://github.com/AmazaspShumik/sklearn_bayes/blob/master/ipython_notebooks_tutorials/rvm_ard/rvm_demo.ipynb

В коде реализовано четыре класса:
-RegressionARD
-КЛАССИФИКАЦИЯ
-RVC
-RVR

Так что, может быть, RegressionARD и ClassificationARD тоже могут быть полезны.

@AmazaspShumik большое спасибо за вашу реализацию. Отличная работа: +1:

@AmazaspShumik

Большое спасибо за ваши усилия.
Я обязательно попробую этот пакет.

Желаю вам всего наилучшего.

Zaixu

У кого-нибудь были проблемы с реализацией метода @AmazaspShumik pred_proba?

у кого-нибудь здесь есть библиотека для RVM на php? я не понимаю с RVm может мне объяснить?

у кого-нибудь есть библиотека RVM для PHP?

RVM запатентованы Microsoft.

Срок действия патента скоро истечет

2019-09-04
Ожидаемое истечение срока

Некоторые из указанных в обсуждении ссылок на реализацию @AmazaspShumik не работают, просто поместите их сюда для людей, которые интересуются (и некоторыми другими реализациями):

https://github.com/AmazaspShumik/sklearn_bayes - RVM + реализация некоторых других алгоритмов
https://github.com/JamesRitchie/scikit-rvm - простые реализации с использованием scipy
https://github.com/siavashserver/neonrvm - реализация C с привязкой к Python

Также здесь имеется соответствующий сборник статей:
http://www.miketipping.com/sparsebayes.htm

Там есть реализация RVM на C ++ (дополнительный материал статьи):
https://pubs.acs.org/doi/abs/10.1021/ci200128w
Именно здесь:
https://pubs.acs.org/doi/suppl/10.1021/ci200128w/suppl_file/ci200128w_si_001.zip

Срок действия патента Microsoft истек. Можно ли добавить его в sklearn?

Он легко очищает стандартные требования, поэтому я не понимаю, почему бы и нет. Может быть, было бы интересно иметь несколько хороших / убедительных примеров. scikit-rvm и sklearn_bayes кажутся неподдерживаемыми, но все же могут быть полезны.
Наверное, сейчас больше всего нужен чемпион, который действительно хочет поработать.

В книге Мерфи он утверждает, что производительность RVM действительно похожа на SVM, но имеет то преимущество, что является истинно вероятностным методом, поэтому в качестве ответов он дает калиброванные вероятности. Здесь https://github.com/probml/pmtk3/blob/master/docs/tutorial/html/tutKernelClassif.html он сравнил методы, используя небольшой набор данных

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

@amueller http://htmlpreview.github.io/?https : //github.com/probml/pmtk3/blob/master/docs/tutorial/html/tutKernelClassif.html

Постараюсь поработать над реализацией. Любая помощь будет высоко ценится.

IIRC, одно из преимуществ RVM перед SVM, заключается в том, что вы можете найти оптимальный параметр C, не выполняя проход оптимизации.
Интересно, захочет ли первоначальный автор внести свою эталонную реализацию.
Ну, это в Matlab, а Майка Типпинга даже на github нет ...

Привет @amueller и всем! Мы увидели эту тему и решили реализовать версию RVM, совместимую с sklearn (https://github.com/Mind-the-Pineapple/sklearn-rvm). Многое из того, что мы делали, мы основывали на реализации Джеймса Ричи. Было бы здорово, если бы кто-то захотел взглянуть на него, и отзывы и комментарии (@themrzmaster) приветствуются :)
У нас есть планы по поддержанию этого репозитория, реализации быстрой версии в версии 0.2, и мы надеемся, что, возможно, когда-нибудь этот код будет полезен для основного репозитория scikit-learn 😊 🍍

Привет @amueller и всем! Мы увидели эту тему и решили реализовать версию RVM, совместимую с sklearn (https://github.com/Mind-the-Pineapple/sklearn-rvm). Многое из того, что мы делали, мы основывали на реализации Джеймса Ричи. Было бы здорово, если бы кто-то захотел взглянуть на него, и отзывы и комментарии (@themrzmaster) приветствуются :)
У нас есть планы по поддержанию этого репозитория, реализации быстрой версии в версии 0.2, и мы надеемся, что, возможно, когда-нибудь этот код будет полезен для основного репозитория scikit-learn 😊 🍍

Привет, @PedroFerreiradaCosta
Я протестировал этот api scikit-learn, и кажется, что он все еще такой медленный (кажется, еще не отвечает). Как вы думаете, причина может быть в том, что он реализован в Windows? Вот что я использовал:
EMRVC (kernel = 'rbf', gamma = 'scale', n_iter_posterior = 10, max_iter = 500, compute_score = True, verbose = True) Спасибо за ваш ответ @themrzmaster @PedroFerreiradaCosta

Привет @mustuner ! Спасибо, что попробовали наш API!
RVM действительно имеет более высокую вычислительную сложность, чем, например, SVM (O (M ^ 3)), что может замедлить его в случаях, когда у вас есть большое количество базовых функций. В любом случае есть несколько вещей, которые вы можете сделать, чтобы ускорить процесс. Вы можете предварительно вычислить матрицу ядра и передать ее нашему алгоритму вместо X (установите kernel = 'precomputed') или вы также можете уменьшить масштаб alpha_threshold (по умолчанию установлено на 1e5). Имейте в виду, что второй вариант может привести к снижению точности модели.
Надеюсь это поможет! И не стесняйтесь открывать вопрос, чтобы мы могли помочь дальше.

Лучший,
Педро

Привет @mustuner ! Спасибо, что попробовали наш API!
RVM действительно имеет более высокую вычислительную сложность, чем, например, SVM (O (M ^ 3)), что может замедлить его в случаях, когда у вас есть большое количество базовых функций. В любом случае есть несколько вещей, которые вы можете сделать, чтобы ускорить процесс. Вы можете предварительно вычислить матрицу ядра и передать ее нашему алгоритму вместо X (установите kernel = 'precomputed') или вы также можете уменьшить масштаб alpha_threshold (по умолчанию установлено на 1e5). Имейте в виду, что второй вариант может привести к снижению точности модели.
Надеюсь это поможет! И не стесняйтесь открывать вопрос, чтобы мы могли помочь дальше.

Лучший,
Педро

Спасибо @PedroFerreiradaCosta Дай мне попробовать

Была ли эта страница полезной?
0 / 5 - 0 рейтинги