В моем последнем посте мы рассмотрели алгоритм классификации машины опорных векторов (SVM) и то, как он работает. Сегодня мы поговорим о машине опорных векторов ядра.

#100DaysOfMLCode #100ProjectsInML

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

Но что, если наш набор данных содержит точки, как показано ниже. Мы не можем провести линию для разделения данных. Как бы мы ни проводили линию, мы не можем разделить эти точки.

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

Поэтому в таких случаях мы должны использовать Kernel SVM.

Если вы помните в Проекте 12, когда мы создавали объект SVC, мы указывали ядро ​​как линейное.

classifier = SVC(kernel = “linear”, random_state=0)

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

  1. Ядро Гаусса RBF (радиальная базисная функция)
  2. Сигмовидное ядро
  3. Полиномиальное ядро

Для нашего проекта мы будем использовать ядро ​​Gaussian RBF, и мы можем сравнить, получим ли мы лучшие результаты, чем «линейное» ядро.

Давайте начнем.

Цель проекта

Мы будем использовать ту же задачу, что и в Проекте 10. Давайте посмотрим, получим ли мы лучшую точность с ядром SVM по сравнению с логистической регрессией, KNN и SVM с линейным ядром.

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

Примеры строк показаны ниже. Полный набор данных доступен здесь.

Шаг 1. Загрузите набор данных

Из набора данных мы видим, что у нас есть 3 независимые переменные «Пол», «Возраст» и «Зарплата». Все 3 важны и могут сыграть роль в предсказании. Поэтому мы включим все 3 и назначим их X.

y будет содержать зависимую переменную «Купленный iPhone».

Шаг 2. Преобразование пола в число

Большинство алгоритмов машинного обучения не могут обрабатывать категориальные (текстовые) данные. Итак, если наш набор данных содержит и текстовые данные — их нужно преобразовать в числа. В нашем наборе данных у нас есть переменная Gender в формате String. Итак, мы должны преобразовать это в числовой формат.

Мы будем использовать класс LabelEncoder для преобразования пола в число.

Вот снимок наших переменных X и y.

Шаг 3: Разделите данные на обучающий и тестовый наборы

Мы должны разделить данные для обучения и тестирования. Мы будем использовать 25% набора данных в качестве тестовой выборки и 75% в качестве обучающей выборки.

Шаг 4: Масштабирование функций

Поскольку независимые переменные имеют разный масштаб, важно выполнить масштабирование признаков. Например, в нашем наборе данных пол равен 0 или 1, возраст — двузначное число, а зарплата — пятизначное число. Поэтому, если мы не масштабируем, алгоритм может придать больший вес переменной «Зарплата», поскольку она намного больше, чем возраст. Чтобы избежать этого, мы масштабируем характеристики, чтобы все переменные находились в одном масштабе.

Для этой цели мы будем использовать Standard Scaler.

Шаг 5: Подгонка классификатора SVM

Мы будем использовать классификатор SVC из библиотеки sklearn.svm. Когда мы создаем объект класса SVC, мы должны передать параметр ядра. В Проекте 12 мы использовали линейное ядро.

Но в этом проекте мы будем использовать ядро ​​rbf, которое является ядром радиальной базисной функции Гаусса.

Шаг 6: Делайте прогнозы

Давайте сделаем некоторые прогнозы по набору тестовых данных.

Шаг 7: Оцените производительность модели

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

Подробно о том, как рассчитываются эти баллы, вы можете прочитать в Проекте 10.

[[64 4]
 [ 3 29]]
Accuracy score: 0.93
Precision score: 0.8787878787878788
Recall score: 0.90625

Ух ты !!! — у нас всего 7 (4+3) неправильных предсказаний и показатель точности 93%.

Вывод

До сих пор мы решали ту же проблему, используя логистическую регрессию, классификаторы KNN и SVM. Сегодня мы использовали Kernel SVM. Давайте сравним результаты всех классификаторов.

Что ж, Kernel SVM работает намного лучше, чем линейный SVM. Но его результаты почти идентичны KNN Classifier.

Надеюсь, вы получаете удовольствие от создания этих классификаторов и видите, чья производительность выше.

Полный исходник можно найти здесь.