Пользовательские ядра для SVM, когда их применять?

Я новичок в области машинного обучения и прямо сейчас пытаюсь понять, как работают наиболее распространенные алгоритмы обучения и понять, когда применять каждый из них. На данный момент я изучаю, как работают векторные машины поддержки, и у меня есть вопрос о пользовательских функциях ядра.
В интернете есть много информации о более стандартных (линейных, RBF, полиномиальных) ядрах для SVMs. Я, однако, хотел бы понять, когда разумно перейти к пользовательской функции ядра. Мой вопросы:

1) каковы другие возможные ядра для SVMs?
2)в какой ситуации будут применяться пользовательские ядра?
3) может ли пользовательское ядро существенно улучшить качество прогнозирования SVM?

1 ответов


1) каковы другие возможные ядра для SVMs?

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

https://github.com/gmum/pykernels

  • линейный
  • полинома
  • RBF
  • Косинус сходство
  • экспоненциальный
  • Лапласа
  • рациональное квадратичный
  • обратный multiquadratic
  • Копти
  • T-Student
  • ANOVA
  • Добавка Chi^2
  • Chi^2
  • MinMax
  • Min/пересечение гистограммы
  • пересечение обобщенной гистограммы
  • корпус
  • Соренсен
  • Tanimoto
  • Wavelet
  • Фурье
  • Log (CPD)
  • власть (CPD)

2) в какой ситуации можно было бы применить пользовательские ядра?

в основном в двух случаях:

  • "простой", дают очень плохие результаты
  • данные в некотором смысле специфичны, и поэтому для применения традиционных ядер нужно вырождать их. Например, если ваши данные находятся в формате графика, вы не можете применить ядро RBF, так как график не является вектором постоянного размера, поэтому вам нужно ядро графика для работы с этим объект без какой-либо информации-потеря проекции. также иногда у вас есть понимание данных, вы знаете о какой-то базовой структуре, которая может помочь классификатору. Одним из таких примеров является периодичность, вы знаете, что в ваших данных есть своего рода эффект восстановления - тогда, возможно, стоит искать конкретное ядро и т. д.

3) может ли пользовательское ядро существенно улучшить качество прогнозирования SVM?

да, в частности там всегда существует (hypothethical) байесовского оптимального ядра, определяется как:

K(x, y) = 1 iff arg max_l P(l|x) == arg max_l P(l|y)

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