Задание 1. Обучение линейного SVM

Дан набор данных:

import numpy as np

 

X = np.array([

    [1, 1],

    [2, 2],

    [3, 2],

    [6, 6],

    [7, 7],

    [8, 6]

])

 

y = np.array([0, 0, 0, 1, 1, 1])

Необходимо:

  1. Создать Pipeline из StandardScaler и SVC.
  2. Использовать линейное ядро kernel="linear".
  3. Установить C=1.0.
  4. Обучить модель.
  5. Определить классы объектов [2, 2] и [7, 6].
  6. Вывести количество и индексы опорных векторов.
  7. Объяснить роль опорных векторов при построении разделяющей границы.

Задание 2. Исследование параметра C

Используя make_classification, необходимо:

  1. Создать 200 наблюдений с 5 признаками.
  2. Разделить данные на обучающую и тестовую выборки.
  3. Обучить линейный SVM при C=0.1, C=1 и C=10.
  4. Использовать масштабирование признаков.
  5. Вычислить точность классификации для каждого значения C.
  6. Сравнить результаты.
  7. Объяснить, как параметр C влияет на баланс между шириной зазора и штрафом за нарушения.

Задание 3. Сравнение линейного и RBF-ядер

Используя набор данных make_circles, необходимо:

  1. Сгенерировать 300 наблюдений.
  2. Разделить данные на обучающую и тестовую выборки.
  3. Обучить модель SVM с линейным ядром.
  4. Обучить модель SVM с RBF-ядром.
  5. Для RBF сравнить gamma=0.1 и gamma=1.
  6. Вычислить точность моделей.
  7. Объяснить, почему ядерная функция позволяет формировать нелинейные границы.