Пользовательские ядра для 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.