В этом примере демонстрируется одноклассный классификатор SVM ;он настолько прост, насколько это возможно, и в то же время показывает полный рабочий процесс LIBSVM.
Шаг 1 : импорт NumPy & LIBSVM
import numpy as NP
from svm import *
Шаг 2: Создание синтетических данных: для этого примера 500 точек в пределах заданной границы (примечание: на LIBSVM * 1020 предоставлено довольно много реальных наборов данных* website )
Data = NP.random.randint(-5, 5, 1000).reshape(500, 2)
Шаг 3: Теперь выберите некоторую нелинейную границу решения для однокласса классификатор:
rx = [ (x**2 + y**2) < 9 and 1 or 0 for (x, y) in Data ]
Шаг 4: Далее произвольно разделить данные по этой границе решения:
Класс I : те, которые лежат на или в произвольном круге
Класс II : все точки за пределами граница принятия решения (круг)
Здесь начинается построение модели SVM;все шаги до этого были просто для подготовки синтетических данных.
Шаг 5 : Составьте описание проблемы , вызвав svm_problem , передавая граничную функцию принятия решения и data , затем свяжите этот результат с переменной.
px = svm_problem(rx, Data)
Шаг 6: Выберите функцию ядра для нелинейного отображения
Для этого примера я выбрал RBF (радиальная базисная функция) как функция моего ядра
pm = svm_parameter(kernel_type=RBF)
Шаг 7: Обучить классификатор, вызвав svm_model , передаваяв описании проблемы (px) & kernel (pm)
v = svm_model(px, pm)
Шаг 8: Наконец,протестировать обученный классификатор, вызвав Forex на обученном модельном объекте ('v')
v.predict([3, 1])
# returns the class label (either '1' or '0')
. Для примера выше я использовал версию 3.0 LIBSVM (текущий стабильный выпуск на тот момент был опубликован этот ответ ).
Наконец, ответим на часть вашего вопроса относительно выбора функции ядра , Машины опорных векторов не специфичны для конкретной функции ядра - например, я мог бы выбрать другое ядро (гауссово, полиномиальное и т. Д.).
LIBSVM включает в себя все наиболее часто используемые функции ядра - это большая помощь, потому что вы можете увидеть все возможные альтернативы и выбрать одну для использования в вашей модели, это всего лишь вопрос вызова svm_parameter и передачи значения для kernel_type (трехбуквенное сокращение для выбранного ядра).
Наконец, функция ядра, которую вы выбираете для обучения, должна соответствовать функции ядра, используемой противданные тестирования.