Поддержка векторной машины против k ближайших соседей

У меня есть набор данных для classify.By используя KNN algo, я получаю точность 90% , но, используя SVM, я могу получить более 70%. Является SVM не лучше, чем KNN. Я знаю, что это может быть глупо спрашивать, но каковы параметры SVM, которые дадут почти приблизительные результаты как KNN algo. Я использую пакет libsvm на matlab R2008

3 ответов


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

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

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


Это действительно зависит от используемого Вами набора данных. Если у вас есть что - то вроде первой строки этого изображения (http://scikit-learn.org/stable/_images/plot_classifier_comparison_1.png ) kNN будет работать очень хорошо и линейный SVM очень плохо.

Если вы хотите, чтобы SVM работал лучше, вы можете использовать SVM на основе ядра, как на картинке (он использует ядро rbf).

Если вы используете scikit-learn для python, вы можете немного поиграть с кодом здесь, чтобы узнать, как использовать ядро SVM http://scikit-learn.org/stable/modules/svm.html


kNN в основном говорит: "Если вы близки к координате x, то классификация будет похожа на наблюдаемые результаты в x". В SVM близкий аналог будет использовать многомерное ядро с" малым " параметром полосы пропускания, так как это приведет к тому, что SVM больше подойдет. То есть SVM будет ближе к "если вы близки к координате x, то классификация будет аналогична наблюдаемым при x".

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

вопросы:

1) Как вы выбираете k в kNN?

2) Какие параметры вы пробовали для SVM?

3) вы измеряете точность в образце или вне образца?