Nano Hash - криптовалюты, майнинг, программирование

Какова связь между количеством опорных векторов и данными обучения и производительностью классификаторов?

Я использую LibSVM для классификации некоторых документов. Документы кажутся немного сложными для классификации, как показывают окончательные результаты. Однако я кое-что заметил, когда тренировал свои модели. а именно: если мой тренировочный набор, например, 1000, около 800 из них выбираются в качестве опорных векторов. Я искал везде, чтобы понять, хорошо это или плохо. Я имею в виду, есть ли связь между количеством векторов поддержки и производительностью классификаторов? Я прочитал этот предыдущий пост но я выполняю выбор параметров, а также я уверен, что все атрибуты в векторах признаков упорядочены. Мне просто нужно знать отношение. Спасибо. p.s. Я использую линейное ядро.


  • Между прочим, RBF-SVM для 50000 цифр MNIST (784d) дает 14398 опорных векторов, 29%. 28.06.2016

Ответы:


1

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

Линейный SVM с жесткой маржой

В обучающем наборе, где данные линейно разделимы, и вы используете жесткую границу (провисание не допускается), опорные векторы — это точки, которые лежат вдоль поддерживающих гиперплоскостей (гиперплоскости, параллельные разделяющей гиперплоскости на краях границы). )

SVM с жесткими границами

Все опорные векторы лежат точно на краю. Независимо от количества измерений или размера набора данных, количество опорных векторов может быть всего 2.

Линейный SVM с мягкой маржой

Но что, если наш набор данных не является линейно разделимым? Мы вводим SVM с мягкой маржой. Мы больше не требуем, чтобы наши точки данных находились за пределами поля, мы позволяем некоторому их количеству отклоняться от линии на поле. Мы используем резервный параметр C, чтобы контролировать это. (nu в nu-SVM) Это дает нам более широкий запас и большую ошибку в обучающем наборе данных, но улучшает обобщение и/или позволяет нам найти линейное разделение данных, которое не является линейно разделимым.

Линейный SVM с мягкой маржой

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

Нелинейный SVM

Это подводит нас к нелинейному SVM. Мы все еще пытаемся линейно разделить данные, но теперь мы пытаемся сделать это в пространстве более высокого измерения. Это делается с помощью функции ядра, которая, конечно же, имеет собственный набор параметров. Когда мы переводим это обратно в исходное пространство признаков, результат оказывается нелинейным:

введите здесь описание изображения

Теперь количество опорных векторов по-прежнему зависит от того, какой резерв мы допускаем, но также зависит от сложности нашей модели. Каждый изгиб и поворот в окончательной модели в нашем входном пространстве требует определения одного или нескольких опорных векторов. В конечном счете, выход SVM — это опорные векторы и альфа, которые, по сути, определяют, насколько сильно этот конкретный опорный вектор влияет на окончательное решение.

Здесь точность зависит от компромисса между моделью высокой сложности, которая может чрезмерно соответствовать данным, и большим запасом, который неправильно классифицирует некоторые обучающие данные в интересах лучшего обобщения. Количество опорных векторов может варьироваться от очень немногих до каждой отдельной точки данных, если вы полностью подгоняете свои данные. Этот компромисс управляется через C и через выбор ядра и параметров ядра.

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

Хороший ресурс: A Tutorial on Support Векторные машины для распознавания образов

28.02.2012
  • отличный ответ! но ссылка больше не работает... не могли бы вы обновить ее? 25.11.2013
  • Учебное пособие по методам опорных векторов для распознавания образов (архив из кэшированной версии). 20.08.2017
  • Количество опорных векторов может варьироваться от очень немногих до каждой отдельной точки данных, если вы полностью подгоняете свои данные. Подводя итог, можно сказать, что большое количество опорных векторов — это плохо. Итак, вопрос в том, велики ли 800 SV из 1000 обучающих выборок? 15.02.2018
  • Спасибо! ... По ссылкам и ссылкам я нашел это хорошее объяснение! :) 26.10.2018

  • 2

    800 из 1000 в основном говорят вам, что SVM должен использовать почти каждый обучающий образец для кодирования обучающего набора. Это в основном говорит вам, что в ваших данных нет большой регулярности.

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

    28.02.2012
  • Я выбрал это как ответ. Предыдущие длинные ответы - это просто неуместные объяснения C&P SVM. 09.03.2015
  • Я согласен. Хотя другие ответы пытались дать хорошее резюме, это наиболее актуально для OP. Если доля С.В. большой, это указывает на запоминание, а не обучение, а это означает, что плохое обобщение => ошибка вне выборки (ошибка тестового набора) будет большой. 24.01.2017

  • 3

    Как количество выборок, так и количество атрибутов могут влиять на количество опорных векторов, делая модель более сложной. Я полагаю, что вы используете слова или даже энграммы в качестве атрибутов, так что их довольно много, а модели естественного языка сами по себе очень сложны. Итак, 800 опорных векторов из 1000 выборок кажутся нормальными. (Также обратите внимание на комментарии @karenu о параметрах C/nu, которые также сильно влияют на количество SV).

    Чтобы понять это, вспомните основную идею SVM. SVM работает в многомерном пространстве признаков и пытается найти гиперплоскость, которая разделяет все заданные выборки. Если у вас много образцов и только 2 функции (2 измерения), данные и гиперплоскость могут выглядеть так:

    введите здесь описание изображения

    Здесь всего 3 опорных вектора, все остальные находятся за ними и не играют никакой роли. Обратите внимание, что эти опорные векторы определяются только двумя координатами.

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

    введите здесь описание изображения

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

    Когда данные хорошо структурированы (т. е. достаточно хорошо удерживают шаблоны), может понадобиться только несколько опорных векторов — все остальные останутся позади них. Но текст — это очень и очень плохо структурированные данные. SVM делает все возможное, пытаясь подогнать выборку как можно лучше, и, таким образом, берет в качестве опорных векторов даже больше выборок, чем отбрасывает. С увеличением количества выборок эта «аномалия» уменьшается (появляются более незначительные выборки), но абсолютное число опорных векторов остается очень высоким.

    28.02.2012
  • Спасибо за ответ! у вас есть ссылки на то, что вы упомянули в последнем абзаце? Когда данные хорошо структурированы (т. е. достаточно хорошо удерживают шаблоны), может понадобиться только несколько опорных векторов — все остальные останутся позади них. Но текст — это очень и очень плохо структурированные данные. SVM делает все возможное, пытаясь подогнать выборку как можно лучше, и, таким образом, берет в качестве опорных векторов даже больше выборок, чем отбрасывает. Спасибо 28.02.2012
  • Это неверно — у вас может быть трехмерный набор данных только с двумя опорными векторами, если набор данных линейно разделим и имеет правильное распределение. Вы также можете иметь точно такой же набор данных и получить 80% опорных векторов. Все зависит от того, как вы установите C. На самом деле, в nu-svm вы можете контролировать количество опорных векторов, установив nu на очень низкое значение (0,1). 28.02.2012
  • @karenu: я не говорил, что рост количества атрибутов всегда приводит к росту числа опорных векторов, я просто сказал, что даже при фиксированных параметрах C/nu количество опорных векторов зависит от количества измерений признаков и количества выборок. А для текстовых данных, которые по своей природе очень плохо структурированы, количество опорных векторов внутри поля (SVM с жестким полем неприменим для классификации текста даже с ядрами более высокого порядка) всегда будет велико. 29.02.2012
  • @Hossein: я имею в виду линейную разделимость. Представьте себе задачу классификации спама. Если ваши спам-сообщения почти всегда содержат такие слова, как виагра, покупка, деньги, а ваши сообщения ветчины содержат только дом, привет, привет, то ваши данные хорошо структурированы и могут быть легко разделены по этим векторам слов. Однако на практике у вас есть смесь хороших и плохих слов, и поэтому ваши данные не имеют каких-либо очевидных закономерностей. Если у вас есть 3 слова из словаря спама и 3 слова из ham, как вы должны классифицировать сообщение? Вам нужно больше функций, и это одна из причин, по которой SVM использует больше векторов поддержки. 29.02.2012
  • @ffriend Я считаю, что это вводит в заблуждение. Сказать, что это зависит для меня, звучит так, будто если ваш набор данных увеличится, ваше количество sv увеличится, что существует какая-то связь между количеством выборок (или количеством измерений) и количеством опорных векторов. Существует связь между сложностью модели и SV, и большие наборы данных с более высокими измерениями имеют тенденцию иметь более сложные модели, но размер набора данных или размерность напрямую не диктуют # КА. 29.02.2012
  • @karenu: я согласен, что это просто тенденция, и я никогда не говорил, что количество измерений или количество выборок напрямую влияет на количество опорных векторов. Вы пытаетесь доказать, что мой ответ неверен, потому что он не охватывает всех деталей SVM. Но я не пытаюсь этого делать, потому что вопрос не об этом. Автора смутило большое количество SV, поэтому я попытался максимально просто объяснить это явление текстовыми документами. По SVM есть много статей, так что я думаю, что если бы автору были интересны все подробности, он мог бы прочитать их сам. 29.02.2012
  • Может быть, вы могли бы перефразировать свой ответ тогда? Когда вы говорите, что количество опорных векторов зависит как от количества выборок, так и от количества атрибутов. мне кажется, что вы говорите именно это, возможно, поэтому мы не понимаем друг друга. 29.02.2012
  • @karenu: ах, конечно, я перефразирую и добавлю несколько примечаний. 29.02.2012

  • 4

    Классификация SVM линейна по количеству опорных векторов (SV). Количество SV в худшем случае равно количеству обучающих выборок, поэтому 800/1000 — это еще не худший случай, но все равно довольно плохо.

    Опять же, 1000 обучающих документов — это небольшой обучающий набор. Вы должны проверить, что происходит, когда вы масштабируете до 10000 или более документов. Если ситуация не улучшится, рассмотрите возможность использования линейных SVM, обученных с помощью LibLinear, для классификации документов; они масштабируются намного лучше (размер модели и время классификации линейны по количеству признаков и не зависят от количества обучающих выборок).

    28.02.2012
  • Просто любопытно, почему вы предполагаете, что OP еще не использует линейный SVM? Должно быть, я пропустил это, если использовал какое-то нелинейное ядро. 28.02.2012
  • @ChrisA.: они могут использовать линейную SVM, но тогда она реализована в LibSVM, что неоптимально по сравнению с теми, что в LibLinear. 28.02.2012
  • @Hossein: тогда используйте LibLinear вместо LibSVM. Это намного быстрее в обучении, и его классификация использует не опорные векторы, а один вектор коэффициентов. 28.02.2012
  • Это неоптимально с точки зрения скорости только правильно? Я думал, что все SVM были QP, выпуклой функцией оптимизации с уникальным минимумом. 28.02.2012
  • @ChrisA.: да, я говорю только о скорости. Точность должна быть примерно одинаковой при использовании одних и тех же настроек (хотя и LibSVM, и LibLinear используют некоторую рандомизацию, поэтому даже не гарантируется, что она будет одинаковой при нескольких запусках одного и того же алгоритма обучения). 28.02.2012
  • Подождите, эта рандомизация дойдет до финального классификатора? Я не смотрел код ни для одной из библиотек, но это противоречит моему пониманию того, что это проблема выпуклой оптимизации с уникальным минимумом. 28.02.2012
  • Эта рандомизация выполняется только на этапе обучения в качестве ускорения. Задача оптимизации действительно выпуклая. 28.02.2012
  • Рандомизация просто помогает быстрее прийти к оптимальному решению. 28.02.2012
  • Теоретически да, но я видел, как это вызывало небольшие изменения в конечной точности. 28.02.2012
  • @larsmans 1000 учебных документов — это небольшой набор для обучения. Мне интересно, почему вы думаете, что 1000 здесь мало. Есть ли где-нибудь результаты по количеству необходимых тренировочных очков по сравнению с количеством атрибутов? 02.12.2014

  • 5

    Существует некоторая путаница между источниками. В учебнике ISLR 6th Ed, например, C описывается как «бюджет нарушения границ», из чего следует, что более высокий C допускает большее количество нарушений границ и больше векторов поддержки. Но в реализациях svm в R и python параметр C реализуется как «наказание за нарушение», что является противоположностью, и тогда вы заметите, что для более высоких значений C меньше опорных векторов.

    15.02.2018
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..